#include <iostream>
using namespace std;
class DoubleStack {
private:
static const int SIZE = 10;
int data[SIZE];
int top1;
int top2;
public:
void init();
bool isEmpty1();
bool isFull1();
bool push1(int value);
bool pop1(int &value);
bool isEmpty2();
bool isFull2();
bool push2(int value);
bool pop2(int &value);
};
bool DoubleStack::pop1(int &value) {
if (isEmpty1()) {
return false;
}
value = data[top1--];
return true;
}
bool DoubleStack::pop2(int &value) {
if (isEmpty2()) {
return false;
}
value = data[top2++];
return true;
}
bool DoubleStack::push1(int value) {
if (isFull1()) {
return false;
}
data[++top1] = value;
return true;
}
bool DoubleStack::push2(int value) {
if (isFull2()) {
return false;
}
data[--top2] = value;
return true;
}
void DoubleStack::init() {
top1 = -1;
top2 = SIZE;
}
bool DoubleStack::isEmpty1() {
if (top1 == -1) {
return true;
}
return false;
}
bool DoubleStack::isEmpty2() {
if (top2 == SIZE) {
return true;
}
return false;
}
bool DoubleStack::isFull1() {
if (top1 + 1 == top2) {
return true;
}
return false;
}
bool DoubleStack::isFull2() {
return isFull1();
}
int main() {
DoubleStack *ds = new DoubleStack();
ds->init();
ds->push1(1);
ds->push1(2);
ds->push1(3);
ds->push1(4);
ds->push1(5);
ds->push2(6);
ds->push2(7);
ds->push2(8);
ds->push2(9);
ds->push2(10);
ds->push2(11);
int value;
while (!ds->isEmpty1()) {
ds->pop1(value);
std::cout << value << " ";
}
while (!ds->isEmpty2()) {
ds->pop2(value);
std::cout << value << " ";
}
delete ds;
return 0;
}
共享顺序双栈
最新推荐文章于 2023-04-01 15:29:27 发布