数据结构(五):队列
来源:互联网 发布:ubuntu部署php 编辑:程序博客网 时间:2024/05/21 07:03
仅允许在表的一端进行插入,在另一端进行删除。删除的一端称为队头或队首,插入的一端称为队尾。插入元素称为进队或者入队,删除元素称为出队或离队。特点:先进先出表。
队列的存储结构分为顺序存储结构和链式存储结构。
顺序存储结构
需要用一个数组和两个整形变量来表示,利用数组存储所有元素,利用两个整形变量分别表示队首和队尾元素下标。为了充分利用数组的存储空间,一般使用环形队,即把数组的后端和前端连接起来,形成一个环形的顺序表。
在环形队列中,队首指针进1:front = (front + 1) % MaxSize;队尾指针进1:rear = (rear + 1) % MaxSize.
队空条件为rear == front,队满条件也为rear == front
如何判断队空和队满:通常阅读在进队时少用一个元素空间,即(rear + 1) % MaxSize == front即判断为队满。队空条件不变,为rear == front。
综上所述:顺序存储结构为:
public class SqQueue {private int front;private int rear;private int datas[];SqQueue(int datas[]){front = 0;rear = 0;this.datas = datas;}//setters and getters......}
顺序存储结构下的基本运算:1.判断队列是否为空。2.入队。3.出队。
public class OperateSq {static int MaxSize = 20;public static void main(String args[]){int datas[] = new int[MaxSize];SqQueue sq = new SqQueue(datas);/* * 判断队列是否为空 */if(QueueEmpty(sq))System.out.println("SqQueue is empty!");elseSystem.out.println("SqQueue is not empty!");/* * 入队 */enQueue(sq,3);/* * 出队 */deQueue(sq);}public static boolean QueueEmpty(SqQueue sq){if(sq.getFront() == sq.getRear())return true;elsereturn false;}public static void enQueue(SqQueue sq,int num){if( ( (sq.getRear() + 1) % MaxSize) == sq.getFront() )System.out.println("队列已满!");else{sq.setRear( (sq.getRear() + 1) % MaxSize);int datas[] = sq.getDatas();datas[sq.getRear()] = num;}}public static void deQueue(SqQueue sq){if(QueueEmpty(sq))System.out.println("SqQueue is empty!");else{sq.setFront((sq.getFront() + 1) % MaxSize);}}}
链式存储结构
只允许在单链表的表首进行删除操作和表尾进行插入操作。需要有两个指针front和rear指向队首和队尾
节点类型结构为:
public class Qnode {int data;Qnode next;Qnode(){}Qnode(int data){this.data = data;}//getters and setters......}
链队节点类型:
public class SqQueue1 {Qnode front;Qnode rear;SqQueue1(){front = null;rear = null;}//setters and getters ......}
链式存储结构下的基本运算:1.判断队列是否为空。2.入队。3.出队。
public class OperateSq1 {public static void main(String args[]){SqQueue1 Sq = new SqQueue1();/* * 判断队列是否为空 */if( QueueEmpty(Sq) )System.out.println("The queue is empty!");elseSystem.out.println("The queue is not empty!");/* * 入队 */enQueue(Sq,new Qnode(4));/* * 出队 */deQueue(Sq);}public static boolean QueueEmpty(SqQueue1 Sq){if(Sq.getRear() == null)return true;elsereturn false;}public static void enQueue(SqQueue1 Sq,Qnode node){if(Sq.getRear() == null){Sq.setFront(node);Sq.setRear(node);}else{Sq.getRear().setNext(node);Sq.setRear(node);}}public static void deQueue(SqQueue1 Sq){if(Sq.getRear() == null)System.out.println("Queue is empty!");else{Sq.setFront(Sq.getFront().getNext());}}}
0 0
- 数据结构(五):队列
- 数据结构之队列(五)
- 队列的实现---数据结构学习(五)
- 五.学习数据结构之队列
- 数据结构入门(五)-队列的定义与实现
- C 数据结构 笔记(五) —— 循环队列
- 五、数据结构与算法--栈及队列
- (五)环形队列
- 数据结构---队列(C#)
- 循环队列(数据结构)
- 数据结构(队列)
- 数据结构(八) --- 队列
- 数据结构 队列 (数组)
- 数据结构-队列(queue)
- 数据结构 - 队列(一)
- 数据结构 - 队列(二)
- 数据结构--队列(java)
- 队列(queue)数据结构
- 总结下网站广告点击优化中的第三方权威性检测系统有哪些?网站广告点击优化
- 玩转html5(三)---智能表单(form),使排版更加方便
- 智能指针的一种实现
- 迅雷下载 HP QTP LR QC AML MyEclipse8.5 Tomcat7地址
- 程序 Java
- 数据结构(五):队列
- QTP11破解无期限使用
- Android 网络通信框架Volley简介(Google IO 2013)
- XML From Action Script[AS中的XML学习笔记]
- [20140428]数据库模式
- io 学习
- Sql性能优化之sql语句的写法
- C#用Activex实现Web客户端读取RFID功能的代码
- 一胜九败