java实现数据结构——栈Stack与队列Queue
来源:互联网 发布:mac浏览图片的软件 编辑:程序博客网 时间:2024/06/05 00:44
栈(Stack)作为一个先进后出(FILO) 的线性结构,只支持在栈顶的插入和弹出。
队列(Queue)作为一个先进先出(FIFO) 的线性结构,支持在队首获取元素,在对尾插入元素。
栈的实现:
public class StackDemo<E> {private Object[] data = null;private int capacity;private int top;/** * 默认栈容量为10 */public StackDemo() {this(10);}/** * 初始化栈容量 * * @param initSize */public StackDemo(int initSize) {if (initSize >= 0) {capacity = initSize;data = new Object[initSize];top = 0;} else {throw new RuntimeException("初始化栈容量大小不能小于0" + initSize);}}/** * 判断栈是否为空 * * @return */public boolean isEmpty() {return top == 0 ? true : false;}/** * 获取栈顶元素,但是不弹出 * */public E peek() {return (E) data[top - 1];}/** * 弹出栈顶元素 * * @return */public E pop() {if (isEmpty()) {throw new RuntimeException("栈已空,没有元素可以弹出。");}return (E) data[--top];}/** * 向栈顶压入e * * @param e * @return */public boolean push(E e) {ensureCapacity();data[top] = e;top++;return true;}/** * 检查存储数据数组容量,如果数组已满,则扩容否则不操作。 */private void ensureCapacity() {if (top == capacity) {capacity *= 2;Object[] newData = new Object[capacity];for (int i = 0; i < top; i++) {newData[i] = data[i];}data = newData;}}@Overridepublic String toString() {String string = "";for (int i = 0; i < top; i++) {string += (data[i] + " ");}return string;}/** * @param args */public static void main(String[] args) {// TODO 自动生成的方法存根StackDemo<Double> stackDemo = new StackDemo<>();for (int i = 0; i < 15; i++) {stackDemo.push(i+1.0);System.out.println(stackDemo.toString());}System.out.println(stackDemo.peek() + " ");for (int i = 0; i < 15; i++) {System.out.println(stackDemo.pop() + "");}}}
队列的实现
- /**
- * 队列的实现
- * @param <E>
- * @author <a href="mailto:bao.yiming@live.cn" mce_href="mailto:bao.yiming@live.cn">Bao Yiming</a>
- */
- public class Queue<E> {
- Object[] data = null;
- private int capacity; // capacity: 队的容量
- private int tail; // tail: 队尾指针
- /**
- * 初始化为声明大小,则设置为10。
- */
- Queue() {
- this(10);
- }
- /**
- * 初始化队列,声明保存数据的数组大小。
- * @param initialSize 队列的初始化大小
- */
- Queue(int initialSize) {
- if (initialSize >= 0) {
- this.capacity = initialSize;
- data = new Object[initialSize];
- tail = 0;
- } else {
- throw new RuntimeException("初始化大小不能小于0:" + initialSize);
- }
- }
- /**
- * 判断队列是否为空
- * @return
- */
- public boolean empty() {
- return tail == 0 ? true : false;
- }
- /**
- * 在队尾插入元素
- * @param e 待插入的元素
- * @return
- */
- public boolean add(E e) {
- ensureCapacity();
- data[tail] = e;
- ++tail;
- return true;
- }
- /**
- * 获取队首的元素内容,但不将该元素出队。
- * @return
- */
- public E peek() {
- return (E) data[0];
- }
- /**
- * 将队首元素出队。
- * @return
- */
- public E poll() {
- E e = (E) data[0];
- for (int index = 1; index < tail; ++index) {
- data[index - 1] = data[index];
- }
- data[tail - 1] = null;
- --tail;
- return e;
- }
- /**
- * 检查存储数据的数组容量,如果数组已经满,则扩充容量;否则不操作。
- */
- private void ensureCapacity() {
- int index;
- if (tail == capacity) {
- capacity *= 2;
- Object[] newData = new Object[capacity];
- for (index = 0; index < tail; ++index) {
- newData[index] = data[index];
- }
- data = newData;
- }
- }
- @Override
- public String toString() {
- String str = "";
- for (int index = 0; index < tail; ++index) {
- if (data[index] != null) {
- str += (data[index] + " ");
- }
- }
- return str;
- }
- }
- java实现数据结构——栈Stack与队列Queue
- Java实现数据结构栈stack和队列Queue
- Java实现栈Stack和队列Queue
- 数据结构——两个栈(Stack)实现一个队列(Queue)
- 数据结构与算法2-栈与队列实现 (stack and queue implementation)
- 栈stack与队列queue
- 使用栈Stack实现队列Queue
- 利用栈Stack实现队列(Queue)
- python实现stack(栈)和队列(queue)
- 栈与队列(queue and stack)
- C++queue队列与stack栈
- 数据结构与程序设计c++-----栈(stack)与队列(queue)
- 数据结构——Stack和Queue的互相实现
- stack 栈 queue 队列
- 【数据结构】第2周 栈与队列 3:stack or queue
- 【C++研发面试笔记】16. 基本数据结构-队列queue与栈stack
- Java数据结构与算法之Queue队列
- STL 之 stack&queue&priority_queue 栈,队列与优先队列
- 如何从PRINTDLG 结构体中获得打印机的名称
- 信息系统项目管理师学习札记1
- RemoTI内SimpleApp的点对点通信问题
- 北邮2012年复试上机题目
- Linux下Tomcat的启动、关闭、杀死进程 - 李晨专栏 - 51CTO技术博客
- java实现数据结构——栈Stack与队列Queue
- python中的cPickle用法例子
- iphone数据存储之-- Core Data的使用(一)
- 言葉の勉強(1)
- 设置tomcat的默认jdk - 代码分享 - 开源中国社区
- Mac 下 App Store 更新 其他账户的应用
- Linux procfs详解
- 代码重构原则 by acidrain
- 信息系统项目管理师学习札记2