编写完整的C++语言程序完成下列实验任务: 1、定义一个两栈共享空间的类,实现以下操作:插入、删除、判断某个栈是否栈空、读取某个栈栈顶元素。 要求实现完整程序,有必要的结果输出。 两个栈中元素值和个数自定。
时间: 2024-10-18 10:22:08 浏览: 39
C语言 栈的实现,包含顺序栈和链栈,亲测可用
5星 · 资源好评率100%
```cpp
#include <iostream>
#include <stack>
class SharedStacks {
private:
std::stack<int> stack1;
std::stack<int, std::deque<int>> stack2; // 使用双端队列作为第二个栈的数据结构
public:
// 插入元素到第一个栈
void pushToFirst(int value) {
stack1.push(value);
std::cout << "Inserted to Stack 1: " << value << std::endl;
}
// 判断第一个栈是否为空
bool isEmptyFirst() {
return stack1.empty();
}
// 删除第一个栈的栈顶元素并返回值,若栈空则返回-1
int popFromFirst() {
if (isEmptyFirst()) {
std::cout << "Stack 1 is empty, cannot pop." << std::endl;
return -1;
}
int poppedValue = stack1.top();
stack1.pop();
return poppedValue;
}
// 插入元素到第二个栈,如果栈满,将第一个栈的栈顶元素弹出再插入
void pushToSecond(int value) {
while (!stack2.empty() && !stack1.empty()) {
stack2.push(stack1.top());
stack1.pop();
}
stack2.push(value);
std::cout << "Inserted to Stack 2: " << value << std::endl;
}
// 删除第二个栈的栈顶元素并返回值,若栈空则返回-1
int popFromSecond() {
if (stack2.empty()) {
std::cout << "Stack 2 is empty, cannot pop." << std::endl;
return -1;
}
int poppedValue = stack2.top();
stack2.pop();
return poppedValue;
}
// 读取第一个栈的栈顶元素,若栈空则返回-1
int peekFirst() {
if (isEmptyFirst()) {
std::cout << "Stack 1 is empty, no top element." << std::endl;
return -1;
}
return stack1.top();
}
};
int main() {
SharedStacks sharedStacks;
// 测试操作
sharedStacks.pushToFirst(10);
sharedStacks.pushToFirst(20);
sharedStacks.pushToSecond(30);
std::cout << "Top of Stack 1: " << sharedStacks.peekFirst() << std::endl;
std::cout << "Popped from Stack 1: " << sharedStacks.popFromFirst() << std::endl;
sharedStacks.pushToSecond(40);
sharedStacks.pushToSecond(50);
std::cout << "Top of Stack 2: " << sharedStacks.peekFirst() << std::endl;
std::cout << "Popped from Stack 2: " << sharedStacks.popFromSecond() << std::endl;
return 0;
}
```
这个C++程序定义了一个名为`SharedStacks`的类,它包含了两个共享存储空间的栈,一个标准的栈`stack1`和一个使用双端队列实现的栈`stack2`。程序实现了基本的栈操作,如插入、删除、判断栈空以及读取栈顶元素,并在`main`函数中进行了测试。
阅读全文