题目
如果允许在循环队列的两端都可以进行插入和删除操作,要求:
- 写出循环队列的类型定义。
- 分别写出从队尾删除和从队头插入的算法。
分析
本题实际上是求双端队列的操作
约束
队头指针指向队头元素的上一个位置
队尾指针指向队尾元素
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;
}