本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。
一方面用于学习记录与分享,
另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。
如有侵权,请留言作删文处理。
课程视频链接:
数据结构与算法基础–第05周14–3.5队列的表示和实现3–3.5.2队列的顺序表示和实现2
📚 【Week05】14_队列的顺序表示和实现2
循环队列的类型定义
// 最大队列长度
#define MAXQSIZE 100
Typedef struct{
// 初始化的动态分配存储空间
QElemType* base;
// 头指针,若队列不空,则指向队列头元素
int front;
// 尾指针,若队列不空,则指向队尾元素的下一个位置
int rear;
}SqQueue;
循环队列的操作
循环队列的初始化
Status InitQueue(SqQueue& Q){
// 分配数组空间
Q.base = new QElemType[MAXSIZE];
// Q.base = (QElemType*)
// malloc(MAXQSIZE* sizeof(QElemType));
if(!Q.base)
// 存储分配失败
exit(OVERFLOW);
// 头指针尾指针置为 0,队列为空
Q.front = Q.rear = 0;
return OK;
}
求循环队列的长度
int QueueLength(SqQueue Q){
reurn ((Q.rear - Q.front + MAXSIZE)%MAXQSIZE);
}
循环队列的入队
Status EnQueue(SqQueue& Q, QElemType e){
if((Q.rear + 1)%MAXQSIZE == Q.front)
// 栈满
return ERROR;
// 新元素加入队尾
Q.base[Q.rear] = e;
// 队尾指针 + 1
Q.rear = (Q.rear + 1)% MAXQSIZE;
return OK;
}
循环队列的出队
Status DeQueue(SqQueue& Q, QElemType& e){
if(Q.front == Q.rear)
// 栈空
return ERROR;
// 保存队头元素
e = Q.base[Q.front];
// 队头指针 + 1
Q.front = (Q.front + 1)% MAXQSIZE;
return OK;
}
取循环队列队头元素
Status GetHead(SqQueue Q){
// 队列不为空
if(Q.front != Q.rear)
// 返回队头指针元素的值,队头指针不变
return Q.base[Q.front];
}