栈、队列和优先队列
来源:互联网 发布:职高毕业证查询网络 编辑:程序博客网 时间:2024/04/27 13:33
一、栈(stack)
栈只允许访问一个数据项:即最后插入的数据项,删除这个数据项后才能访问到倒数第二个插入的数据项。实现后进先出(LIFO) 的功能。它可以用来检验源程序中的大小中括号是否匹配、解析算术表达式等问题。
邮政模拟例
许多人在工作收到信后,会随手将它放在大厅桌子上的信堆上,等有空的时候就会从上到下处理这些堆积的邮件,这些人的邮件系统就如计算机中的栈。如果他们不遵循这种从上到下的顺序,而先拿堆底的邮件,从下到上,这就和计算机中的优先级队列结构相似。
栈的定义
(1)通常称插入、删除的这一端为栈顶(Top),另一端称为栈底(Bottom)。
(2)当表中没有元素时称为空栈。
(3)栈为后进先出(Last In First Out)的线性表,简称为LIFO表。
栈的修改是按后进先出的原则进行。每次删除(退栈)的总是当前栈中"最新"的元素,即最后插入(进栈)的元素,而最先插入的是被放在栈的底部,要到最后才能删除。
(1)通常称插入、删除的这一端为栈顶(Top),另一端称为栈底(Bottom)。
(2)当表中没有元素时称为空栈。
(3)栈为后进先出(Last In First Out)的线性表,简称为LIFO表。
栈的修改是按后进先出的原则进行。每次删除(退栈)的总是当前栈中"最新"的元素,即最后插入(进栈)的元素,而最先插入的是被放在栈的底部,要到最后才能删除。
Stack主要功能
Push(入栈:压入栈顶)
Pop(出栈:移除栈元素)
Peek(查看栈顶元素)是栈的最主要的操作。
栈的操作图如下:
栈的Java代码
package com.wei;public class Stack{ private int maxSize; // size of stack array private long[] stackArray; //使用数组实现栈。 private int top; // top of stack,栈项数组下标 public Stack(int maxSize) { this.maxSize = maxSize; stackArray = new long[maxSize]; top = -1; } public void push(long value) throws Exception { if( isFull() ) throw new Exception("Array is full,cannot be push"); stackArray[++top] = value; } public long pop() throws Exception { if( isEmpty() ) throw new Exception("Array is isEmpty,cannot be pop"); else return stackArray[top--]; } public long peek() throws Exception { if( isEmpty() ) throw new Exception("Array is isEmpty,cannot be pop"); return stackArray[top]; } public Boolean isFull(){return (top == maxSize-1);} public Boolean isEmpty() { return (top == -1); }}
栈的实例1:单词逆序
栈的实例2:分隔符匹配
二、队列(queue)
队列定义
队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表
(1)允许删除的一端称为队头(top)。
(2)允许插入的一端称为队尾(bottom)。
(3)当队列中没有元素时称为空队列。
(4)队列亦称作先进先出(First In First Out)的线性表,简称为FIFO表。
队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表
(1)允许删除的一端称为队头(top)。
(2)允许插入的一端称为队尾(bottom)。
(3)当队列中没有元素时称为空队列。
(4)队列亦称作先进先出(First In First Out)的线性表,简称为FIFO表。
Queue主要功能
Insert(入栈:压入栈顶)
Remove(出栈:移除栈元素)
Peek(查看栈顶元素)是栈的最主要的操作。
队列的操作图示:
环绕式处理
队列的Java代码
package com.wei;public class Queue{ private int maxSize; //数组长度 private long[] queArray; private int top; //队头指针 private int bottom; //队尾指针 private int nItems; //个数 public Queue(int maxnum) { this.maxSize = maxnum; queArray = new long[maxSize]; top = 0; bottom = -1; nItems = 0; } public void insert(long value) throws Exception { if( isFull() ) throw new Exception("queArray is full!"); if(bottom == maxSize-1) //循环位置 bottom = -1; queArray[++bottom] = value; nItems++; } public long remove() throws Exception { if( isEmpty() ) throw new Exception("queArray is empty!"); long temp=queArray[top++]; nItems--; if(top==maxSize) //循环位置 top=0; return temp; } public long peek() throws Exception { if( isEmpty() ) throw new Exception("queArray is empty!"); return queArray[top]; } public Boolean isFull() { return (nItems == maxSize); } public Boolean isEmpty() { return (nItems == 0); } }
队列的效率
三、优先级队列
Priority
优先队列操作图
优先级队列的Java代码
优先级队列的效率
0 0
- 栈、队列和优先队列
- 队列和优先队列
- 线性表、栈、队列和优先队列
- 栈、队列、优先队列
- 栈,队列,优先队列
- FIFO队列和优先队列
- STL--优先队列,队列,栈
- uva11995(栈,队列,优先队列)
- STL-栈,队列,优先队列
- 栈、队列与优先队列
- 栈+队列+优先队列-总结
- 栈、队列、优先队列笔记
- 堆和优先队列
- 堆和优先队列
- 堆和优先队列
- 堆和优先队列
- 堆和优先队列
- 堆和优先队列
- Android复制Assets目录下的文件到/data/data目录
- android 四大组件之service学习总结(一)
- android opencv+opengl
- ibatis传入数组或List类型参数小结
- 图片处理(旋转,平移,缩放)View---Canvas;Paint;Bitmap
- 栈、队列和优先队列
- kinect开发教程
- innerText和innerHTML区别
- centos双网卡绑定
- 黑马程序员 java中覆盖、重写与重载的区别
- hdu1864 最大报销额
- 直接插入排序---java实现
- P2P流量识别技术汇总(原理、优缺点介绍)
- HDU1160——FatMouse's Speed(DP入门)