数据结构之顺序栈的操作(C语言)

来源:互联网 发布:网上寺院软件下载 编辑:程序博客网 时间:2024/06/06 21:42
#include <stdlib.h>#include <stdio.h>#include <string.h>#define MAXLEN 50typedef struct  {char name[10];int age;}DATA;typedef struct stack {DATA date[MAXLEN+1];int top;}StackType;//栈的初始化StackType *STInit(){StackType *p;if (p=(StackType *)malloc(sizeof(StackType))){p->top=0;return p;}return NULL;}//判断栈是否为空int STIsEmpty(StackType *s){int t;t=(s->top==0);return t;}//判断栈是否已经满int STIsFull(StackType *s){int t;t=(s->top==MAXLEN);return t;}//清空栈void STClear(StackType *s){s->top=0;}//释放内存void STFree(StackType *s){if(s)free(s);}//进栈int PushST(StackType *s,DATA data){if((s->top+1)>MAXLEN){printf("栈溢出\n");return 0;}s->date[++s->top]=data;return 1;}//出栈DATA PopST(StackType *s){if(s->top==0){printf("栈为空\n");exit(0);}return (s->date[s->top--]);}//读取栈顶元素DATA PeekST(StackType *s){if(s->top==0){printf("栈为空\n");exit(0);}return (s->date[s->top]);}void main(){StackType *s;DATA data,data1;s=STInit();printf("入站操作:\n");printf("输入姓名 年龄进行入站操作:\n");do {scanf("%s%d",&data.name,&data.age);if (strcmp(data.name,"0")==0){break;}else{PushST(s,data);}} while (1);do {printf("\n出栈,按回车键\t");getchar();if (s->top==0){break;}data1=PopST(s);printf("出战的数据是(%s,%d)\n",data1.name,data1.age);} while (1);STFree(s);}

原创粉丝点击