c语言代码实现
#include<stdio.h>
#include<stdlib.h>
#define STACK_SIZE 10//初始化顺序栈的空间定义
#define STACK_INTCRE_SIZE 10//拓展顺序栈的空间定义
//学生结构体
typedef struct
{
int age;
int height;
double weight;
}Student;
//顺序栈类型
typedef struct
{
Student *base;
Student* top;
int stackSize;
}Stack;
//初始化栈函数
int initStack(Stack* s)
{
s->base = (Student*)malloc(STACK_SIZE * sizeof(Student));
if (!s)exit(-1);
s->top = s->base;
s->stackSize = STACK_SIZE;
}
//销毁栈函数
int destoryStack(Stack* s)
{
if (!s)return 0;
free(s->base);
s->base = s->top = NULL;
s->stackSize = 0;
return 1;
}
//入栈函数
int PushStack(Stack* s, Student* stu)
{
//判断释放空间足够存放
if ((s->top - s->base) >= s->stackSize)
{//空间不足
s->base = (Student*)realloc(s->base,(s->stackSize + STACK_INTCRE_SIZE) * sizeof(Student));
if (!s->base)exit(-1);
s->top = s->base + s->stackSize;//栈顶指针指向申请之前的位置(高度)
s->stackSize += STACK_INTCRE_SIZE;
}
//进栈,添加元素
*s->top++ = *stu;
return 1;
}
//显示学生信息函数
void displayStudent(Student* stu)
{
if (!stu)exit(-1);
printf("年龄:%5d,身高:%5d,体重:%5lf\n", stu->age, stu->height, stu->weight);
}
//遍历栈函数
int displayStack(Stack* s)
{
if (s->top == s->base)return 0;
Student* p = s->base;
while (p != s->top)
{
displayStudent(p);
p++;
}
return 1;
}
//出栈函数
int popStack(Stack *s,Student *stu)
{
if (s->top == s->base)return 0;
*stu = *--s->top;//将出栈信息保存在stu指向的空间
return 1;
}
//检查栈中元素个数函数
int CheckStack(Stack *s)
{
if (s->top == s->base)return 0;
return s->top - s->base;
}
//测试程序:创建n个顺序栈元素
void test(Stack *s,int n)
{
Student stu;
for (int i = 0; i < n; i++)
{
printf("输入学生年龄,身高,体重\n");
scanf_s("%d%d%lf", &stu.age, &stu.height,&stu.weight);
PushStack(s,&stu);
}
}
int main()
{
//初始化栈
Stack s;
Student stu;
initStack(&s);
//测试程序:增加3个顺序栈元素
test(&s,3);
displayStack(&s);//遍历显示顺序栈
//出栈
popStack(&s,&stu);
printf("出栈后的顺序栈\n");
displayStack(&s);
printf("出栈元素\n");
displayStudent(&stu);//出栈的元素信息
//输出栈中元素个数
printf("栈中元素个数为:%d\n", CheckStack(&s));
//销毁栈
destoryStack(&s);
return 0;
}
总结:每天进步一点点,冲冲冲。