栈的链表实现

来源:互联网 发布:linux下的telnet 编辑:程序博客网 时间:2024/05/21 20:22
#include <stdio.h>#include<stdlib.h>  #include <malloc.h>#define OK 1  #define ERROR -1   #define OVERFLOW  -2  #define TRUE 1  #define FALSE 0 typedef int SElemType;               //自定义数据类型,假定为整型typedef int Status;typedef struct SNode                 //单链表结点结构{       SElemType data;                  //结点数据域    SNode *next;                     //结点指针域    SNode *top; //栈顶指针}SNode,*SLinkStack;Status InitStack(SLinkStack &S);//创建一个空栈Status EmptyStack(SLinkStack S);//判断栈是否为空栈Status ClearStack(SLinkStack &S);//把栈置空Status DestroyStack(SLinkStack &S);//把栈销毁Status GetTop(SLinkStack S);//取栈顶元素Status Push(SLinkStack &S,SElemType e);//进栈Status Pop(SLinkStack &S);//出栈Status ShowStack(SLinkStack S);//遍历栈内所有元素 /*创建一个空栈*/Status InitStack(SLinkStack &S){S = (SLinkStack)malloc(sizeof(SNode));S->top = NULL;return OK;} //InitStack/*判断是否为空栈*/Status EmptyStack(SLinkStack S){if(S->top == NULL)return TRUE;elsereturn FALSE;}//EmptyStack/*将栈置空*/Status ClearStack(SLinkStack &S){S->top = NULL;return OK;}//ClearStack /*将栈销毁*/Status DestroyStack(SLinkStack &S){if(!EmptyStack(S)){S->top = NULL;free(S);}return OK; } //DestoryStack/*获取栈顶元素*/Status GetTop(SLinkStack S,SElemType &e){if(EmptyStack(S)){printf("当前栈为空\n");return ERROR; }e = S->top->data;return OK;}//GetTop /*插入元素e为栈顶元素*/Status Push(SLinkStack &S,SElemType e){SLinkStack p;p = (SLinkStack)malloc(sizeof(SNode));p->data = e;p->next = S->top;    //替换栈顶元素 S->top  = p;return OK; }//Push/*出栈*/Status Pop(SLinkStack &S,SElemType &e){if(EmptyStack(S)){printf("当前栈为空\n");return ERROR; }SLinkStack p;p = S->top;e = S->top->data;S->top = S->top->next;free(p);return OK;}//Pop/*遍历栈内所有元素*/Status ShowStack(SLinkStack S){SLinkStack p;if(EmptyStack(S)){printf("当前栈为空\n");return ERROR; }p = S->top;while(p->next != NULL){printf("%d ",p->data);p = p->next;}printf("%d\n",p->data);   //打印最后一个元素return OK;} //ShoeStackint main(){SLinkStack S;SElemType e,m;int n;InitStack(S);printf("请输入元素个数:\n");scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&m);Push(S,m);}printf("栈内元素为:\n");ShowStack(S);Pop(S,e);printf("出栈元素为%d\n",e);printf("栈内元素为:\n");ShowStack(S);return OK;}

0 0