当前位置:   article > 正文

LeetCode——详解循环队列_循环队列 leetcode

循环队列 leetcode

oj链接:力扣

一、题目详述

二、思路

实现循环队列可以用数组或者是链表,但是因为链表无法找到前一个元素,所以在进行删除时,需要遍历数据效率比较低,而数组无论时插入或者删除效率都比较高,所以我们选择数组。

2.1 数组创建结构体并且初始化

创建结构体

 初始化

2.2 检查队列

检查队列是否为空

检查队列是否已满

 2.3 插入删除元素

插入元素

 删除元素

 2.4 获取队首队尾元素

获取队首元素

 获取队尾元素

 三、代码

  1. typedef struct {
  2. int* a;//数组指针
  3. int front;
  4. int tail;
  5. int k;//队列长度
  6. } MyCircularQueue;
  7. MyCircularQueue* myCircularQueueCreate(int k) {
  8. MyCircularQueue* obj=(MyCircularQueue*)malloc(sizeof(MyCircularQueue));
  9. obj->a=(int*)malloc((k+1)*sizeof(int));
  10. obj->front=obj->tail=0;
  11. obj->k=k;
  12. return obj;
  13. }
  14. bool myCircularQueueIsEmpty(MyCircularQueue* obj) {
  15. assert(obj);
  16. return obj->front==obj->tail;
  17. }
  18. bool myCircularQueueIsFull(MyCircularQueue* obj) {
  19. assert(obj);
  20. return (obj->tail+1)%(obj->k+1)==(obj->front);
  21. }
  22. bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {
  23. assert(obj);
  24. if(myCircularQueueIsFull(obj))
  25. {
  26. return false;
  27. }
  28. obj->a[obj->tail++]=value;
  29. obj->tail%=(obj->k+1);
  30. return true;
  31. }
  32. bool myCircularQueueDeQueue(MyCircularQueue* obj) {
  33. assert(obj);
  34. if(myCircularQueueIsEmpty(obj))
  35. {
  36. return false;
  37. }
  38. obj->front++;
  39. obj->front%=(obj->k+1);
  40. return true;
  41. }
  42. int myCircularQueueFront(MyCircularQueue* obj) {
  43. assert(obj);
  44. if(myCircularQueueIsEmpty(obj))
  45. {
  46. return -1;
  47. }
  48. else
  49. {
  50. return obj->a[obj->front];
  51. }
  52. }
  53. int myCircularQueueRear(MyCircularQueue* obj) {
  54. assert(obj);
  55. if(myCircularQueueIsEmpty(obj))
  56. {
  57. return -1;
  58. }
  59. else
  60. {
  61. return obj->a[(obj->tail+obj->k)%(obj->k+1)];
  62. }
  63. }
  64. void myCircularQueueFree(MyCircularQueue* obj) {
  65. free(obj->a);
  66. free(obj);
  67. }//设计循环队列
  68. /**
  69. * Your MyCircularQueue struct will be instantiated and called as such:
  70. * MyCircularQueue* obj = myCircularQueueCreate(k);
  71. * bool param_1 = myCircularQueueEnQueue(obj, value);
  72. * bool param_2 = myCircularQueueDeQueue(obj);
  73. * int param_3 = myCircularQueueFront(obj);
  74. * int param_4 = myCircularQueueRear(obj);
  75. * bool param_5 = myCircularQueueIsEmpty(obj);
  76. * bool param_6 = myCircularQueueIsFull(obj);
  77. * myCircularQueueFree(obj);
  78. */
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/590123
推荐阅读
相关标签
  

闽ICP备14008679号