package Stack;import java.util.Iterator;/*** 顺序栈的动态扩容* Author: PeiJiaNi* @param <T> 顺序栈元素类型*/public class DynamicStackBaseArray<T> implements Iterable<T> {private T[] items; // 数组private int count; // 栈中的元素个数private int length; // 栈空间大小/*** 初始化栈** @param length 栈空间大小*/public DynamicStackBaseArray(int length) {this.items = (T[]) new Object[length];this.count = 0;this.length = length;}/*** 入栈操作 平均时间复杂度O(1)** @param item 入栈元素*/public void push(T item) {// 栈空间已满,则扩容if (count == length) {resize(2 * items.length);}items[count++] = item;}/*** 出栈操作 平均时间复杂度O(1)** @return 如果栈内不为空,则返回栈顶元素,否则返回-1*/public T pop() {if (count == 0) {System.out.println("当前栈已空,无法进行出栈操作");return null;}T item = items[--count];items[count] = null;if (count > 0 && (count == items.length / 4)) {resize(items.length / 2);}// 返回下标为 count-1 的数组元素,并且栈中元素个数count-1return item;}/*** 栈空间动态增加或减小** @param size*/private void resize(int size) {T[] newItems = (T[]) new Object[size];for (int i = 0; i < count; i++) {newItems[i] = this.items[i];}this.items = newItems;}//返回栈中最近添加的元素而不删除它public T peek() {return items[count - 1];}/*** 判断当前栈是否为空** @return 栈为空,则返回true,否则返回-1*/public boolean isEmpty() {return count == 0;}/*** 返回栈中元素个数** @return*/public int size() {return count;}@Overridepublic Iterator<T> iterator() {return new ArrayIterator();}// 内部类class ArrayIterator implements Iterator {int numOfItems = count;@Overridepublic boolean hasNext() {return numOfItems > 0;}@Overridepublic T next() {return items[--numOfItems];}}public static void main(String[] args) {DynamicStackBaseArray<Integer> stack = new DynamicStackBaseArray<Integer>(6);stack.push(1);stack.push(2);stack.push(3);stack.push(4);stack.push(5);// System.out.println(stack.peek());Iterator iterator = stack.iterator();// System.out.println(iterator.hasNext());while (iterator.hasNext()) {System.out.println(iterator.next());}}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型