3、队列(Queue)

一、队列的抽象数据类型描述

类型名:队列(Queue) 数据对象集:一个有0个或多个元素的有穷线性表 操作集:长度为MaxSize的堆栈Q∈Queue, 队列元素item∈ElementType

1.生成长度为MaxSize的空队列 Queue CreatQueue(int MaxSize); 2.判断队列Q是否已满 bool IsFullQ(Queue Q, int MaxSize); 3.将数据元素item插入队列Q中 bool AddQ(Queue Q, ElementType item); 4.判断队列Q是否已空 bool IsEmptyQ(Queue Q); 5.删除并返回队首元素 ElementType DeleteQ(Queue Q);

二、队列的顺序存储实现

1.定义

队列的顺序存储结构通常由一个一维数组和一个记录队列头元素位置的变量front以及一个记录队列尾元素位置的变量rear组成。 形成的数组搬过来,变成一个环,便为循环队列。 为了判断队列的空与满,循环队列仅使用n-1个数组空间 定义代码如下

typedef struct QNode *Queue;
struct QNode {
    ElementType Data[MaxSize];//一维数组
    int rear;//记录队列尾元素位置
    int front;//记录队列头元素位置  
    int MaxSize;
    //实际上front指向的是队列头元素下标的前一个
};

2.操作

(1)创建循环队列(CreateQueue)

Queue CreateQueue( int MaxSize ) {
    Queue Q = (Queue)malloc(sizeof(struct QNode));
    Q->Data = (ElementType *)malloc(MaxSize * sizeof(ElementType));
    Q->front = Q->rear = 0;
    Q->MaxSize = MaxSize;
    return Q;
}

(2)判断队列是否已满(IsFull)

(3)入队列(AddQ)

入队时要判断队列是否已满

(4)判断队列是否已空(IsEmpty)

(5)出队列(DeleteQ)

出队时判断当前队列是否为空

三、队列的链式存储实现

1.定义

队列的链式存储结构也可以用一个单链表实现,插入和删除操作分别在链表的两头进行。队列指针front应该指向链表头

在这里插入图片描述

2.操作

(1)不带头结点的链式队列初始化( CreateQueue)

(2)不带头结点的链式队列入队操作

(3)不带头结点的链式队列出队操作

最后更新于

这有帮助吗?