栈
#pragma warning(disable:4996)
#include<stdio.h>
#include<stdlib.h>
#define SIZE 100
typedef struct DATA {
char name[20];
int age;
}DATA;
typedef struct stack {
DATA data[SIZE + 1];
int top;
}SeqStack;
SeqStack *SeqStackInit() {
//初始化
SeqStack *p;
if (p = (SeqStack *)malloc(sizeof(SeqStack))) {
p->top = 0;
return p;
}
return NULL;
}
void SeqStackFree(SeqStack *s) {
if (s) {
free(s);
}
}
int SeqStackIsEmpty(SeqStack *s) {
return (s->top == 0);
}
void SeqStackClear(SeqStack *s) {
s->top = 0;
}
int SeqStackIsFull(SeqStack *s) {
return (s->top == SIZE);
}
int SeqStackPush(SeqStack *s, DATA data) {
//入栈
if ((s->top + 1) > SIZE) {
printf("栈溢出!\n");
return 0;
}
s->data[++s->top] = data;
return 1;
}
DATA SeqStackPop(SeqStack *s) {
//出栈
if (s->top == 0) {
printf("栈为空!\n");
exit(0);
}
return (s->data[s->top--]);//弹出栈顶元素
}
DATA SeqStackPeek(SeqStack *s) {
if (s->top == 0) {
printf("栈为空!\n");
exit(0);
}
return (s->data[s->top]);
}
int main() {
SeqStack *stack;
DATA data, data1;
stack = SeqStackInit();//初始化
printf("入栈操作:\n");
printf("输入姓名 年龄进行入栈操作:");
scanf("%s%d", data.name, &data.age);
SeqStackPush(stack, data);//入栈
printf("输入姓名 年龄进行入栈操作:");
scanf("%s%d", data.name, &data.age);
SeqStackPush(stack, data);
printf("\n出栈操作:\n按任意键进行出栈操作:");
getch();
data1 = SeqStackPop(stack);
printf("出栈的数据是(%s, %d)\n", data1.name, data1.age);
printf("在按任意键进出站操作:");
getch();
data1 = SeqStackPop(stack);//出栈
printf("出栈的数据是(%s,%d)\n", data1.name, data1.age);
SeqStackFree(stack);//释放空间
getch();
return 0;
}