队列操作 出队与入队

来源:互联网 发布:dota2数据分析师 编辑:程序博客网 时间:2024/04/29 18:48
  1. #include<stdio.h>  
  2. #include<stdlib.h>  
  3. typedef struct QNode  
  4. {   //构造结点类型  
  5.     int data;  
  6.     struct QNode *next;  
  7. }*QueuePtr;  
  8. typedef struct   
  9. {   QueuePtr front;  
  10.     QueuePtr rear;  
  11. }LinkQueue;  
  12. void CreateQueue(LinkQueue &Q);//创建队列  
  13. void EnQueue(LinkQueue &Q,int e);//插入元素进队  
  14. void DeQueue(LinkQueue &Q);//删除队头元素  
  15. void PrintfQueue(LinkQueue &Q);//输出队列  
  16. void DestroyQueue(LinkQueue &Q);//销毁队列  
  17. void main()  
  18. {   LinkQueue Qa;  
  19.     int m,n;  
  20.     CreateQueue(Qa);  
  21.     printf("Please input the total of inserting number:\n");  
  22.     scanf("%d",&m);  
  23.     while(m--)  
  24.     {   printf("Please input a number to insert:");  
  25.         scanf("%d",&n);  
  26.         EnQueue(Qa,n);  
  27.     }  
  28.     PrintfQueue(Qa);  
  29.     DeQueue(Qa);  
  30.     PrintfQueue(Qa);  
  31.     DestroyQueue(Qa);  
  32. }  
  33. void CreateQueue(LinkQueue &Q)  
  34. {   Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));  
  35.     if(!Q.front)  
  36.     {   printf("Fail to create queue!\n");  
  37.         return;  
  38.     }  
  39.     Q.front->next=NULL;  
  40.     printf("Success to create queue!\n");  
  41. }  
  42. void EnQueue(LinkQueue &Q,int e)  
  43. {   QueuePtr p;  
  44.     if(!(p=(QueuePtr)malloc(sizeof(QNode))))  
  45.     {   printf("Fail to insert element!\n");  
  46.         return;  
  47.     }  
  48.     p->data=e;  
  49.     p->next=NULL;  
  50.     Q.rear->next=p;  
  51.     Q.rear=p;  
  52.     printf("Success to insert element:%d\n",e);  
  53. }  
  54. void DeQueue(LinkQueue &Q)  
  55. {   QueuePtr q;  
  56.     int x;  
  57.     if(Q.rear==Q.front)  
  58.     {   printf("the queue is empty!\n");  
  59.         return;  
  60.     }  
  61.     q=Q.front->next;  
  62.     x=q->data;  
  63.     Q.front->next=q->next;  
  64.     if(Q.rear==q)  
  65.         Q.rear=Q.front;  
  66.     free(q);  
  67.     printf("Success to delete element:%d\n",x);  
  68. }  
  69. void DestroyQueue(LinkQueue &Q)  
  70. {   while(Q.front)  
  71.     {   Q.rear=Q.front->next;  
  72.         free(Q.front);  
  73.         Q.front=Q.rear;  
  74.     }  
  75.     printf("Success to destroy queue!\n");  
  76. }  
  77. void PrintfQueue(LinkQueue &Q)  
  78. {   QueuePtr p;  
  79.     if(Q.rear==Q.front)  
  80.     {   printf("The queue is empty!\n");  
  81.         return;  
  82.     }  
  83.     printf("The queue is:");  
  84.     p=Q.front->next;  
  85.     while(p)  
  86.     {   printf("%d",p->data);  
  87.             p=p->next;  
  88.     }  
  89.     printf("\n");  
  90. }  
原创粉丝点击