其他分享
首页 > 其他分享> > 队列的类型定义

队列的类型定义

作者:互联网

队列示意图:

队头(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