当前位置:   article > 正文

数据结构之链式队列_链式队列时间复杂度

链式队列时间复杂度

我们实现了顺序队列,包括优化,现在我们再来学习下链式队列。

注:这里还是要包含前面我们实现的链式链表的头文件和实现文件。

第十个例子,链式队列的实现:

头文件

  1. #ifndef _LINKQUEUE_H_
  2. #define _LINKQUEUE_H_
  3. typedef void LinkQueue;
  4. LinkQueue* LinkQueue_Create();
  5. void LinkQueue_Destroy(LinkQueue* queue);
  6. void LinkQueue_Clear(LinkQueue* queue);
  7. int LinkQueue_Length(LinkQueue* queue);
  8. int LinkQueue_Append(LinkQueue* queue, void* item);
  9. void* LinkQueue_Retrieve(LinkQueue* queue);
  10. void* LinkQueue_Header(LinkQueue* queue);
  11. #endif

我个人有点小小的强迫症,代码尽量要求简洁,所以没有注释,有什么不明白的可以留言。

实现文件

  1. #include "LinkList.h"
  2. #include "LinkQueue.h"
  3. #include <stdio.h>
  4. #include <malloc.h>
  5. typedef struct tag_LinkQueueNode
  6. {
  7. LinkListNode header;
  8. void* item;
  9. }TLinkQueueNode;
  10. LinkQueue* LinkQueue_Create()
  11. {
  12. return LinkList_Create();
  13. }
  14. void LinkQueue_Destroy(LinkQueue* queue)
  15. {
  16. LinkQueue_Clear(queue);
  17. LinkList_Destroy(queue);
  18. }
  19. void LinkQueue_Clear(LinkQueue* queue)
  20. {
  21. while (LinkQueue_Length(queue) > 0)
  22. {
  23. LinkQueue_Retrieve(queue);
  24. }
  25. }
  26. int LinkQueue_Length(LinkQueue* queue)
  27. {
  28. return LinkList_Length(queue);
  29. }
  30. int LinkQueue_Append(LinkQueue* queue, void* item)
  31. {
  32. TLinkQueueNode* node = (TLinkQueueNode*)malloc(sizeof(TLinkQueueNode));
  33. int ret = (node != NULL) && (item != NULL);
  34. if (ret)
  35. {
  36. node->item = item;
  37. ret = LinkList_Insert(queue, (LinkListNode*)node, LinkList_Length(queue));
  38. }
  39. else
  40. {
  41. free(node);
  42. }
  43. return ret;
  44. }
  45. void* LinkQueue_Retrieve(LinkQueue* queue)
  46. {
  47. TLinkQueueNode* node = (TLinkQueueNode*)LinkList_Delete(queue, 0);
  48. void* ret = NULL;
  49. if (node != NULL)
  50. {
  51. ret = node->item;
  52. free(node);
  53. }
  54. return ret;
  55. }
  56. void* LinkQueue_Header(LinkQueue* queue)
  57. {
  58. TLinkQueueNode* node = (TLinkQueueNode*)LinkList_Get(queue, 0);
  59. void* ret = NULL;
  60. if (node != NULL)
  61. {
  62. ret = node->item;
  63. }
  64. return ret;
  65. }
是不是跟前面的链式栈很类似!!!
测试文件

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "LinkQueue.h"
  4. int main(int argc, char *argv[])
  5. {
  6. LinkQueue* queue = LinkQueue_Create();
  7. int a[10] = {0};
  8. int i = 0;
  9. for (i = 0; i < 10; i++)
  10. {
  11. a[i] = i + 1;
  12. LinkQueue_Append(queue, a + i);
  13. }
  14. printf("length:%d\n", LinkQueue_Length(queue));
  15. printf("header:%d\n", *((int*)LinkQueue_Header(queue)));
  16. while (LinkQueue_Length(queue) > 0)
  17. {
  18. printf("retrieve:%d\n", *((int*)LinkQueue_Retrieve(queue)));
  19. }
  20. LinkQueue_Clear(queue);
  21. LinkQueue_Destroy(queue);
  22. system("PAUSE");
  23. return 0;
  24. }
好了,链式队列实现完毕,看过前面顺序队列的应该知道,这里面还是涉及到时间复杂度问题,

所以下一篇文章我会实现一个优化版的链式队列。

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

闽ICP备14008679号