数据结构4_链栈

用指针方式实现栈,相对于顺序栈,指针方式不用指定栈的大小,
先定义一个栈节点类,再定义一个链栈类,为使链栈类能访问栈节点的元素,设链栈类为栈节点类的友元类。

#include<iostream>
using namespace std;
class LinkStack;
class StackNode   //设计每个节点的类型
{
    char *data;
    StackNode *next;
    friend class LinkStack;   //设置友元类,以便LinkStack类访问其元素
};
class LinkStack
{
    StackNode *top;
public:
    LinkStack()
    {
        top=NULL;
    }
    int stackempty()  //判断是否空栈
    {
        return top==NULL;
    }
    void push(char *e)//入栈
    {
        StackNode *q;
        q=new StackNode;
        q->data=new char(sizeof(e)+1);
        strcpy(q->data,e);
        q->next=top;   //q的下一个节点指向顶栈
        top=q;         //顶栈指针指向当前指针;西电用教材中c代码出错
    }
    void pop(char *&e)
    {
        StackNode *q=top;
        if(stackempty())
        {
            cout<<"stack underflow"<<endl;
            return;
        }
        e=new char(sizeof(q->data)+1);
        strcpy(e,q->data);
        top=q->next;
        delete q;
    }
    void show()    //栈的显示
    {
        StackNode *q=top;
        while(q!=NULL)
        {
            cout<<q->data<<endl;
            q=q->next;
        }
    }
};

void main()
{
    LinkStack a;
    a.push("sb");
    a.push("test");
    a.push("stack");
    char *e;
    a.pop(e);
    cout<<"pop is:  "<<e<<endl;
    a.push("link");
    a.show();

}




posted on 2014-05-19 22:10  zhuangwy_CV  阅读(462)  评论(0编辑  收藏  举报

导航