链表式:插入头部构造链表
代码如下:
- 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.top+1;
- }
- }