下压(LIFO)栈(能够动态调整数组大小的实现)
来源:互联网 发布:怎么从mac导出照片 编辑:程序博客网 时间:2024/04/28 07:30
//下压(LIFO)栈(能够动态调整数组大小的实现)/* * 每项操作的用时都与集合大小无关 * 空间需求总是不超过集合大小乘以一个常数 */package Algorithms;import java.util.Iterator;import java.util.NoSuchElementException;import edu.princeton.cs.algs4.StdIn;import edu.princeton.cs.algs4.StdOut;public class P88_ResizingArrayStack<Item> implements Iterable<Item>{private Item[] a;private int n;public P88_ResizingArrayStack(){a = (Item[]) new Object[2];n = 0;}public boolean isEmpty(){return n == 0;}public int size(){return n;}private void resize(int capacity){assert capacity >= n;//将栈移动到一个大小capacity的新数组Item[] temp = (Item[]) new Object[capacity];for (int i = 0; i < n; i++){temp[i] = a[i];}a = temp;}//将元素添加到栈顶public void push(Item item){if (n == a.length){resize(2 * a.length);a[n++] = item;}}//从栈顶删除元素public Item pop(){if (isEmpty()){throw new NoSuchElementException("Stack underflow");}Item item = a[n - 1];a[n - 1] = null; //避免对象游离n--;if(n > 0 && n == a.length / 4){resize(a.length / 2);}return item;}public Item peek(){if (isEmpty()){throw new NoSuchElementException("Stack underflow");}return a[n - 1];}public Iterator<Item> iterator(){return new ReverseArrayIterator();}//支持后进先出的迭代private class ReverseArrayIterator implements Iterator<Item>{private int i;public ReverseArrayIterator(){i = n - 1;}public boolean hasNext() { return i >= 0; } public void remove() { throw new UnsupportedOperationException(); } public Item next() { if (!hasNext()) throw new NoSuchElementException(); return a[i--]; }}public static void main(String[] args) {// TODO Auto-generated method stubP88_ResizingArrayStack<String> stack = new P88_ResizingArrayStack<String>();while (!StdIn.isEmpty()){String item = StdIn.readString();if (!item.equals("-")){stack.push(item);}else if (!stack.isEmpty()){StdOut.print(stack.pop() + " ");}}StdOut.println("(" + stack.size() + " left on stack)");}}
0 0
- 算法1.1 下压(LIFO)栈 (能够动态调整数组大小的实现)
- 下压(LIFO)栈(能够动态调整数组大小的实现)
- 下压栈(LIFO) (能动态调整数组大小的实现)
- 下压栈(能够动态调整数组大小的实现)
- 算法1.1 下压(LIFO)栈(能动态调整数组大小的实现)
- 算法1.1 下压栈(LIFO)能动态调整数组的大小
- 下压栈(能动态调整数组大小的实现)
- 下压栈——能够动态调整数组大小的实现
- 下压栈-能够自动调整数组大小实现并实现迭代功能
- java算法之下压栈来动态调整数组大小
- 下压(LIFO)栈,ResizingArrayStack
- 下压堆栈的链表实现(LIFO)
- 算法(第四版)学习笔记之java实现能够动态调整数组大小的栈
- 下压栈:动态数组实现
- 下压(LIFO栈)_API
- 栈的实现,动态调整数组大小
- 算法(第四版) 能够动态调整数组大小的队列数据结构
- Java下压栈实现-可调整数组大小(p88)
- Android初级教程:RatingBar的使用
- JAVA微信开发-新手接入指南
- adb connect 连接失败问题unable to connect to
- 内部存储读写文件
- 基于jboss调整项目连接数限制的参数调整
- 下压(LIFO)栈(能够动态调整数组大小的实现)
- jsp页面里无法自动补全和servlet包报错
- jQuery插件开发小结
- poj1511 Invitation Cards
- 枚举值转换(字符串转换为枚举和整数转换为枚举)
- Herren Daunenjacke is good of posess zero
- Angularjs学习笔记(五)指令
- [校招准备]之:java——String,StringBuffer,StringBuilder区别
- IOS10 权限问题