本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。
一方面用于学习记录与分享,
另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。
如有侵权,请留言作删文处理。
课程视频链接:
数据结构与算法基础–第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;// 队尾指针 + 1Q.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];// 队头指针 + 1Q.front = (Q.front + 1)% MAXQSIZE;return OK;
}
取循环队列队头元素
Status GetHead(SqQueue Q){// 队列不为空if(Q.front != Q.rear)// 返回队头指针元素的值,队头指针不变return Q.base[Q.front];
}