链栈
2017-05-16 14:11
106 查看
#include<stdio.h> typedef struct node { int data; struct node * next; }LkStk,*Stk; //初始化 Stk InitStack(Stk s) { s=malloc(sizeof(LkStk)); s->next=NULL; } //判栈空 int EmptyStack(Stk s) { if(s->next==NULL) return 1; else return 0; } //进栈 void PushStack(Stk s,int x) { LkStk *p; p=malloc(sizeof(LkStk)); p->data=x; p->next=s->next; s->next=p; } //出栈 void PopStack(Stk s) { LkStk *p; if(!EmptyStack(s)) { p=s->next; s->next=p->next; free(p); } else exit("栈空!"); } //取栈顶元素 int GetTop(Stk s) { if(!EmptyStack(s)) return s->next->data; else exit("栈空!"); } main() { Stk s; s=InitStack(s); int x; printf("请输入栈元素:"); scanf("%d",&x); while(x>0) { PushStack(s,x); printf("请输入栈元素:"); scanf("%d",&x); } printf("元素出栈:"); while(!EmptyStack(s)) { x=GetTop(s); PopStack(s); printf("%d ",x); } }