队列操作

个人根据网上的一些例子,学习自己敲下的代码。


转载自网络:

c实现队列的基本操作

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3.   
  4. typedef int elemType;  
  5. /**************************/  
  6. /*           */  
  7. /**************************/  
  8. typedef struct nodet   
  9. {  
  10.     elemType data;  
  11.     struct nodet * next;  
  12. } node_t;            // 节点的结构  
  13.   
  14. typedef struct queuet  
  15. {  
  16.     node_t * head;  
  17.     node_t * tail;  
  18. } queue_t;          // 队列的结构  
  19.   
  20. /*1. 初始化链队列*/  
  21. // 其  初始化的 操作就是初始化队列的<span style="background-color: rgb(255, 102, 102);">队头和队尾的两个标志位,</span>  
  1. // 所以就有删除或是插入的时候,会判断有没有 队列为空的时候。  
  2. void initQueue(queue_t * queue_eg)  
  3. {  
  4.     queue_eg->head = NULL; //队头标志位  
  5.     queue_eg->tail = NULL; //队尾标志位  
  6. }  
  7.   
  8. /*2.向链队的<span style="background-color: rgb(255, 102, 102);">队尾插入</span>一个元素x*/  
  9. void enQueue(queue_t *hq, elemType x)  
  10. {  
  11.     node_t * new_p;  
  12.     new_p = (node_t *)malloc(sizeof(queue_t));  
  13.     if (new_p == NULL )  
  14.     {  
  15.         printf("分配空间出错!");  
  16.         exit(1);  
  17.     }  
  18.     new_p->data = x;  
  19.     new_p->next = NULL;  
  20.     if (hq->head == NULL)  
  21.     {  
  22.         hq->head = new_p;  
  23.         hq->tail = new_p;  
  24.     } else {  
  25.         //hq->tail->data = x;  
  26.         hq->tail->next = new_p;  
  27.         hq->tail = new_p;  
  28.     }  
  29.     return;  
  30. }  
  31.   
  32. /*3. 从列队中<span style="background-color: rgb(255, 153, 102);">队首删除</span>一个元素*/  
  33. elemType outQueue(queue_t * hq)  
  34. {  
  35.     node_t * p;  
  36.     elemType temp;  
  37.     if (hq->head == NULL)  
  38.     {  
  39.         printf("队列为空,不能删除!");  
  40.         exit(1);  
  41.     }  
  42.     temp = hq->head->data;  
  43.     p = hq->head;  
  44.     hq->head = hq->head->next;  
  45.     if(hq->head == NULL)  
  46.     {  
  47.         hq->tail = NULL;  
  48.     }  
  49.     free(p);  
  50.     return temp;  
  51. }  
  52.   
  53. /*4. 读取队首元素 */  
  54. elemType peekQueue(queue_t * hq)  
  55. {  
  56.     if (hq->head == NULL)  
  57.     {  
  58.         printf("队列为空。");  
  59.         exit(1);  
  60.     }   
  61.     return hq->head->data;  
  62. }  
  63.   
  64. /*5. 检查队列是否为空,若是空返回1,若不为空返回0 。*/  
  65. int is_emptyQueue(queue_t * hq)  
  66. {  
  67.     if (hq->head == NULL)  
  68.     {  
  69.         return 1;  
  70.     } else {  
  71.         return 0;  
  72.     }  
  73. }  
  74.   
  75. /*6. 清除链队中的所有元素*/  
  76.   
  77. void clearQueue(queue_t * hq)  
  78. {  
  79.     node_t * p = hq->head;  
  80.     while(p != NULL)  
  81.     {  
  82.         hq->head = hq->head->next;  
  83.         free(p);  
  84.         p = hq->head;  
  85.     }  
  86.     hq->tail = NULL;  
  87.     return;  
  88. }  
  89.   
  90. /*main()函数*/  
  91. int main(int argc, char* argv[])  
  92. {  
  93.     queue_t q;  
  94.     int a[8] = {1, 2, 3, 4, 5, 6, 7, 8};  
  95.     int i;  
  96.     initQueue(&q);  
  97.     for(i=0; i<8; i++)  
  98.     {  
  99.         enQueue(&q, a[i]);  
  100.     }  
  101.     //printf("%d",outQueue(&q));  
  102.   
  103.     enQueue(&q, 68);  
  104.     //printf("%d", peekQueue(&q));  
  105.       
  106.     while (!is_emptyQueue(&q))  
  107.     {  
  108.         printf("%d.\n", outQueue(&q));  
  109.     }  
  110.   
  111.     printf(" \n");  
  112.     clearQueue(&q);  
  113.     system("pause");  
  114.     system("pause");  
  115.     system("pause");  
  116. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值