欢迎来到
银狐的个人博客

队列的基本操作(C语言)

一 . 队列的含义 以及 应用: 1.含义:队列(queue)是在表的一端进行插入操作,另一端进行删除操作的线性表

2.数据进出顺序为:先进先出,和日常排队打饭一样,先排队的先打饭离开。

二. 队列的存储结构的选择: 1.队列的基本操作(C语言) 第1张图片-银狐博客数组:选用数组来做栈的存储结构,因为要在两端都进行操作,所以避免不了挪动数据的这个弊端;

2.单链表:使用单链表时,先来考虑下,是头插尾删,还是头删尾插 ,使用头插尾删时,每次入队时都得改变头指针的指向,比较麻烦,因此采用头删尾插;

3.因此:综合分析采用 单链表的头删尾插 比较合适。

三. 代码实现

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdbool.h>#include<assert.h>typedef int DataType;typedef struct Node{DataType data;struct Node *next;}QNode;typedef struct Queue{QNode *head;QNode *tail;}Queue;void QueueInit(Queue *pq)//初始化{assert(pq);pq->head = NULL;pq->tail = NULL;}void QueueDestory(Queue *pq)//销毁{assert(pq);QNode *val = pq->head;while (pq->head != NULL){pq->head->next;free(val);}}void QueuePush(Queue *pq, int x)//入队{assert(pq);if (pq->head == NULL){QNode *NewNode = (QNode *)malloc(sizeof(QNode));NewNo队列的基本操作(C语言) 第2张图片-银狐博客de->data = x;NewNode->next = NULL;pq->head = NewNode;pq->tail = NewNode;}else{QNode *NewNode = (QNode *)malloc(sizeof(QNode));NewNode->data = x;NewNode->next = NULL;pq->tail->next = NewNode;pq->tail = NewNode;}}void QueuePop(Queue *pq)//出队{assert(pq);QNode *val = pq->head;if (pq->head == pq->tail){pq->head = NULL;pq->head = NULL;free(val);}else{pq->head = pq->head->next;free(val);}}DataType QueueHead(Queue *pq)//取队头元素{assert(pq);assert(pq->head);return pq->head->data;}bool QueueEmpty(Queue *pq)//检测队列是否为空{assert(pq);return pq->head !=NULL;}DataType QueueSize(Queue *pq)//计算队列中元素个数{assert(pq);QNode *val = pq->head;int size = 0;while(val){size++;val=val->next;}return size;}int main(){Queue q;QueueInit(&q);QueuePush(&q, 1);QueuePush(&q, 2);QueuePush(&q, 3);printf("队列中%d个元素\\n",QueueSize(&q));printf("元素%d出队\\n", QueueHead(&q));QueuePop(&q);printf("队列中%d个元素\\n",QueueSize(&q));printf("元素%d出队\\n", QueueHead(&q));QueuePop(&q);printf("队列中%d个元素\\n",QueueSize(&q));QueuePush(&q, 4);QueuePush(&q, 5);while (QueueEmpty(&q)){printf("元素%d出队\\n", QueueHead(&q));QueuePop(&q);}QueueDestory(&q);printf("队列中%d个元素\\n", QueueSize(&q));return 0;}
赞(0) 打赏
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《队列的基本操作(C语言)》
文章链接:https://www.yinhu3.com/1918.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
如果文章侵犯到你的权益,请查看本站免责声明:《免责声明》

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

愿意请我喝杯矿泉水吗

支付宝扫一扫打赏