队列

队列


定义:限定在表的一端进行删除,在表的另一端进行插入操作的线性表

队头(front):允许删除的一端

队尾(rear):允许插入的一端

特性:FIFO


 

链队列——队列的链式存储结构


实质是带头结点的线性链表

两个指针:

队头指针Q.front指向头结点

队尾指针Q.rear指向尾结点

初始态:队空条件

头指针和尾指针均指向头结点:Q.front=Q.rear

链队列的类型定义:

typedef struct QNode
{
    QElemType data;
    struct QNode *next;
}QNode,*QueuePtr;

typedef struct
{
    QueuePtr front;
    QueuePtr rear;
}LinkQueue;
LinkQueue Q;

基本操作及实现:

 

 


 

顺序队列


顺序队列:

用一组 地址连续 的存储单元依次存放从队列头至队列尾的元素

设两个指针:

Q.front     指向队列头元素

Q.rear     指向队列尾元素的下一个位置

初始状态(空队列):

Q.front=Q.rear=0;

队列的真满和假满:

 

类型定义:

#define MAXSIZE 100
typedef struct
{
    QElemType *base;
    int front;
    int rear;
}SqQueue;
SqQueue Q;

循环队列——队列的顺序存储结构


基本操作:

初始化:Q.rear=Q.front=0;

判空:Q.front==Q.rear;

判满:(Q.rear+1)%MAX==Q.front;

入队:Q.rear=(Q.rear+1)%MAX;

出队:Q.front=(Q.front+1)%MAX;

最多元素个数:MAX-1

队列长度:(Q.rear-Q.front+MAX)%MAX

说明:

不能用动态分配的一维数组来实现循环队列,初始化时必须设定一个最大队列长度

循环队列中有一个元素空间浪费掉,用来解决Q.front=Q.rear补不能判别队列空还是满的问题:

使用一个计数器记录队列中元素的总数

设置一个标志变量以区别队列是空是满


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值