C++编写一个能为栈也能为队列的线性表。
时间: 2024-02-13 07:00:31 浏览: 90
可以使用双端队列(deque)来实现既能作为栈又能作为队列的线性表。deque是一种双向开口的连续线性空间,支持高效的随机访问、在头尾进行元素的插入和删除。
以下是一个基于deque实现的C++代码:
```c++
#include <iostream>
#include <deque>
using namespace std;
template<typename T>
class StackQueue {
private:
deque<T> dq; // 双端队列
public:
void push(const T &val) { // 入栈/队列
dq.push_back(val);
}
void pop() { // 出栈/队列
dq.pop_back();
}
T &top() { // 栈顶/队头
return dq.back();
}
T &front() { // 队头
return dq.front();
}
bool empty() const { // 是否为空
return dq.empty();
}
int size() const { // 元素个数
return dq.size();
}
};
int main() {
StackQueue<int> sq;
sq.push(1);
sq.push(2);
sq.push(3);
cout << "size: " << sq.size() << endl; // size: 3
cout << "top: " << sq.top() << endl; // top: 3
sq.pop();
cout << "size: " << sq.size() << endl; // size: 2
cout << "top: " << sq.top() << endl; // top: 2
sq.push(4);
cout << "front: " << sq.front() << endl; // front: 1
return 0;
}
```
在该代码中,我们使用了模板类来定义了一个StackQueue类,其中使用了双端队列dq来存储数据。push()方法用于插入元素,pop()方法用于删除元素,top()方法和front()方法用于获取栈顶或队头元素,empty()方法用于判断是否为空,size()方法用于获取元素个数。可以看到,该代码实现了既能作为栈也能作为队列的功能,可以根据实际需要进行使用。
阅读全文