队列的类型定义
作者:互联网
队列示意图:
队头(Front)离开
队尾(Rear)进入
队列(Queue)是仅能在表耳我进行插入操作,在表头进行删除操作的线性表。
表尾即 an 端,称为队尾;
表头即 a1 端,称为队头。
它是一种先进先出(FIFO)的线性表
插入元素称为“入队”;
删除元素称为“出队”。
队列的存储结构为链队或顺序队(常用循环顺序队)
队列的相关概念:
① 定义:只能在标的一端进行插入运算,在表的另一端进行删除运算的线性表(头删尾插)
② 逻辑结构:同线性表相同,仍为一对一关系
③ 存储结构:顺序队或链队,以循环顺序队列更常见
④ 运算规则:只能在队首和队尾运算,且访问结点时依照先进先出(FIFO)的原则
⑤ 实现方式:关键是掌握入队和出队操作,具体实现依顺序队或链队的不同而不同。
队列常见应用:
① 脱机打印输出:按申请的先后顺序依次输出
② 多用户系统中,多个用户排成队,分时地循环使用 CPU 和 主存
③ 按用户的优先级排成多个队,每个优先级一个队列
④ 实时控制系统中,信号按接收的先后顺序依次处理
⑤ 网络电文传输,按到达的时间先后顺序依次进行
凡是在使用有限资源时,有多个想要使用此资源都需要排队,而在排队时都需要用到队列。
队列的抽象数据及类型定义:
① 数据对象:D = {ai | ai ∈ ElemSet, i = 1,2,3,4....,n, n ≥ 0}
② 数据关系:R = {<ai-1 , ai> | ai-1 , ai ∈ D , i = 2,....,n} 约定 a1 端为队列头,an 端为队列尾
③ 基本操作:
InitQueue(&Q) 操作结果:构造空队列 Q
DestroyQueue(&Q) 条件:队列 Q 已存在;操作结果:队列 Q 被销毁
ClearQueue(&Q) 条件:队列 Q 已存在;操作结果:将 Q 清空
QueueLength(Q) 条件:队列 Q 已存在;操作结果:返回 Q 的元素个数,即队列长度
GetHead(Q,&e) 条件:Q 为非空队列;操作结果:用 e 返回 Q 的队头元素
EnQueue(&Q, e) 条件:队列Q已存在;操作结果:插入元素 e 为 Q 的队尾元素
DeQueue(&Q, e) 条件:Q为非空队列;操作结果:删除 Q 的队头元素,用 e 返回值
队列的物理存储可以用顺序存储结构,也可以用链式存储结构。相应的,队列的存储方式分为两种,即顺序队列和链式队列
队列的顺序表示——用一维数组 base [MAXQSIZE]
#define MAXQSIZE 100 //最大队列长度,如果有需要可以修改这个值 Typedef struct{ //看一下要存储的是什么类型,就把 QElemType 进行对应修改 //比如要存储 int 型,就把 QElemType 更换为 int QElemType *base; //初始化的动态分配存储空间 // front 和 rear 称作指针,却不是指针变量,用以表示下标 int front; //头指针,队头元素的下标 int rear; //尾指针,队尾元素的下标 }SqQueue;
标签:队尾,存储,队头,队列,元素,类型定义,操作 来源: https://www.cnblogs.com/AronKeener/p/15377146.html