定义一个顺序栈,可以对顺序栈进行“将某个元素入栈”、“弹出栈顶元素”、“取栈顶元素(不删除)”、“判断栈是否为空”、“清空栈”等操作。键盘输入一些命令,可以执行上述操作。本题中,顺序栈元素为字符,顺序栈的最大长度为10。 #include using namespace std;
const int StackSize = 10;
class SeqStack { public: SeqStack(); void Push(char x); char Pop(); char GetTop(); int Empty(); void Clear();
private: char data[StackSize]; int top;
};
SeqStack::SeqStack() { top = -1; }
void SeqStack::Push(char x) { if (top == StackSize - 1) { throw"None"; }
data[++top] = x;}
char SeqStack::Pop() {
if (top == -1) { throw"None"; } return data[top--];}
char SeqStack::GetTop() {
if (top == -1) { throw"None"; } return data[top];}
int SeqStack::Empty() { int i = 0;
if (top == -1) { i = 1; } return i;}
void SeqStack::Clear() { top = 1; }
int main() { char T; SeqStack S;
while (1) { cin >> T; if (T == 'P') { cin >> T; try { S.Push(T); } catch (const char *str) { cout << str << endl; } } else if (T=='D') { try { cout << S.Pop() << endl; } catch (const char* str) { cout << str << endl; } } else if (T=='G') { try { cout << S.GetTop() << endl; } catch (const char* str) { cout << str << endl; } } else if (T=='T') { S.Clear(); } else if (T == 'Y') { int i = S.Empty(); if (i == 1) { cout << "Yes" << endl; } else { cout << "No" << endl; } } else { break; } }}