#include <iostream>
#include <vector>
class SharedStack {
private:
std::vector<int> stack;
int top1; // 第一个栈的栈顶索引
int top2; // 第二个栈的栈顶索引
public:
SharedStack(int capacity) {
stack.resize(capacity);
top1 = -1;
top2 = capacity;
}
bool isFull() {
return top1 + 1 == top2;
}
bool isEmpty(int stackNumber) {
if (stackNumber == 1) {
return top1 == -1;
} else if (stackNumber == 2) {
return top2 == stack.size();
}
return true;
}
void push(int stackNumber, int item) {
if (isFull()) {
std::cout << "栈已满,无法压入元素。" << std::endl;
return;
}
if (stackNumber == 1) {
stack[++top1] = item;
} else if (stackNumber == 2) {
stack[--top2] = item;
} else {
std::cout << "无效的栈编号,请重新选择。" << std::endl;
}
}
int pop(int stackNumber) {
if (isEmpty(stackNumber)) {
std::cout << "栈为空,无元素可弹出。" << std::endl;
return -1; // 返回一个特殊值表示弹出失败
}
int item;
if (stackNumber == 1) {
item = stack[top1--];
} else if (stackNumber == 2) {
item = stack[top2++];
} else {
std::cout << "无效的栈编号,请重新选择。" << std::endl;
return -1; // 返回一个特殊值表示弹出失败
}
return item;
}
};
int main() {
SharedStack stack(6);
// 在第一个栈中压入元素
.push(1, 10);
stack.push(1, 20);
stack.push(1, 30);
// 在第二个栈中压入元素
stack.push(2, 40);
stack.push(2, 50);
stack.push(2, 60);
// 弹出第一个栈的元素
std::cout << "弹出的元素为:" << stack.pop(1) << std::endl;
std::cout << "弹出的元素为:" << stack.pop(1) << std::endl;
// 弹出第二个栈的元素
std::cout << "弹出的元素为:" << stack.pop(2) << std::endl;
std::cout << "弹出的元素为:" << stack.pop(2) << std::endl;
return 0;
}
数据结构->共享栈(c++)
最新推荐文章于 2024-07-11 17:21:10 发布