栈的顺序存储

柔光的暖阳◎ 2022-04-16 02:07 311阅读 0赞

栈的原理

  • 先进后出,不能随机访问,只有讲上面的数据Pop之后,才能访问下面的数据
    在这里插入图片描述

代码

stack.h

  1. #ifndef __STACK_H
  2. #define __STACK_H
  3. #define MAX_SIZE 1024
  4. typedef struct STACK
  5. {
  6. void* Stack_Sqe[MAX_SIZE];
  7. int size;
  8. }Stack;
  9. Stack* Init_Stack(void);
  10. void Push_Stack(Stack* stack, void* data);
  11. void Pop_Stack(Stack* stack);
  12. void* Top_Stack(Stack* stack);
  13. void Clear_Stack(Stack* stack);
  14. void Free_Stack(Stack* stack);
  15. int Size_Stack(Stack* stack);
  16. #endif

stack.c

  1. #include "../include/stack.h"
  2. #include <stdlib.h>
  3. Stack* Init_Stack(void)
  4. {
  5. Stack* stack = (Stack*)malloc(sizeof(Stack));
  6. stack->size =0;
  7. for(int i=0; i<MAX_SIZE; i++)
  8. {
  9. stack->Stack_Sqe[i]=NULL;
  10. }
  11. return stack;
  12. }
  13. void Push_Stack(Stack* stack, void* data)
  14. {
  15. if(stack == NULL) return;
  16. if(data == NULL) return;
  17. stack->Stack_Sqe[stack->size++] = data;
  18. }
  19. void Pop_Stack(Stack* stack)
  20. {
  21. if(stack == NULL) return;
  22. stack->Stack_Sqe[stack->size-1]=NULL;
  23. stack->size--;
  24. }
  25. void* Top_Stack(Stack* stack)
  26. {
  27. if(stack == NULL)return NULL;
  28. return stack->Stack_Sqe[stack->size-1];
  29. }
  30. void Clear_Stack(Stack* stack)
  31. {
  32. if(stack == NULL)return;
  33. for(int i=0; i<stack->size; i++)
  34. {
  35. stack->Stack_Sqe[i]=NULL;
  36. }
  37. }
  38. void Free_Stack(Stack* stack)
  39. {
  40. if(stack == NULL)
  41. return;
  42. free(stack);
  43. }
  44. int Size_Stack(Stack* stack)
  45. {
  46. return stack->size;
  47. }

main.c

  1. #include <stdio.h>
  2. #include "../include/stack.h"
  3. typedef struct PERSION
  4. {
  5. char name [64];
  6. int id;
  7. }Person;
  8. int main(void)
  9. {
  10. Stack* stack = Init_Stack();
  11. Person p1={ "julain",1};
  12. Person p2={ "kerr",2};
  13. Person p3={ "mike",3};
  14. Person p4={ "july",4};
  15. Push_Stack(stack,&p1);
  16. printf("Push %s %d\n",p1.name,p1.id);
  17. Push_Stack(stack,&p2);
  18. printf("Push %s %d\n",p2.name,p2.id);
  19. Push_Stack(stack,&p3);
  20. printf("Push %s %d\n",p3.name,p3.id);
  21. Push_Stack(stack,&p4);
  22. printf("Push %s %d\n",p4.name,p4.id);
  23. printf("stack size: %d \n\n",stack->size);
  24. printf("开始Pop\n");
  25. while(stack->size)
  26. {
  27. Person* p =(Person*) Top_Stack(stack);
  28. printf("%s %d\n",p->name,p->id);
  29. Pop_Stack(stack);
  30. }
  31. printf("after pop 4 times size: %d \n\n",stack->size);
  32. Free_Stack(stack);
  33. return 0;
  34. }
  • 结果:
    在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,311人围观)

还没有评论,来说两句吧...

相关阅读

    相关 顺序存储

    想起童年最喜欢做的事就是弹溜溜,经常和小伙伴们玩输赢的,你赢了给你,你输了给我,也喜欢把溜溜放进饮料瓶里,用清水进行清洗,但是每次将第一个溜溜放进瓶子里,但洗完后,往往最后一个