#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;

}

posted on 2008-10-26 08:09  ....11  阅读(108)  评论(0)    收藏  举报

导航