栈的两种实现方法--数组实现与链式实现

来源:互联网 发布:学生手机兼职赚钱软件 编辑:程序博客网 时间:2024/06/06 16:36

栈(stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈顶(top)。栈又叫做先进后出(Last In First Out)表。

栈通过push向栈输入,通过poptop从栈中输出,只有栈顶元素可以访问。

栈有两种实现方法,一种是是通过数组实现,一种是链式实现。

数组实现代码如下:

public class ArrayStack<AnyType> {    private AnyType []theArray;  //存储空间基址private int topOfStack;  //栈顶private static final int space=10;  //数组容量public ArrayStack(){topOfStack=-1;increaseSpace(space);}public boolean isEmpty(){          //判断是否为空return topOfStack==-1;}public void push(AnyType x){         //压栈if(topOfStack>space)increaseSpace(space+1);topOfStack++;theArray[topOfStack]=x;}public AnyType pop() {                 //出栈if(topOfStack==-1)return null;        AnyType a=theArray[topOfStack];        topOfStack--;        return a;}public void increaseSpace(int space){    //扩容AnyType old[]=theArray;theArray=(AnyType []) new Object[space];for(int i=0;i<topOfStack+1;i++)theArray[i]=old[i];}public static void main(String[] args) {    ArrayStack<Integer> as=new ArrayStack<Integer>();    as.push(1);    as.push(2);    as.push(3);    as.push(4);    System.out.println(as.pop());    System.out.println(as.pop());    System.out.println(as.pop());    System.out.println(as.pop());    System.out.println(as.pop());        }}


通过链式实现的代码如下:

public class SingleLinkedStack<AnyType> {private Node<AnyType> top;private int theSize;class Node<AnyType>{        //结点Node类 public AnyType data; public Node<AnyType> next; public Node(AnyType d,Node<AnyType> next ){ this.data=d; this.next=next; } public Node(AnyType d){ this.data=d; this.next=null; } public Node(){ this.data=null; this.next=null; }}public SingleLinkedStack(){top=null;theSize=0;}public boolean isEmpty(){return theSize==0;}public void push(AnyType x){Node<AnyType> newNode=new Node(x);newNode.next=top;top=newNode;theSize++;}public AnyType pop(){if(isEmpty())return null;AnyType a=top.data;top=top.next;theSize--;return a;}public static void main(String[] args) {SingleLinkedStack<String> sls=new SingleLinkedStack<String>();sls.push("aaa");sls.push("bbb");sls.push("ccc");sls.push("ddd");System.out.println(sls.pop());System.out.println(sls.pop());System.out.println(sls.pop());System.out.println(sls.pop());}}


 

原创粉丝点击