[D-OJ练习] 栈的链式存储结构与操作
请你定义一个链栈,可以对链栈进行 “将某个元素入栈”、“弹出栈顶元素”、“取栈顶元素(不删除)”、“判断栈是否为空”、 “清空栈”等操作。键盘输入一些命令,可以执行上述操作。本题中,栈的元素为字符。
输入描述
各个命令以及相关数据的输入格式如下:
将某个元素入栈:P,接下来一行是要入栈的元素
弹出栈顶元素:D
取栈顶元素(不删除):G
清空栈:T
判断栈是否为空操作:Y
当输入的命令为E时,程序结束
输出描述
当输入的命令为Y时,请输出栈是否为空,如果栈为空输出Yes,栈不空输出No。
当输入命令G时,输出取出的栈顶元素
当输入命令D时,输出弹出的栈顶元素
注意,如果没有满足的元素,请输出None,所有元素均占一行。
输入样例
P a P b P c D Y T D Y P 1 P 2 D E
输出样例
c No None Yes 2
#include <iostream>
using namespace std;
struct Node {
char ch;
Node* next;
Node(char c):ch(c), next(NULL){}
};
class Stack {
private:
int length;
Node* pTop;
public:
Stack();
void Push(char newCh);
void GetTop();
void Pop();
void Clear();
bool IsNone();
};
Stack::Stack() {
length = 0;
pTop = NULL;
}
void Stack::Push(char newCh) {
Node* p = new Node(newCh);
p->next = pTop;
pTop = p;
length++;
}
void Stack::GetTop(){
if(length == 0){
cout << "None" ;
return ;
}
cout << pTop->ch ;
}
void Stack::Pop(){
if(length == 0){
cout << "None";
return ;
}
cout << pTop->ch;
Node* p = pTop;
pTop = pTop->next;
delete p;
length--;
}
void Stack::Clear(){
Node* topNext = NULL;
Node* p = pTop;
while(p){
topNext = p->next;
delete p;
p = topNext;
}
pTop = NULL;
length = 0;
}
bool Stack::IsNone(){
if(length){
return false;
} else{
return true;
}
}
int main()
{
Stack s;
char choice;
char addCh,ch;
int isContinue = 1;
while (isContinue)
{
cin >> choice;
switch (choice)
{
case 'P':
cin >> addCh;
s.Push(addCh);
break;
case 'G':
s.GetTop();
break;
case 'D':
s.Pop();
break;
case 'T':
s.Clear();
break;
case 'Y':
if(s.IsNone()){
cout << "Yes";
}else{
cout << "No";
}
break;
case 'E':
isContinue = 0;
break;
}
}
return 0;
}
本文来自博客园,作者:泥烟,CSDN同名, 转载请注明原文链接:https://www.cnblogs.com/Knight02/p/15799092.html