队列笔记
2015-08-09 20:43
197 查看
队列的用途:
先来先服务的原则:
订票系统,操作系统的作业调度,消息队列。
顺序队列
结构体中的数组用来存储入队的元素。
typedef struct
{
DATATYPE items[QUEUESIZE];
int front,rear;
}SqQueue;
顺序队列的溢出问题。
1:队列满时还要进行入队操作,rear会超出数组的下标。上溢。
2:队列空时还要出队操作,front会0-1=-1,非法下标,下溢。
3:满队之后出队,此时有空余位置,却不能通过入队来插入元素,这是假溢出。
综上的顺序队列的溢出问题,有循环队列来解决假溢出问题。
循环队列的指针运算:
front = (front + 1)%QUEUESIZE;
rear = (rear + 1)%UQEUESIZE;
在逻辑上把循环队列的首尾相连。通过队头队尾的指针运算实现。
区分循环队列队空还是队满的问题:
无论队空还是队满都存在front == rear,
方法一:
因为只有入队操作才会导致队满,只有出队操作才会导致队空。
所以设置一个标签,tag,用来标记前一个操作是入队还是出队。
入队为1,出队为0.
所以front == rear,tag == 1,队满。
front == rear,tag == 0,队空。
方法二:
设置一个计数器count,计数队列中的元素数。
count == 0,队空
count == QUEUESIZE,队满
方法三:(这种方法的效率较高)
少用一个存储空间
此时当rear指向这个不用的存储空间时,表示队满。
链队列
不存在空间浪费。也不存在上溢出的问题。
链队列的数据结构方法:
#define DATATYPE int
typedef struct PNode
{
DATATYPE data;
PNode *next;
}LQNode;
typedef struct
{
LQNode *front,*rear;
}LinkQueue;
LQNode用来实现链
LinkQueue用来指向队头队尾。
先来先服务的原则:
订票系统,操作系统的作业调度,消息队列。
顺序队列
结构体中的数组用来存储入队的元素。
typedef struct
{
DATATYPE items[QUEUESIZE];
int front,rear;
}SqQueue;
顺序队列的溢出问题。
1:队列满时还要进行入队操作,rear会超出数组的下标。上溢。
2:队列空时还要出队操作,front会0-1=-1,非法下标,下溢。
3:满队之后出队,此时有空余位置,却不能通过入队来插入元素,这是假溢出。
综上的顺序队列的溢出问题,有循环队列来解决假溢出问题。
循环队列的指针运算:
front = (front + 1)%QUEUESIZE;
rear = (rear + 1)%UQEUESIZE;
在逻辑上把循环队列的首尾相连。通过队头队尾的指针运算实现。
区分循环队列队空还是队满的问题:
无论队空还是队满都存在front == rear,
方法一:
因为只有入队操作才会导致队满,只有出队操作才会导致队空。
所以设置一个标签,tag,用来标记前一个操作是入队还是出队。
入队为1,出队为0.
所以front == rear,tag == 1,队满。
front == rear,tag == 0,队空。
方法二:
设置一个计数器count,计数队列中的元素数。
count == 0,队空
count == QUEUESIZE,队满
方法三:(这种方法的效率较高)
少用一个存储空间
此时当rear指向这个不用的存储空间时,表示队满。
链队列
不存在空间浪费。也不存在上溢出的问题。
链队列的数据结构方法:
#define DATATYPE int
typedef struct PNode
{
DATATYPE data;
PNode *next;
}LQNode;
typedef struct
{
LQNode *front,*rear;
}LinkQueue;
LQNode用来实现链
LinkQueue用来指向队头队尾。
相关文章推荐
- IM-即时通讯技术概述
- HDU 2444
- Android四大组件之三:ContentProvider数据共享
- unbuntu下如何更新adobe flash插件
- IM-即时通讯技术概述
- 协议详解3——IP
- PyQt5初级教程--PyQt5中的拖放[10/13]
- HDU 5366
- 【C/C++学院】0726-cppIDE/一级指针/指针数组/函数指针/函数指针数组/二级指针
- Flatten Binary Tree to Linked List
- Spring注解
- 顿悟,职业生涯最重要的是行业水平的积累,而不是多学某一门语言(很危险)——遥想铁血强人刘志军对铁路行业的理解以及执行力
- 使用Jayrock开源组件创建参数可为空的接口
- Program D--贪心-区间覆盖
- 图片下载缓存防止OOM
- Sqrt(x)
- 2、按下按键S1控制LED1.LED2.LED3实现跑马灯效果(CC2540开发寄存器设置)
- 2015 HUAS Summer Trainning #4 D
- Java文件删除问题
- Javascript判断变量是否定义的方法,欢迎补充