一、栈(Stack)的介绍
1:栈是一个先入后出的有序列表(运算受限的线性表)
2:栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom);
3:根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。(先进后出,后进先出)
二、入栈出栈图解
1.入栈
2.出栈
代码:
1 public class stack<E> { //栈的初始化 2 final int initcapacity = 10; //栈空间初始容量 3 private int capacity ; //存放顺序栈容量 4 int top; 5 int bottom; 6 Object [] data; //存放顺序栈元素 7 public stack(){ //构造方法,初始化data和size 8 data = new Object[initcapacity]; 9 capacity = initcapacity; 10 top = -1; 11 } 12 public void ensureCapacity(int mincapacity){ //顺序栈的扩容 13 if (mincapacity <= capacity){ 14 return; 15 }else{ 16 Object[] t = new Object[mincapacity]; 17 for(int i = 0; i<=top;i++){ 18 t[i] = data[i]; 19 } 20 //将原来数组改变为扩容后的数组 21 data = t; 22 capacity = mincapacity; 23 } 24 } 25 //测试堆栈是否为空 26 public boolean isEmpty(){ 27 return top == -1; 28 } 29 //查看栈顶元素的值 30 public E peek(){ 31 if(top == -1){ 32 return null; 33 }else{ 34 return (E)data[top]; //返回栈顶元素 35 } 36 } 37 //弹栈 38 public E pop(){ 39 if(top == -1){ 40 return null; 41 }else{ 42 E e = (E)data[top]; 43 top--; 44 return e; 45 } 46 } 47 //插入 48 public E push(E item){ 49 if(top < capacity){ 50 ensureCapacity(capacity + capacity/2); //栈容量扩容 51 } 52 top++; 53 data[top] = item; 54 return item; 55 } 56 }
浙公网安备 33010602011771号