当前位置:   article > 正文

c语言实现队列的顺序存储结构_c语言清空队列

c语言清空队列

       主要通过对顺序表两端的元素进行操作(队头队尾)来实现队列先进先出的功能。

      SeqQueue.h

  1. #pragma once
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #define MAX_SIZE 1024
  5. typedef struct SEQQUEUE
  6. {
  7. void* data[MAX_SIZE];//宏(最大个数)作为数组的元素个数
  8. int size;
  9. }SeqQueue;
  10. //初始化队列
  11. SeqQueue* Init_SeqQueue();
  12. //入队
  13. void Push_SeqQueue(SeqQueue* queue, void* data);
  14. //返回队头元素
  15. void* Front_SeqQueue(SeqQueue* queue);
  16. //出队
  17. void Pop_SeqQueue(SeqQueue* queue);
  18. //返回队尾元素
  19. void* Back_SeqQueue(SeqQueue* queue);
  20. //返回大小
  21. int Size_SeqQueue(SeqQueue* queue);
  22. //清空队列
  23. void Clear_SeqQueue(SeqQueue* queue);
  24. //销毁队列
  25. void FreeSpace_SeqQueue(SeqQueue* queue);

SeqQueue.c

  1. #include"SeqQueue.h"
  2. //初始化队列
  3. SeqQueue* Init_SeqQueue()
  4. {
  5. SeqQueue* queue = (SeqQueue*)malloc(sizeof(SeqQueue));
  6. for (int i = 0; i < MAX_SIZE; i++)
  7. {
  8. queue->data[i] = NULL;
  9. }
  10. queue->size = 0;
  11. return queue;//别忘了返回!
  12. }
  13. //入队
  14. void Push_SeqQueue(SeqQueue* queue, void* data)
  15. {
  16. if (queue == NULL || data ==NULL)
  17. {
  18. return;
  19. }
  20. if (queue->size == MAX_SIZE)
  21. {
  22. return;
  23. }
  24. //数组的左边当作队头
  25. queue->data[queue->size] = data;
  26. queue->size++;
  27. }
  28. //返回队头元素
  29. void* Front_SeqQueue(SeqQueue* queue)
  30. {
  31. if (queue == NULL || queue->size == 0)
  32. {
  33. return NULL;
  34. }
  35. return queue->data[0];
  36. }
  37. //出队
  38. void Pop_SeqQueue(SeqQueue* queue)
  39. {
  40. if (queue == NULL|| queue->size==0)
  41. {
  42. return;
  43. }
  44. for (int i = 0; i < queue->size; i++)
  45. {
  46. queue->data[i] = queue->data[i + 1];
  47. }
  48. queue->size--;
  49. }
  50. //返回队尾元素
  51. void* Back_SeqQueue(SeqQueue* queue)
  52. {
  53. if (queue == NULL || queue->size==0)
  54. {
  55. return NULL;
  56. }
  57. return queue->data[queue->size-1];
  58. }
  59. //返回大小
  60. int Size_SeqQueue(SeqQueue* queue)
  61. {
  62. if (queue == NULL)
  63. {
  64. return -1;
  65. }
  66. return queue->size;
  67. }
  68. //清空队列
  69. void Clear_SeqQueue(SeqQueue* queue)
  70. {
  71. if (queue == NULL)
  72. {
  73. return;
  74. }
  75. for (int i = 0; i < queue->size; i++)
  76. {
  77. queue->data[i] =NULL;
  78. }
  79. queue->size = 0;
  80. }
  81. //销毁队列
  82. void FreeSpace_SeqQueue(SeqQueue* queue)
  83. {
  84. if (queue == NULL)
  85. {
  86. return;
  87. }
  88. free(queue);
  89. }

队列的顺序存储结构.c

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<string.h>
  5. #include "SeqQueue.h"
  6. typedef struct PERSON
  7. {
  8. char name[64];
  9. int age;
  10. }Person;
  11. int main()
  12. {
  13. //创建顺序队列
  14. SeqQueue* queue = Init_SeqQueue();
  15. //创建数据
  16. Person p1 = { "aaa",10 };
  17. Person p2 = { "bbb",20 };
  18. Person p3 = { "ccc",30 };
  19. Person p4 = { "ddd",40 };
  20. Person p5 = { "eee",50 };
  21. //入队
  22. Push_SeqQueue(queue, &p1);
  23. Push_SeqQueue(queue, &p2);
  24. Push_SeqQueue(queue, &p3);
  25. Push_SeqQueue(queue, &p4);
  26. Push_SeqQueue(queue, &p5);
  27. //输出队尾元素
  28. Person* backPerson = (Person*)Back_SeqQueue(queue);
  29. printf("name:%s,age:%d\n", backPerson->name, backPerson->age);
  30. printf("-----------------\n");
  31. //返回队头元素并打印
  32. while (Size_SeqQueue(queue) > 0)
  33. {
  34. Person* p = (Person*)Front_SeqQueue(queue);
  35. printf("name:%s,age:%d\n", p->name, p->age);
  36. //出队
  37. Pop_SeqQueue(queue);
  38. }
  39. //销毁队列
  40. FreeSpace_SeqQueue(queue);
  41. system("pause");
  42. return 0;
  43. }

测试结果:

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

闽ICP备14008679号