C++定义一个两栈共享空间的类,实现以下操作:插入、删除、判断某个栈是否栈空、读取某个栈栈顶元素。 要求实现完整程序,有必要的结果输出。 两个栈中元素值和个数自定。
时间: 2024-10-18 22:21:29 浏览: 41
在C++中,我们可以创建一个名为`SharedStacks`的类,它包含两个栈,并通过共用部分内存区域来实现。这里我们使用`std::stack`作为底层容器,因为它们提供了方便的入栈(push)、出栈(pop)以及检查栈是否为空(empty)的操作。
```cpp
#include <stack>
#include <iostream>
class SharedStacks {
private:
std::stack<int> stack1;
std::stack<int, std::vector<int>> stack2; // 使用vector作为存储区,可以共享内存
public:
void push(int value, int sharedIndex) {
if (sharedIndex == 0) { // 如果共享的是stack1
stack1.push(value);
} else { // 否则共享的是stack2,需要手动将值添加到vector中
stack2.push(value);
stack2.top() = value; // 将value复制回stack2的栈顶
}
}
bool pop(int& topValue, int sharedIndex) {
if (stack1.empty() && sharedIndex == 0) {
return false; // stack1为空,无法弹出
}
if (sharedIndex == 0) {
topValue = stack1.top();
stack1.pop();
} else {
topValue = stack2.top(); // stack2直接获取栈顶值
stack2.pop();
}
return true;
}
bool isEmpty(int sharedIndex) {
if (sharedIndex == 0) {
return stack1.empty();
} else {
return stack2.empty();
}
}
int getTop(int sharedIndex) {
if (stack1.empty() && sharedIndex == 0) {
throw std::runtime_error("Cannot read from empty stack1");
}
if (sharedIndex == 0) {
return stack1.top();
} else {
return stack2.top();
}
}
};
int main() {
SharedStacks ss;
// 插入元素
ss.push(1, 0); // 共享index为0,相当于push到stack1
ss.push(2, 1); // 共享index为1,相当于push到stack2并复制到stack1
// 输出栈顶元素
int top1, top2;
while (!ss.isEmpty(0)) {
top1 = ss.getTop(0);
std::cout << "Stack 1 top: " << top1 << "\n";
}
while (!ss.isEmpty(1)) {
top2 = ss.getTop(1);
std::cout << "Stack 2 top: " << top2 << "\n";
}
// 删除元素
while (!ss.isEmpty(0)) {
ss.pop(top1, 0);
}
while (!ss.isEmpty(1)) {
ss.pop(top2, 1);
}
return 0;
}
```
运行上述代码,你可以看到元素的插入、读取和删除操作。注意,这个例子假设两个栈共享同一个数据结构的顶部,但实际生产环境中,为了安全性和数据一致性,更推荐为每个栈单独维护其内部数据结构。
阅读全文