只用一个栈顶指针top(没有bottom)实现的链式栈

来源:互联网 发布:win7 网络共享 编辑:程序博客网 时间:2024/05/29 10:06
#define TRUE        1 #define FALSE       0 #define OK          1 #define ERROR       0 #define OVERFLOW    -1 #define UNDERFLOW   -2 struct LNode// 链式栈s中的结点结构{ char data;//数据 struct LNode *next;//指针};struct LStack{ struct LNode *top;//栈顶指针,这个栈结构没有bottom指针,感觉更简洁!}Status InitStack(LStack &s) //构造一个空栈{ struct LNode *p; p=(LNode *)malloc(sizeof(LNode)); if(!p) {  printf("存储分配失败!");  exit(OVERFLOW); } s.top=p; p->next=NULL; return OK;}Status DestoryStack(LStack &s) //初始条件:栈s已存在 //操作结果:销毁栈{ struct LNode *p; p=s.top; while(p) {  s.top=p->next;  free(p);  p=s.top; } return OK;}Status StackEmpty(LStack s) ////初始条件:栈s已存在 //操作结果:若栈为空栈,返回true,否则返回false{ if(s.top->next==NULL)  return TRUE; return FALSE;}Status  StackLength(LStack s)//初始条件:栈s已存在 //操作结果:返回s的元素个数,即栈的长度{   int length=0;   struct LNode *p;   p=s.top;   while(p){   length++;   p=p->next;   }   return length;} Status Push(LStack &s,ElemType e)//初始条件:栈s已存在 //操作结果:插入元素e成为新的栈顶元素{    struct LNode *p;   p=(LNode *)malloc(sizeof(LNode));   if(!p)    exit(OVERFLOW);   p->data=e;   p->next=s.top;   s.top=p;   return OK;}      Status  Pop(LStack &s,ElemType &e) //初始条件:栈s已存在且非空  //操作结果:删除s的栈顶元素,并且用e返回其值{    struct LNode *p;    if(!(s.top->next))       exit(ERROR);    p=s.top;    s.top=p->next;    e=p->data;    free(p);    return OK;}Status  GetTop(LStack s,ElemType &e) //初始条件:栈s已存在且非空 //操作结果:用e返回s的栈顶元素{     if(!(s.top->next))exit(ERROR);     e = s.top->data;         s.top=s.top->next;     e=s.top->data;     return OK;} Status  StackTraverse(LStack s)//从栈顶开始依次输出{     struct LNode *p;     if(!(s.top->next))   exit(ERROR);     p=s.top;     while(p)    {cout<<p->data<<endl;   p=p->next;    }    return OK;}

0 0
原创粉丝点击