栈
来源:互联网 发布:国内 摄影师 知乎 编辑:程序博客网 时间:2024/05/21 17:48
#include <stdlib.h>#include <stdio.h>#include <string.h>#define MAXLEN 50typedef struct{ char name[10]; int age;}DATA;typedef struct stack{ DATA data[MAXLEN+1]; int top;}StackType;StackType *STInit(){ StackType *p; if(p=(StackType *)malloc(sizeof(StackType)))//申请栈内存 { p->top=0;//设置栈顶为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->data[++s->top]=data;//将元素入栈 return 1;}DATA PopST(StackType *s)//出栈操作{ if(s->top==0) { printf("栈为空!\n"); exit(0); } return (s->data[s->top--]);}DATA PeekST(StackType *s)//读栈顶数据{ if(s->top==0) { printf("栈为空!\n"); exit(0); } return (s->data[s->top]);}int main(){ StackType *stack; DATA data,datal; stack=STInit(); printf("入栈操作:\n"); printf("输入姓名 年龄进行入栈操作:"); do { scanf("%s%d",data.name,&data.age); if(strcmp(data.name,"0")==0) { break; } else { PushST(stack,data); } }while(1); do { printf("\n出栈操作:按任意键进行出栈操作:"); getchar(); datal=PopST(stack); printf("出栈操作数据是(%s,%d)\n",datal.name,datal.age); }while(1); STFree(stack); return 0;}