您的位置:首页 > 理论基础 > 数据结构算法

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

2012-03-06 15:34 495 查看
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAXLEN 50
typedef 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);

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息