基于动态数组的方法实现栈:Java语言实现
2018-05-13 14:52
417 查看
1 前言
上一篇写了《基于简单数组的方法实现栈:Java语言实现》,但是一旦栈的最大空间给出,满栈后再执行入栈操作将会产生溢出异常,这里采用采用动态数组的方法实现栈,用数组倍增的技术解决满栈的问题,但是需要注意的是,倍增太多可能会导致内存溢出。
2 基于动态数组的方法实现栈
package Stack_Study; /** * Created by Administrator on 2018/5/13. */ public class DynArrayStack { private int top;//栈顶元素的位置 private int capacity;//栈的容量 private int[] array;//实现栈功能的数组 public DynArrayStack(int capacity) { this.capacity = capacity; array = new int[capacity]; top = -1; } public int getTop() { return top; } public int getCapacity() { return capacity; } //判断栈中是否有元素 public boolean isEmpty() { return top == -1; } //判断栈中是否存满元素 public boolean isStackFull() { return (top == capacity - 1); } //入栈:将数据压入栈 public void push(int data) { if(isStackFull()) { doubleStack(); } array[++top] = data;// top = top +1; array[top] = data; } //栈的大小扩容:数组倍增 public void doubleStack() { int newArray[] = new int[2 * capacity]; System.arraycopy(array,0,newArray,0,capacity); capacity = capacity * 2; array = newArray; } //出栈:删除并返回最后一个插入栈的元素 public int pop() { if(isEmpty()) { System.out.println("栈为空"); return 0; }else { return array[top--];//array[top] = data;top = top -1 ; } } //获取栈顶的元素,但不出栈 public int top() { return array[getTop()]; } //返回栈中元素的个数 public int size() { return (top + 1); } //删除栈 public void deteleStack() { top = -1; } }
3 测试
package Stack_Study; /** * Created by Administrator on 2018/5/13. */ public class DynArrayStackTest { public static void main(String[] args) { DynArrayStack stack = new DynArrayStack(2); stack.push(1); stack.push(2); stack.push(3); stack.push(4); System.out.println(stack.pop()); System.out.println(stack.size()); } }
4 参考资料
[1] 基于简单数组的方法实现栈:Java语言实现[2] 数据结构与算法经典问题解析相关文章推荐
- Java版C语言版简单使用静态语言实现动态数组的方法
- 基于单向链表的方法实现栈:Java语言实现
- 队列--基于动态循环数组实现(Java)
- Java语言实现数组的键盘输入(综合几种方法实现)
- 算法(第四版)笔记<一>-------动态队列的数组实现(Java语言)
- 队列基于链表和数组的实现方法(java)
- 基于Java数组实现循环队列的两种方法小结
- * java 中的数组 对象数组 以及main方法中的参数 x y不用中间参数实现交换
- 【每天算法1】:用java 语言实现,输入一个数,就相应地输出的几维数组
- Java实现按钮隐藏点击动态效果的另类方法
- 实现AMF3与Java之间数组的传递(动态创建数组)...
- JAVA里实现一个数组全排列的方法
- 巧用C#做中间语言 实现Java调用.net DLL的方法
- java实现螺旋数组-另类方法
- 用Annotation,Future,动态代理实现自己的JAVA方法运行超时应用
- c语言中实现动态数组!(自己包的,共大家思考)
- Base64编码介绍及基于Java语言实现
- C/C++语言实现动态数组
- JAVA动态代理实现方法
- JAVA动态代理实现方法