#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAXLEN 50
typedef 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;
}
栈
最新推荐文章于 2019-12-30 20:55:50 发布