来源:互联网 发布:国内 摄影师 知乎 编辑:程序博客网 时间: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;}