數據結構——棧

stack,中文翻譯爲堆棧,其實指的是棧,heap,堆。這裏講的是數據結構的棧,不是內存分配裏面的堆和棧。node

棧是先進後出的數據的結構,比如你碟子一個一個堆起來,最後放的那個是堆在最上面的。數組

棧是一種用於存儲數據的簡單數據結構,有點相似鏈表或者順序表(統稱線性表),棧與線性表的最大區別是數據的存取的操做,咱們能夠這樣認爲棧(Stack)是一種特殊的數據結構

線性表,其插入和刪除操做只容許在線性表的一端進行,通常而言,把容許操做的一端稱爲棧頂(Top),不可操做的一端稱爲棧底(Bottom),同時把插入元素的操做稱爲入棧this

(Push),刪除元素的操做稱爲出棧(Pop)。若棧中沒有任何元素,則稱爲空棧。spa

順序棧翻譯

順序棧,顧名思義就是採用順序表實現的的棧,順序棧的內部以順序表爲基礎,實現對元素的存取操做,固然咱們還能夠採用內部數組實現順序棧,在這裏咱們使用內部數據code

組來實現棧blog

package com.demo.stack;

public class SeqStack {

    private int top = -1;
    private int capacity = 10;
    private int[] array;
    private int size;
    
    public SeqStack(int capacity){
        array = new int[capacity];
    }
    
    public SeqStack(){
        array = new int[this.capacity];
    }
    
    public int size(){
        return size;
    }
    
    public boolean isEmpty(){
        return this.top == -1;
    }
    
    public void push(int data){
        if(array.length == size){
            addCapacity(size*2);
        }
        array[++top] = data;
        size++;
    }
    
    public int pop(){
        if(isEmpty()){
            return -1;
        }
        size--;
        array[top] = (Integer) null;
        return array[top--];
    }
    
    public void addCapacity(int capacity){
        if(capacity < size){
            return;
        }
        int[] old = array;
        array = new int[capacity];
        for(int i=0; i<size; i++){
            array[i] = old[i];
        }
    }
}

 

鏈式棧內存

瞭解完順序棧,咱們接着來看看鏈式棧,所謂的鏈式棧(Linked Stack),就是採用鏈式存儲結構的棧,因爲咱們操做的是棧頂一端,所以這裏採用單鏈表(不帶頭結點)ci

做爲基礎,直接實現棧的添加,獲取,刪除等主要操做便可。

package com.demo.node;

public class Node {

    public int data;
    public Node next = null;
    
    public Node(int data){
        this.data = data;
    }
    
    public Node(int data, Node node){
        this.data = data;
        this.next = node;
    }
}

 

package com.demo.stack;

import com.demo.node.Node;

public class LinkedStack {

    private Node top;
    private int size;
    
    public LinkedStack(){
        this.top = null;
    }
    
    public int size(){
        return this.size;
    }
    
    public void push(int data) throws Exception{
        if(this.top == null){
            this.top = new Node(data);
        }else{
            Node p = new Node(data,this.top);
            top = p;
        }
        size++;
    }
    
    public int pop(){
        int data = top.data;
        top = top.next;
        size--;
        return data;
    }
}
相關文章
相關標籤/搜索