栈
#include<iostream>
using namespace std;
typedef int TypeData;
typedef struct LinkNode
{
int data;
LinkNode *next;
}LinkNode;
class LinkStack {
LinkNode *top;
public:
LinkStack():top(NULL){};
~LinkStack(){makeEmpty();};
//==========进栈====================
void Push(const TypeData& x);
//==========出栈====================
bool Pop(TypeData& x);
//==========返回栈顶================
bool getTop(TypeData& x) const;
//==========栈空否==================
bool IsEmpty() const {return (top==NULL)?true:false;}
//==========求栈的元素个数==========
int getSize()const;
//==========清空栈的内容============
void makeEmpty();
//==========输出栈的所有元素========
void TranElement();
};
//=======类的实现===================
void LinkStack::makeEmpty()
{
LinkNode *p;
while(top!=NULL)
{p=top;top=top->next;delete p;}
}
void LinkStack::Push(const TypeData& x)
{
LinkNode *p=new LinkNode;
p->data=x;
p->next=top;
top=p;
}
bool LinkStack::Pop(TypeData& x)
{
LinkNode *p=top;
x=p->data;
top=top->next;
delete p;
return true;
}
bool LinkStack::getTop(TypeData& x) const
{
if(IsEmpty()==true) return false;
x=top->data;
return true;
}
int LinkStack::getSize() const
{
int k=0;
LinkNode *p=top;
while(p!=NULL)
{
p=p->next;
k++;
}
return k;
}
void LinkStack::TranElement()
{
LinkNode *p=top;
while(p!=NULL)
{
cout<<" "<<p->data;
p=p->next;
}
}
void main()
{
int n,m,i,j,k;
LinkStack mylink;
cout<<"构造链式栈list1,请确定数组元素个数:";cin>>n;
cout<<"请输入元素:";
for(i=0;i<n;i++){cin>>m;mylink.Push(m);}
cout<<"由栈顶到栈底的顺序为:"<<endl;
mylink.TranElement();
cout<<endl;
cout<<"总共有"<<mylink.getSize()<<"个元素"<<endl;
while(true)
{
cout<<"请输入你想添加的元素(若输入'0',不添加!): ";cin>>j;
if(j!=0) mylink.Push(j);
if(j==0) break;
}
if(mylink.IsEmpty()!=true)
{
cout<<" 现在由栈顶到栈底的顺序为:"<<endl;
mylink.TranElement();
}
cout<<endl;
while(true)
{
cout<<"是否删除栈顶元素(若输入'0',不删除!): ";cin>>k;
if(mylink.IsEmpty()==true){cout<<"栈中已经没元素了!"; break;}
if(k!=0){mylink.Pop(k);}
if(k==0) break;
}
if(mylink.IsEmpty()!=true)
{
cout<<" 现在由栈顶到栈底的顺序为:"<<endl;
mylink.TranElement();
}
cout<<endl;
}
浙公网安备 33010602011771号