链表式:插入头部构造链表
代码如下:
package nuaa.ds; import java.util.NoSuchElementException; //插入头部的链表实现Stack public class LinkedStack<T> { private Node<T> top; private int size;//current size public void push(T t){ if(null==t){ throw new IllegalArgumentException(); } if(size==0){ top = new Node<T>(t); size++; }else{ Node<T> p = new Node<T>(t); p.next = top; top = p; size++; } } public T pop(){ if(size==0){ throw new NoSuchElementException(); } Node<T> p = top; top = top.next; size--; return p.t; } public LinkedStack(){ this.size = 0; } public int size(){ return this.size; } public boolean isEmpty(){ return size==0 ? true : false; } class Node<U>{ U t; Node<U> next; public Node(U t) { super(); this.t = t; } } }
动态数组式:每次满了就double size,没什么含金量
代码如下:
package nuaa.ds; public class Stack<T>{ //top指示Stack最上面元素 //Stack顶可以是数组最低项也可以是最高项 //集合类存放的是引用或者原始类型 //链表实现一定得头插入 //括号匹配,左入栈,右对比然后出栈 private int size;//总大小 private int top;//栈顶下标 private Object[] arrays; public boolean push(T a){ if(this.top==this.size-1){ this.size = this.size*2; Object[] orignal = arrays; arrays = new Object[this.size]; for(int i=0;i<size/2;i++) arrays[i] = orignal[i]; } top = top+1; arrays[top] = a; return true; } public T pop(){ if(top==-1) return null; top = top-1; return (T)arrays[top+1]; } public T peek(){ if(top==-1) return null; return (T)arrays[top+1]; } public boolean isEmpty(){ return top==-1 ? true : false; } public Stack(){ this(2); } public Stack(int size){ this.size = size; this.top = -1; arrays = new Object[this.size]; } public int size(){ return this.size; } }