栈是只有一个端口的容器,只能从一边进行放入和取出的操作。栈的特点是先进后出,后进先出。
以下是用链表模拟栈的基本操作:
#include<bits/stdc++.h>
using namespace std;
template<class T>
struct Node
{
T data;
Node *next;
};
template<class T>
class Tstack
{
Node<T>*first;
public:
Tstack();///无参的构造函数
void pushx(T x);///栈中加入一个元素
T popx();///栈中删除一个元素
void print();///遍历输出栈里的元素
};
template<class T>
Tstack<T>::Tstack()
{
Node<T>*s;
s=new Node<T>;
s->next=NULL;
first=s;
}
template<class T>
void Tstack<T>::pushx(T x)
{
Node<T> *s;
s=new Node<T>;
s->data=x;
s->next=first->next;
first->next=s;
}
template<class T>
T Tstack<T>::popx()
{
if(first->next==NULL)
throw"栈为空";
Node<T> *p;
p=first->next;
T x=p->data;
first->next=p->next;
delete p;
return x;
}
template<class T>
void Tstack<T>::print()
{
Node<T> *p;
p=first->next;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
int main()
{
Tstack<int>q;
int x;
while(cin>>x)
{
if(x==-3)
return 0;
else if(x==-2)
q.print();
else if(x==-1)
q.popx();
else
q.pushx(x);
}
return 0;
}