当前位置:   article > 正文

队列的顺序存储结构_队列的顺序存储结构源代码

队列的顺序存储结构源代码

1.算法原理分析如下图

2.队列的顺序存储代码

要依赖于之前的文章中的seqlist_02.h和seqlist_02.cpp 

线性表的顺序存储(业务结点和算法逻辑分离)

seqqueue.h如下:

  1. #ifndef _MY_SEQQUEUE_H_
  2. #define _MY_SEQQUEUE_H_
  3. typedef void SeqQueue;
  4. //创建队列
  5. SeqQueue* SeqQueue_Create(int capacity);
  6. //销毁 队列
  7. void SeqQueue_Destroy(SeqQueue* queue);
  8. //清空 队列
  9. void SeqQueue_Clear(SeqQueue* queue);
  10. //向队列中添加 元素
  11. int SeqQueue_Append(SeqQueue* queue, void* item);
  12. //从 队列 中 提取 元素
  13. void* SeqQueue_Retrieve(SeqQueue* queue);
  14. //求 队列 队头元素
  15. void* SeqQueue_Header(SeqQueue* queue);
  16. //队列 长度
  17. int SeqQueue_Length(SeqQueue* queue);
  18. //队列容量
  19. int SeqQueue_Capacity(SeqQueue* queue);
  20. #endif //_MY_SEQQUEUE_H_

seqqueue.cpp代码如下:

  1. #include"seqqueue.h"
  2. #include"seqlist_02.h"
  3. //队列本身是一种线性表,要使用我们之前写的线性表的顺序存储代码
  4. //创建队列
  5. SeqQueue* SeqQueue_Create(int capacity)
  6. {
  7. return SeqList_Create(10);
  8. }
  9. //销毁 队列
  10. void SeqQueue_Destroy(SeqQueue* queue)
  11. {
  12. //调用线性表的顺序存储删除就可以了
  13. SeqList_Destroy(queue);
  14. }
  15. //清空 队列
  16. void SeqQueue_Clear(SeqQueue* queue)
  17. {
  18. SeqList_Clear(queue);
  19. }
  20. //向队列中添加 元素
  21. int SeqQueue_Append(SeqQueue* queue, void* item)
  22. {
  23. //向队列中添加元素,相当于在线性表的尾部插入元素
  24. return SeqList_Insert(queue,item,SeqList_Length(queue));
  25. }
  26. //从 队列 中 提取 元素
  27. void* SeqQueue_Retrieve(SeqQueue* queue)
  28. {
  29. //相当于删除线性表的中队头元素
  30. return SeqList_Delete(queue,0);
  31. }
  32. //求 队列 队头元素
  33. void* SeqQueue_Header(SeqQueue* queue)
  34. {
  35. //相当于获取第一个元素
  36. return SeqList_Get(queue,0);
  37. }
  38. //队列 长度
  39. int SeqQueue_Length(SeqQueue* queue)
  40. {
  41. return SeqList_Length(queue);
  42. }
  43. //队列容量
  44. int SeqQueue_Capacity(SeqQueue* queue)
  45. {
  46. return SeqList_Capacity(queue);
  47. }

测试代码如下:

  1. #include"seqqueue.h"
  2. #include<iostream>
  3. using namespace std;
  4. //自己定义业务结点
  5. typedef struct tag_Student
  6. {
  7. char name[30];
  8. int age;
  9. }Student;
  10. int main(int argc, char *argv[])
  11. {
  12. //开始测试程序
  13. Student t1;
  14. Student t2;
  15. Student t3;
  16. t1.age = 41;
  17. t2.age = 42;
  18. t3.age = 43;
  19. SeqQueue *hander = NULL;
  20. hander = SeqQueue_Create(10);
  21. //追加三个元素
  22. SeqQueue_Append(hander,(void*)&t1);
  23. SeqQueue_Append(hander, (void*)&t2);
  24. SeqQueue_Append(hander, (void*)&t3);
  25. //获取元素并且打印
  26. printf("get head element[%d]\n", ((Student *)(SeqQueue_Header(hander)))->age);
  27. while (SeqQueue_Length(hander) >1)
  28. {
  29. Student*tmp = (Student*)SeqQueue_Retrieve(hander);
  30. printf("value %d\n",tmp->age);
  31. }
  32. printf("capacity is[%d]\n", SeqQueue_Capacity(hander));
  33. SeqQueue_Clear(hander);
  34. printf("length is[%d]\n", SeqQueue_Length(hander));
  35. SeqQueue_Destroy(hander);
  36. return 0;
  37. }

输出结果如下:

 

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

闽ICP备14008679号