• 后进先出

笔记1_1.png
stack.h 文件

  1. #ifndef __STACK_H
  2. #define __STACK_H
  3. typedef struct {
  4. int *arr;
  5. int cap;
  6. int top;
  7. }stack_t;
  8. extern void stack_init(stack_t *stack, int cap);
  9. extern void stack_destroy(stack_t *stack);
  10. extern int stack_full(stack_t *stack);
  11. extern int stack_empty(stack_t *stack);
  12. extern int stack_push(stack_t *stack, int data);
  13. #endif

stack.c文件

  1. #include <stdlib.h>
  2. #include "stack.h"
  3. typedef struct {
  4. int *arr;
  5. int cap;
  6. int top;
  7. }stack_t;
  8. // stack_init 初始化栈
  9. void stack_init(stack_t *stack, int cap)
  10. {
  11. stack->arr = (int *)malloc(cap * sizeof(int));
  12. stack->cap = cap;
  13. stack->top = 0;
  14. }
  15. // stack_destroy 释放内存
  16. void stack_destroy(stack_t *stack)
  17. {
  18. free(stack->arr);
  19. stack->cap = 0;
  20. stack->top = 0;
  21. }
  22. // stack_full 检测栈是否已满 1 已满 0未满
  23. int stack_full(stack_t *stack)
  24. {
  25. return stack->top >= stack->cap;
  26. }
  27. // stack_empty 检测栈是否已满
  28. int stack_empty(stack_t *stack)
  29. {
  30. return !stack->top;
  31. }
  32. // stack_push 压栈, return 压栈成功 0, 失败 1
  33. int stack_push(stack_t *stack, int data)
  34. {
  35. if (stack_full(stack))
  36. return 0;
  37. stack->arr[top++] = data;
  38. return 1;
  39. }

main.c文件

  1. #include <stdio.h>
  2. #include "stack.h"
  3. // stack_pop 出栈, 出栈成功 err=0 否则 err = 1
  4. int stack_pop(stack_t *stack int *err)
  5. {
  6. if(stack_empty(stack)){
  7. *err = 1;
  8. return 0;
  9. }
  10. *err = 0;
  11. return stack->arr[--top];
  12. }

队列

  • 先进先出

单链表

  • 内存不lian

image.png

双链表

二叉树

查找算法

排序算法