1.栈
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
2.用数组实现栈
public class ArrayStackDemo { public static void main(String[] args) { ArrayStack arrayStack=new ArrayStack(5); arrayStack.push(1); arrayStack.push(3); arrayStack.pop(); arrayStack.pop(); arrayStack.pop(); arrayStack.list(); } } class ArrayStack{ private int maxsize; private int top=-1; private int []stack; public ArrayStack(int maxsize){ this.maxsize=maxsize; stack=new int[maxsize]; } //栈出 public void pop(){ if (isEmpty()){ System.out.println("队列已经空了"); } else{ System.out.printf("输出的值为%d",stack[top--]); } } //栈入 public void push(int a){ if (isFull()){ System.out.println("栈已经满了"); } else{ stack[++top]=a; } } //栈的遍历 public void list(){ int s=top; System.out.print("出栈顺序为"); if(isEmpty()){ System.out.println("栈空"); } else{ for (int i = s; i >=0; i--) { System.out.printf(" %d",stack[i]); } System.out.println(); } } //栈空 public boolean isEmpty(){ return top==-1; } //栈满 public boolean isFull(){ return top==maxsize-1; } public int getTop() { return top; } public void setTop(int top) { this.top = top; } public int getMaxsize() { return maxsize; } public void setMaxsize(int maxsize) { this.maxsize = maxsize; } }
3.用链表实现栈
public class LinkedList { public static void main(String[] args) { Stack1 stack=new Stack1(); //存放栈的数据 List hero1=new List(1,5); List hero2=new List(2,5); List hero3=new List(3,5); List hero4=new List(4,5); List hero5=new List(5,5); stack.push(hero1); stack.push(hero2); stack.push(hero3); stack.push(hero4); stack.push(hero5); stack.list(); stack.pop(); stack.list(); } } class Stack1{ //设置栈的大小maxsize List head=new List(0,5); //判断栈空 public boolean isEmpty(){ return head.next==null; } //判断栈满 public boolean isFull(){ List temp=head; int i = 0; while(temp!=null){ if (i== head.maxsize){ return true; } else{ temp=temp.next; i++; } } return false; } //栈入 public void push(List list1){ List temp=head; if (isFull()){ System.out.println("栈已经满了"); } else { while (true) { if (temp.next == null) { temp.next = list1; break; } temp=temp.next; } } } //栈出 public void pop(){ List temp=head; while(true){ if (head.next==null){ System.out.println("栈中没有数"); } else if (temp.next.next==null){ temp.next=null; break; } temp=temp.next; } } //遍历栈 public void list(){ List temp1=head.next; while (true){ if (temp1==null){ break; } else { System.out.print(temp1.toString()); temp1=temp1.next; } } System.out.println(); } } class List{ public int data; public int maxsize; public List next; public int getMaxsize() { return maxsize; } public void setMaxsize(int maxsize) { this.maxsize = maxsize; } public List(int data, int maxsize){ this.data=data; this.maxsize=maxsize; } public int getData() { return data; } public void setData(int data) { this.data = data; } @Override public String toString() { return "List{" + "data=" + data + ", maxsize=" + maxsize + " " + '}'; } }