//SeqStack.h
</pre><pre name="code" class="cpp">/*
stack:Last In First Out
*/
//1.定义顺序栈的结构
typedef struct stack
{
DATA data[SIZE+1];
int top; //栈顶
}SeqStack;
//2.初始化栈
SeqStack *SeqStackInit()
{
SeqStack *p;
if(p=(SeqStack *)malloc(sizeof(SeqStack)))
{
p->top=0; //设置栈顶为0
return p; //返回指向栈顶的指针
}
return NULL;
}
//释放申请的内存
void SeqStackFree(SeqStack *s)
{
if(s)
free (s);
}
//3.判断栈的状态
int SeqStackIsEmpty(SeqStack *s) //判断栈是否为空
{
return (s->top==0);
}
void SeqStackClear(SeqStack *s) //清空栈
{
s->top=0;
}
int SeqStackIsFull(SeqStack *s) //判断栈是否已满
{
return (s->top==SIZE);
}
//4.入栈操作
int SeqStackPush(SeqStack *s,DATA data)
{
if((s->top+1)>SIZE) //栈顶上一个位置超过最大容量
{
printf("栈溢出\n");
return 0;
}
s->data[++s->top]=data;
return 1;
}
//5.出栈操作
DATA SeqStackPop(SeqStack *s)
{
if(s->top==0) //判断栈是否为空
{
printf("栈为空\n");
exit(0);
}
return (s->data[s->top--]);
}
//6.获取栈顶元素
DATA SeqStackPeek(SeqStack *s)
{
if(s->top==0) //判断栈是否为空
{
printf("栈为空\n");
exit(0);
}
return (s->data[s->top]);
}
//SeqStackTest.c
#include <stdio.h>
#include <stdlib.h>
#define SIZE 50
typedef struct
{
char name[15];
int age;
}DATA;
#include "SeqStack.h"
int main(int argc, char *argv[]) {
SeqStack *stack;
DATA data,data1,data2;
stack = SeqStackInit();
printf("入栈操作:\n");
printf("输入3组姓名 年龄进行入栈操作:\n");
int i;
for(i=0; i<3; i++)
{
scanf("%s%d",data.name,&data.age);
SeqStackPush(stack,data);
}
printf("出栈操作:\n");
for (i = 0; i < 3; i++)
{
data2=SeqStackPeek(stack);
data1=SeqStackPop(stack);
printf("栈顶的数据为<%s,%d>\n",data2.name,data2.age);
printf("出栈的数据是(%s,%d)\n",data1.name,data1.age);
}
SeqStackFree(stack);
return 0;
}
//该程序的输出结果:
入栈操作:
输入3组姓名 年龄进行入栈操作:
aaa 21
bbb 20
ccc 19
出栈操作:
栈顶的数据为<ccc,19>
出栈的数据是(ccc,19)
栈顶的数据为<bbb,20>
出栈的数据是(bbb,20)
栈顶的数据为<aaa,21>
出栈的数据是(aaa,21)
--------------------------------
Process exited with return value 0
Press any key to continue . . .