当前位置:   article > 正文

数据结构初阶之栈(C语言实现)_数据结构初级阶段-c语言实现

数据结构初级阶段-c语言实现

今天更新栈

栈其实还蛮简单的,接口函数的实现也主要用的都是前面学过的知识,顺序表那块。

至于什么是栈,看一下百度定义就好,本文重点实现接口函数

栈(计算机术语)_百度百科

  1. #pragma once
  2. #include <stdio.h>
  3. #include <assert.h>
  4. #include <stdlib.h>
  5. #include <stdbool.h>
  6. //#define N 10
  7. //typedef int STDataType;
  8. //typedef struct Stack
  9. //{
  10. // STDataType a[N];
  11. // int top;
  12. //}ST;
  13. //我们不使用静态的栈
  14. typedef int STDataType;
  15. typedef struct Stack
  16. {
  17. STDataType* a;
  18. int top;
  19. int capacity;
  20. }ST;//栈的元素定义
  21. void StackInit(ST* ps);//初始化
  22. void StackDestroy(ST* ps);//销毁栈
  23. void StackPush(ST* ps, STDataType x);//入栈
  24. void StackPop(ST* ps);//出栈
  25. STDataType StackTop(ST* ps);//取栈顶元素
  26. bool StackEmpty(ST* ps);//判断栈是否为空
  27. int StackSize(ST* ps);//栈的大小

1.初始化

  1. void StackInit(ST* ps)
  2. {
  3. assert(ps);
  4. ps->a = NULL;
  5. ps->top = ps->capacity = 0;
  6. }

2.销毁列表 

  1. void StackDestroy(ST* ps)
  2. {
  3. assert(ps);
  4. free(ps->a);
  5. ps->a = NULL;
  6. ps->top = ps->capacity = 0;
  7. }

 3.入栈

  1. void StackPush(ST* ps, STDataType x)
  2. {
  3. //判断容量,不够增容
  4. assert(ps);
  5. if (ps->top == ps->capacity)
  6. {
  7. int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
  8. STDataType* tmp = (STDataType*)realloc(ps->a, sizeof(STDataType*) * newcapacity);
  9. if (tmp == NULL)
  10. {
  11. printf("realloc fail");
  12. exit(-1);
  13. }
  14. ps->a = tmp;
  15. ps->capacity = newcapacity;
  16. }
  17. //插入
  18. ps->a[ps->top] = x;
  19. ps->top++;
  20. }

4.出栈 

  1. void StackPop(ST* ps)
  2. {
  3. assert(ps);
  4. assert(!StackEmpty(ps));
  5. ps->top--;
  6. }

 5.取栈顶元素

  1. STDataType StackTop(ST* ps)
  2. {
  3. assert(ps);
  4. assert(!StackEmpty(ps));
  5. return ps->a[ps->top--];
  6. }

 6.返回栈元素个数

  1. int StackSize(ST* ps)
  2. {
  3. assert(ps);
  4. return ps->top;
  5. }

 7.判空

  1. bool StackEmpty(ST* ps)
  2. {
  3. assert(ps);
  4. return ps->top == 0;
  5. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/438070
推荐阅读
相关标签
  

闽ICP备14008679号