如题:用一个一维数组作为双端共享栈,设计可视化实现算法进栈,出栈,判断栈满和栈空操作。
#include <iostream>
const int kMaxSize = 100;
class DoubleEndedSharedStack
{
public:
DoubleEndedSharedStack() : front_(-1), rear_(-1) {}
bool IsFull() const { return front_ == 0 && rear_ == kMaxSize - 1 || front_ == rear_ + 1; }
bool IsEmpty() const { return front_ == -1; }
void PushFront(int x);
void PushRear(int x);
int PopFront();
int PopRear();
private:
int data_[kMaxSize];
int front_;
int rear_;
};
void DoubleEndedSharedStack::PushFront(int x)
{
if (IsFull())
{
std::cout << "栈满,无法进栈" << std::endl;
return;
}
if (front_ == -1) front_ = rear_ = 0;
else if (front_ == 0) front_ = kMaxSize - 1;
else --front_;
data_[front_] = x;
}
void DoubleEndedSharedStack::PushRear(int x)
{
if (IsFull())
{
std::cout << "栈满,无法进栈" << std::endl;
return;
}
if (front_ == -1) front_ = rear_ = 0;
else if (rear_ == kMaxSize - 1) rear_ = 0;
else ++rear_;
data_[rear_] = x;
}
int DoubleEndedSharedStack::PopFront()
{
if (IsEmpty())
{
std::cout << "栈空,无法出栈" << std::endl;
return 0;
}
int x = data_[front_];
if (front_ == rear_) front_ = rear_ = -1;
else if (front_ == kMaxSize - 1) front_ = 0;
else ++front_;
return x;
}
int DoubleEndedSharedStack::PopRear()
{
if (IsEmpty())
{
std::cout << "栈空,无法出栈" << std::endl;
return 0;
}
int x = data_[rear_];
if (front_ == rear_) front_ = rear_ = -1;
else if (rear_ == 0) rear_ = kMaxSize - 1;
else --rear_;
return x;
}
int main()
{
DoubleEndedSharedStack s;
s.PushFront(1);
s.PushFront(2);
s.PushRear(3);
s.PushRear(4);
std::cout << s.PopFront() << std::endl;
std::cout << s.PopRear() << std::endl;
return 0;
}