当前位置:   article > 正文

队列——顺序存储与链式存储_queue 是顺序存储还是链式存储

queue 是顺序存储还是链式存储

顺序存储:

  1. #include <iostream>
  2. #include <cstdlib>
  3. using namespace std;
  4. const int MAXSIZE=105;
  5. typedef struct Queue
  6. {
  7. int data[MAXSIZE];
  8. int front,rear;
  9. }SqQueue;
  10. int Push(SqQueue *Q,int e)
  11. {
  12. if((Q->rear+1)%MAXSIZE==Q->front)
  13. return 0;
  14. Q->data[Q->rear]=e;
  15. Q->rear=(Q->rear+1)%MAXSIZE;
  16. return 1;
  17. }
  18. int Pop(SqQueue *Q)
  19. {
  20. if(Q->front == Q->rear)
  21. return 0;
  22. cout<<Q->data[Q->front]<<endl;
  23. Q->front=(Q->front+1)%MAXSIZE;
  24. return 1;
  25. }
  26. int main()
  27. {
  28. int n,e;
  29. cin>>n;
  30. SqQueue *Q=(Queue*)malloc(sizeof(Queue));//必须开辟空间
  31. Q->front=0;
  32. Q->rear=0;
  33. for(int i=0;i<n;i++)
  34. {
  35. cin>>e;
  36. Push(Q,e);
  37. }
  38. for(int i=0;i<n;i++)
  39. Pop(Q);
  40. return 0;
  41. }

链式存储:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. using namespace std;
  5. typedef struct QNode
  6. {
  7. int data;
  8. struct QNode *next;
  9. } QNode,*QueuePtr;
  10. typedef struct LinkQueue
  11. {
  12. QueuePtr front,rear;
  13. } LinkQueue;
  14. //入队
  15. void Push(LinkQueue *Q,int e)
  16. {
  17. QueuePtr q=(QueuePtr)malloc(sizeof(QNode));
  18. q->data=e;
  19. q->next=NULL;
  20. Q->rear->next=q;
  21. Q->rear=q;
  22. return ;
  23. }
  24. //出队
  25. int Pop(LinkQueue *Q)
  26. {
  27. QueuePtr p;
  28. if(Q->rear==Q->front)
  29. return 0;
  30. p=Q->front->next;//将准备删除的节点付给p
  31. cout<<p->data<<endl;
  32. Q->front->next=p->next;//指向删除节点的下一个节点
  33. if(p==Q->rear)//若队头是队尾
  34. Q->rear=Q->front;
  35. free(p);
  36. return 1;
  37. }
  38. void print_Queue(LinkQueue *q)
  39. {
  40. if(q->front == q->rear)
  41. return;
  42. QueuePtr temp = q->front->next;
  43. while(temp != q->rear)
  44. {
  45. printf("%d ", temp->data);
  46. temp = temp->next;
  47. }
  48. printf("%d", temp->data);
  49. printf("\n");
  50. }
  51. void init_Queue(LinkQueue *q)//初始化操作,定义一个头结点
  52. {
  53. q->front = q->rear = (QNode *)malloc(sizeof(QNode));
  54. q->front->next = NULL;
  55. }
  56. int main()
  57. {
  58. int x,n;
  59. cin>>n;
  60. LinkQueue *Q=(LinkQueue *)malloc(sizeof(LinkQueue));
  61. init_Queue(Q);
  62. for(int i=0; i<n; ++i)
  63. {
  64. cin>>x;
  65. Push(Q,x);
  66. }
  67. print_Queue(Q);
  68. while(n--)
  69. Pop(Q);
  70. return 0;
  71. }


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

闽ICP备14008679号