//实现类 package stack; /** * 栈是限定在表尾进行插入或者删除操作的线性表 * 因为表尾叫栈顶 * 表头叫栈底 * 不含元素的叫空栈 * 特点是后进先出LIFO */ public class stack<T> { //栈底指针 private int base; //栈顶指针 private int top; //栈当前大小 int size; //存储栈的数组 private T[] list; //初始大小 private Integer STACKINCREMENT = 10; /** * 初始化 构造一个空栈 */ public void InitStack() { list = (T[]) new Object[STACKINCREMENT]; base = top = 0; size = 0; return; } /** * 销毁栈 */ public void DestroyStack() { list = null; base = top = 0; size = 0; } /** * 清空栈 */ public void ClearStack() { list = (T[]) new Object[STACKINCREMENT]; base = top = 0; size = 0; } /** * 判空 */ public Boolean StackEmpty() { if (size == 0) { return Boolean.TRUE; } else { return Boolean.FALSE; } } /** * 返回栈的长度 */ public int StackLength() { return size; } /** * 查看栈顶元素 */ public T getTop() { return list[top]; } /** * 插入栈顶元素 */ public Boolean push(T e) { //先判断栈有没有满 如果满了要扩容 if (top-base>=STACKINCREMENT){ //扩容 addSize(); } this.list[top]=e; top++; size++; return Boolean.TRUE; } /** * 出栈 */ public T Pop() { //判断是否是空 if (top==base){ return null; } T e= this.list[top-1]; top--; size--; return e; } /** * 扩容 */ public void addSize(){ STACKINCREMENT= (int) (STACKINCREMENT*1.5); T[] list = (T[]) new Object[STACKINCREMENT]; for (int i = 0; i <this.size ; i++) { list[i]=this.list[i]; } return; } /** * 遍历栈 */ public void print(){ for ( int temp=top-1;temp>=0; temp--) { System.out.print(this.list[temp]); } System.out.println(); } } //测试 package test; import stack.stack; public class Stacktest { public static void main(String[] args) { stack<Integer> stack=new stack(); stack.InitStack(); stack.push(1); stack.push(2); stack.push(3); stack.print(); System.out.println(stack.Pop()); int size=stack.StackLength(); for (int i = 0; i < size; i++) { System.out.println(stack.Pop()); } } }
java栈的实现(数组型)
猜你喜欢
转载自blog.csdn.net/qq_20009015/article/details/80723637
今日推荐
周排行