数据结构-栈

来源:互联网 发布:淘宝权和55开闹翻视频 编辑:程序博客网 时间:2024/06/03 08:57

栈的定义
  栈是一种特殊的线性表。其特殊性在于仅允许在表的一端进行插入和删除。
  

Stack

public interface Stack<AnyType> {    void push(AnyType x);    void pop();    AnyType top();    AnyType topAndPop();    boolean isEmpty();    void makeEmpty();}

动态数组实现

public class ArrayStack<AnyType> implements Stack<AnyType> {    public ArrayStack() {        theArray = (AnyType[]) new Object[DEFAULT_CAPACITY];        topOfStack = -1;    }    @Override    public void push(AnyType x) {        if (topOfStack + 1 == theArray.length)             doubleArray();        theArray[++topOfStack] = x;    }    @Override    public void pop() {        if (isEmpty())            System.out.println("ArrayStack pop");        topOfStack--;    }    @Override    public AnyType top() {        if (isEmpty())             System.out.println("ArrayStack top");        return theArray[topOfStack];    }    @Override    public AnyType topAndPop() {        if (isEmpty())             System.out.println("ArrayStack topAndPop");        return theArray[topOfStack--];    }    @Override    public boolean isEmpty() {        return topOfStack == -1;    }    @Override    public void makeEmpty() {        topOfStack = -1;    }    private AnyType[] theArray;    private int topOfStack;    private static final int DEFAULT_CAPACITY = 10;}

链表实现

public class ListStack<AnyType> implements Stack<AnyType> {    @Override    public void push(AnyType x) {        topOfStack=new ListNode(x, topOfStack);    }    @Override    public void pop() {        if(isEmpty())            System.out.println("ListStack pop");        topOfStack=topOfStack.next;    }    @Override    public AnyType top() {        return topOfStack.element;    }    @Override    public AnyType topAndPop() {        AnyType topItem=topOfStack.element;        topOfStack=topOfStack.next;        return topItem;    }    @Override    public boolean isEmpty() {        return false;    }    @Override    public void makeEmpty() {    }    private ListNode<AnyType> topOfStack=null;}class ListNode<AnyType>{    public ListNode(AnyType theElement) {        this(theElement,null);    }    public ListNode(AnyType theElement,ListNode<AnyType> n) {        element=theElement;        next=n;    }    public AnyType element;    public ListNode next;}
0 0