C++## 数据结构
定义一个链栈,可以对链栈进行 “将某个元素入栈”、“弹出栈顶元素”、“取栈顶元素(不删除)”、“判断栈是否为空”、 “清空栈”等操作。键盘输入一些命令,可以执行上述操作。本题中,栈的元素为字符。
#include
using namespace std;
struct Node{
char data;
Node *next;
};
class LinkStack{
public:
LinkStack();
void Push(char x);
void Pop();
char GetTop();
int Empty();
void ClearStack();
private:
Node *top;
};
LinkStack::LinkStack(){
top=new Node;
top->next=NULL;
}
char LinkStack::GetTop(){
if(top==NULL){
cout<<“None”;
}
else{
return top->data;
}
}
void LinkStack::Push(char x){
Node *s=NULL;
s=new Node;
s->data=x;
s->next=top;
top=s;
}
void LinkStack::Pop(){
Node *p=NULL;
char x;
if(top->next==NULL){
cout<<“None”;
return;
}
p=top;
x=top->data;
top=top->next;
delete p;
cout<<x;
}
int LinkStack::Empty(){
if(top->nextNULL){
cout<<“Yes”;
}
else
{
cout<<“No”;
}
}
void LinkStack::ClearStack(){
Node* p;
while(top->next!=NULL){
p=top;
top=top->next;
delete p;
}
}
int main(){
char x,i;
LinkStack S;
while(1){
cin>>i;
if(i’E’){
break;
}
switch(i){
case’P’:
cin>>x;
S.Push(x);
break;
case’D’:
S.Pop();
break;
case’G’:
cout<<S.GetTop();
break;
case’T’:
S.ClearStack();
break;
case’Y’:
S.Empty();
break;
}
}