数据结构(C++版) 栈的链接存储结构及实现

来源:互联网 发布:南宋灭亡知乎 编辑:程序博客网 时间:2024/05/16 07:13

数据结构(C++版) 栈的链接存储结构及实现


#include<iostream.h>
struct node
{
    int data;
    node *next;
};

class LinkStack
{
public:
    LinkStack(){top=NULL;} //构造函数置空链栈
    ~LinkStack();          //析构函数,释放链栈中个节点的存储空间
    void Push(int x);      //将元素x进栈
    int Pop();             //将栈顶元素出栈
    int Gettop()           //获取栈顶元素
{if(top!=NULL)return top->data;} //取栈顶元素(并不删除)
    bool empty()           //判断链栈是否为空栈
{
   if(top==NULL)
    return 1;
     else
      return 0;
}

private:
    node *top;        //栈顶指针即链栈的头指针
};

void LinkStack::Push(int x) //元素进栈
{   
    node *s=new node;        //申请一个数据域为x的节点s
    s->data=x;
    s->next=top;             //将节点s插在栈顶
    top=s;
}

int LinkStack::Pop()         //元素出栈
{   
int x;
    if(top==NULL) throw"下溢";
    x=top->data;             //暂存栈顶元素   
    node *p=top;             //将栈顶节点摘链
    top=top->next;
    delete p;
    return x;
}

LinkStack::~LinkStack()      //析构函数将链栈中所有节点的存储空间释放
{
    while(top)
{
   node *p=top->next;
        delete top;
        top=p;
}
}

void main()
{
    LinkStack link;
    int data;
    cout<<"请输入进栈的10个元素:";
    for(int i=0;i<10;i++)     //输入进栈的10个元素
{
     cin>>data;
        link.Push(data);
}
    link.Pop();              //栈顶元素出栈
    cout<<"现在栈顶的元素为:"<<link.Gettop()<<endl;    //输出栈顶元素
    while(!link.empty())                             
   cout<<"现在出栈的是:"<<link.Pop()<<endl;      //所有元素一个一个出栈
}