AnUnverse

也无风雨也无晴

链栈的基本操作

初始化一个数据元素为整形的链栈,并实现进栈、出栈、获得栈顶元素等操作。

通过控制台将1,2,3,4,5进栈,出栈两次,获得栈顶元素并输出,6进栈,打印栈内的所有内容。

#include<iostream>
#include<cstdio>
#define MAXSIZE 100
#define OK 1
#define ERROR 0
using namespace std;

typedef struct StackNode       //链栈的定义
{
    int data;
    struct StackNode *next;
}StackNode,*LinkStack;

int InitStack(LinkStack &S)     //初始化链栈,将栈顶指针置空
{
    S=0;
    return OK;
}

int Push(LinkStack &S, int e)   //入栈,注意此处e不是引用传递
{
    StackNode *p;
    p=new StackNode;
    p->data=e;
    p->next=S;           //将新结点插入栈顶
    S=p;                //修改栈顶指针为p
    return OK;
}

int Pop(LinkStack &S, int &e)   //出栈,此处e为引用传递
{
    StackNode *p;
    if(S==0) return ERROR;
    e=S->data;          //将栈顶元素赋给e
    p=S;                //用p临时保存栈顶,以待删除
    S=S->next;          //修改栈顶指针
    delete p;           //释放原栈顶的空间
    return OK;
}

int GetTop(LinkStack S)     //取栈顶元素
{
    if(S!=0) return S->data;
}

int main()
{
    StackNode *S;
    InitStack(S);
    int a,i,b;
    cout<<"入栈"<<endl;
    for(i=0;i<5;i++)
    {
        scanf("%d",&a);
        Push(S,a);
    }
    cout<<"出栈1位"<<endl;
    Pop(S,b);
    cout<<b<<endl;
    cout<<"再出栈1位"<<endl;
    Pop(S,b);
    cout<<b<<endl;
    cout<<"取当前栈顶元素"<<endl;
    cout<<GetTop(S)<<endl;
    Push(S,6);
    cout<<"剩余元素全部出栈"<<endl;
    while(Pop(S,b))
        cout<<b<<' ';

    return 0;
}






阅读更多
个人分类: 数据结构
上一篇UVA1586
下一篇顺序栈的基本操作
想对作者说点什么? 我来说一句

链栈的基本操作和实现

2011年11月22日 161KB 下载

没有更多推荐了,返回首页

关闭
关闭