实验三 链栈

来源:互联网 发布:淘宝童装店转让 编辑:程序博客网 时间:2024/06/08 13:16

算法

链栈通常用单链表表示,其结点结构与单链表的结点结构相同,以单链表的头部作为栈顶;

结点结构:设置了一个数据域data和一个结点指针next;

构造函数:初始化一个空栈,将栈顶指针top置为空

析构函数:当top不为空时,设置了一个结点指针q暂存被释放的结点,top指向被释放结点的下一个结点,删除q;

入栈:申请一个数据域为x的结点s,将结点s插在栈顶;

出栈:如果栈为空,抛出下溢;否则,设置一个结点指针p暂存栈顶元素,top指针后移,将栈顶结点摘链;

取栈顶元素:如果栈不为空,返回top指向的结点的数据域;

判空:如果top为成立,则返回1,否则,返回0;

输出:如果设置一个结点指针p,当p不为空时,输出该栈的所有元素。

四、源代码

#includeusing namespace std;templatestruct node{T data;node *next;};templateclass linkstack{public:linkstack(){top=NULL;}~linkstack();void push(T x);T pop();T gettop(){if(top!=NULL)return top->data;}int empty(){if(top==NULL) return 1;else return 0;}void print();private:node *top;};templatelinkstack::~linkstack(){while(top!=NULL){node *q;q=top;top=top->next;delete q;}}templatevoid linkstack::push(T x){node *s;s=new node;s->data=x;s->next=top;top=s;}templateT linkstack::pop(){node *p;T x;if(top==NULL)throw"error";x=top->data;p=top;top=top->next;delete p;return x;}templatevoid linkstack::print(){node *p;p=top;while(p!=NULL){cout<data<<" ";p=p->next;}}void main(){cout<<"[1]入栈    [2]出栈    [3]输出    [4]取头    [5]判空   [6]退出"<l;while(flag==1){cout<<"please input the command(1~4):"<>t;switch(t){case 1:cout<<"please enter the element to be pushed in:";while(x!=0){cin>>x;if(x!=0)l.push(x);}cout<


五、运行结果
运行程序,输入1,将2 4 6 8 1 3 5 7 9 依次入栈,当输入0时,停止入栈;
输入2,出栈元素为9;
输入3,输出所有栈元素
输入4,此时取栈顶元素7;
输入5,判断栈是否为空,非空,返回0;
输入6,退出。

原创粉丝点击