链式栈

来源:互联网 发布:杭州g20知乎 编辑:程序博客网 时间:2024/05/08 09:08
#include <stdio.h>#include<stdlib.h>#define  Ok 1#define  Error 0typedef int Status;typedef int ElemType;typedef struct LNoelist {ElemType data;struct LNoelist  *next;}LNoelist;                //链栈每个节点的结构体定义typedef struct SqlStack{    struct LNoelist *top;struct LNoelist *base;int length;}SqlStack;            //链栈指针的结构体的定义Status Ini_Stack(SqlStack *q)    //初始化链栈{q->base=(LNoelist*)malloc(sizeof(LNoelist));if(!q->base)   {printf("初始化错误");return Error;}q->top=q->base;q->length=0;return Ok;}Status push(SqlStack *q,ElemType e)    //入栈{LNoelist *s;s=(LNoelist*)malloc(sizeof(LNoelist));s->data=e;s->next=q->top;q->top=s;q->length++;return Ok;}Status pop(SqlStack *q,ElemType &e)   //出栈{   LNoelist *s;   s=q->top;   e=q->top->data;   q->top=q->top->next;   free(s);   return 1;}Status print(SqlStack *q)      //按照top减来输出栈内容,其实就是弹栈操做{printf("您输入的链式栈为");while(q->top!=q->base){printf("%d",q->top->data);q->top=q->top->next;}return Ok;}Status print1(SqlStack *q)           //按照弹栈输出{int e;printf("您输入的链式栈为");while(q->top!=q->base){pop(q,e);printf("%d",e);}return 1;}void main(){SqlStack *q;int e;q=NULL;q=(SqlStack*)malloc(sizeof(LNoelist));Ini_Stack(q);printf("请输入数据啊(按0结束)");scanf("%d",&e);while(e!=0){push(q,e);scanf("%d",&e);}//print(q);print1(q);getchar();getchar();}



采用链式存储的方法来实现栈的存储于取出,push 和pop
比较简单,就是单链表的一个有顺序的应用