c++语言用class CQueue{public:stack<int>s1stack<int>s2 CQueue(){}实现两个函数队尾插入和队头删除
时间: 2024-10-11 09:15:11 浏览: 26
在C++中,要使用`class CQueue`实现双端队列(类似于栈的插入和删除操作),你可以利用两个`stack<int>`来分别完成队尾入队(enqueue)和队头出队(dequeue)。这里是一个简单的实现示例:
```cpp
#include <stack>
class CQueue {
private:
stack<int> s1; // 队尾堆栈
stack<int> s2; // 队头模拟,用于存放待移除元素
public:
// 构造函数
CQueue() {}
// 队尾插入(enqueue)
void enqueue(int value) {
s1.push(value); // 元素直接入队尾堆栈
}
// 队头删除(dequeue)
int dequeue() {
if (s2.empty()) { // 如果队头空,则将所有元素从队尾移动到队头
while (!s1.empty()) {
s2.push(s1.top());
s1.pop();
}
}
if (s2.empty()) { // 队头依然为空,说明队列已经空了,返回 -1 或抛异常
return -1;
} else {
int top = s2.top(); // 获取并移除队头元素
s2.pop();
return top;
}
}
};
```
在这个实现中,当你需要添加元素时,直接压入`s1`。而当需要删除元素时,如果`s2`为空,说明队列已满,需要先将`s1`的所有元素转移到`s2`,然后再弹出`s2`顶部的元素作为队首。注意,这个实现假设队列不会无限大,且不考虑异常处理。
阅读全文