1.链接形式
package cn.com.Inf; public interface StackADT<T> { public void push(T element);//头部添加 public T pop();//头部删除 public T peek();//头部元素查看 public boolean isEmpty();// public int size();// public String toString();// }
package cn.com.MyStack; import java.util.EmptyStackException; import cn.com.Inf.StackADT; import cn.com.Node.StackNode; public class MyStack<T> implements StackADT<T> { private StackNode<T> top; private int count; @Override public void push(T element) { // TODO Auto-generated method stub StackNode<T> temp = new StackNode<T>(element); temp.setNext(top) ; top = temp; count++; } @Override public T pop() { // TODO Auto-generated method stub T result = null; if(isEmpty()){ throw new EmptyStackException(); } result = top.getElement(); top = top.getNext(); count--; return result; } @Override public T peek() { // TODO Auto-generated method stub T result = null; if(isEmpty()){ throw new EmptyStackException(); } result = top.getElement(); return result; } @Override public boolean isEmpty() { // TODO Auto-generated method stub return (count == 0); } @Override public int size() { // TODO Auto-generated method stub return count; } public String toString(){ T [] result = (T [])new Object[count]; for(int i = 0 ; i < count ; i++){ result[i] = top.getElement(); System.out.println(result[i]); top = top.getNext(); } return ""; } }
package cn.com.Node; public class StackNode<T> { private StackNode<T> next; private T element; public StackNode(){ next = null; element = null; } public StackNode(T element){ next = null; this.element = element; } public StackNode<T> getNext() { return next; } public void setNext(StackNode<T> next) { this.next = next; } public T getElement() { return element; } public void setElement(T element) { this.element = element; } }2.数组实现
package cn.com.Inf; public interface StackADT<T> { public void push(T element); public T pop(); public T peek(); public boolean isEmpty(); public int size(); public String toString(); }
package cn.com.MyStackTwo; import java.util.EmptyStackException; import cn.com.Inf.StackADT; public class MyStackTwo<T> implements StackADT<T>{ private T[] contents; private T next; private int top; private int init_capcity =2; public MyStackTwo(){ top = 0; contents = (T[])new Object[init_capcity]; } public void push(T element) { // TODO Auto-generated method stub if(this.size() == contents.length){ expands(); } contents[top] = element; top++; } private void expands() { // TODO Auto-generated method stub T[] temp = (T[])( new Object[contents.length*2]); for(int i = 0 ; i < contents.length ; i++){ temp[i] = contents[i]; } contents = temp; } @Override public T pop() { // TODO Auto-generated method stub T result = null; if(isEmpty()){ throw new EmptyStackException(); } top--; result = contents[top]; contents[top] = null; return result; } @Override public T peek() { T result = null; if(isEmpty()){ throw new EmptyStackException(); } top--; result = contents[top]; return result; } @Override public boolean isEmpty() { // TODO Auto-generated method stub return (top == 0); } @Override public int size() { // TODO Auto-generated method stub return top; } }