题目
如果允许在循环队列的两端都可以进行插入和删除操作,要求:
- 写出循环队列的类型定义。
- 分别写出从队尾删除和从队头插入的算法。
分析
本题实际上是求双端队列的操作
约束
队头指针指向队头元素的上一个位置
队尾指针指向队尾元素
1. 双端队列的存储结构
跟队列的存储结构相等,只是队列名改变了
#define MAXSIZE 100
typedef struct {
DQElemType *base;
int rear,front;
}DeQueue;
2. 队头操作
void EnDeQueue(DeQueue &Q,DQElemType e){
if(Q.rear == (Q.front - 1 + MAXSIZE) % MAXSIZE)
{
cout << "队列已满,无法插入" << endl;
}
Q.base[Q.front] = e; //队头指针指向前一个元素
Q.front = (Q.front - 1 + MAXSIZE) % MAZSIZE;
}
3. 队尾删除
void DEDeQueue(DeQueue &Q,DQElemType &e){
if(Q.rear == Q.fornt){
cout << "队空,无法进行删除操作!";
}
e = Q.base[Q.rear];
Q.rear = (Q.rear - 1 + MAXSIZE) % MAZSIZE;
}
标签:队尾,删除,队列,DeQueue,队头,DQElemType,插入,写出
From: https://blog.csdn.net/2301_81182847/article/details/144485930