数据结构练习——顺序栈实验

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;

}

总结:每天进步一点点,冲冲冲。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值