⭕接口5:出队列(QueuePop)
🥰请看代码与注释👇
//出队列 void QueuePop(Queue* pq) { assert(pq); assert(!QueueEmpty(pq)); //1、一个节点 if (pq->phead->next == NULL) { free(pq->phead); pq->phead = pq->ptail = NULL; } //2、多个节点 else { //头删 QNode* next = pq->phead->next; free(pq->phead); pq->phead = next; } pq->size--; }
⭕接口6:取队头数据(QueueFront)
🥰请看代码与注释👇
//获取队头数据 QDataType QueueFront(Queue* pq) { assert(pq); assert(!QueueEmpty(pq)); return pq->phead->data; }
⭕接口7:取队尾数据(QueueBack)
🥰请看代码与注释👇
//获取队尾数据 QDataType QueueBack(Queue* pq) { assert(pq); assert(!QueueEmpty(pq)); return pq->ptail->data; }
⭕接口8:获取队列大小(QueueSize)
🥰请看代码与注释👇
//获取队列大小 int QueueSize(Queue* pq) { assert(pq); assert(!QueueEmpty(pq)); return pq->size; }
⭕接口9:判空(QueueEmpty)
🥰请看代码与注释👇
//判空 bool QueueEmpty(Queue* pq) { assert(pq); //return pq->phead == NULL && pq->ptail == NULL; return pq->size == 0; }
🐸四、完整代码
🥝Queue.h
#pragma once #include<stdio.h> #include<stdlib.h> #include<assert.h> #include<stdbool.h> typedef int QDataType; //队列链表每个节点 typedef struct QueueNode { struct QueueNode* next; QDataType data; }QNode; //整个队列链表 typedef struct Queue { QNode* phead; QNode* ptail; int size; }Queue; //初始化 void QueueInit(Queue* pq); //销毁 void QueueDestroy(Queue* pq); //入队列 void QueuePush(Queue* pq, QDataType x); //出队列 void QueuePop(Queue* pq); //获取队头数据 QDataType QueueFront(Queue* pq); //获取队尾数据 QDataType QueueBack(Queue* pq); //获取队列大小 int QueueSize(Queue* pq); //判空 bool QueueEmpty(Queue* pq);
🥝Queue.c
#include"Queue.h" //初始化 void QueueInit(Queue* pq) { assert(pq); pq->phead = NULL; pq->ptail = NULL; pq->size = 0; } //销毁 void QueueDestroy(Queue* pq) { assert(pq); QNode* cur = pq->phead; while (cur) { QNode* next = cur->next; free(cur); cur = next; } pq->phead = pq->ptail = NULL; pq->size = 0; } //入队列 void QueuePush(Queue* pq, QDataType x) { assert(pq); QNode* newnode = (QNode*)malloc(sizeof(QNode)); if (newnode == NULL) { perror("malloc fail\n"); return; } newnode->data = x; newnode->next = NULL; if (pq->ptail == NULL) { assert(pq->phead == NULL); pq->phead = pq->ptail = newnode; } else { pq->ptail->next = newnode; pq->ptail = newnode; } pq->size++; } //出队列 void QueuePop(Queue* pq) { assert(pq); assert(!QueueEmpty(pq)); //1、一个节点 if (pq->phead->next == NULL) { free(pq->phead); pq->phead = pq->ptail = NULL; } //2、多个节点 else { //头删 QNode* next = pq->phead->next; free(pq->phead); pq->phead = next; } pq->size--; } //获取队头数据 QDataType QueueFront(Queue* pq) { assert(pq); assert(!QueueEmpty(pq)); return pq->phead->data; } //获取队尾数据 QDataType QueueBack(Queue* pq) { assert(pq); assert(!QueueEmpty(pq)); return pq->ptail->data; } //获取队列大小 int QueueSize(Queue* pq) { assert(pq); assert(!QueueEmpty(pq)); return pq->size; } //判空 bool QueueEmpty(Queue* pq) { assert(pq); //return pq->phead == NULL && pq->ptail == NULL; return pq->size == 0; }
🥝Test.c
#include"Queue.h" //入队列测试 void TestQueue1() { Queue q; QueueInit(&q); QueuePush(&q, 1); QueuePush(&q, 2); QueuePush(&q, 3); QueuePush(&q, 4); while (!QueueEmpty(&q)) { printf("%d ", QueueFront(&q)); QueuePop(&q); } printf("\n"); QueueDestroy(&q); } //测试 void TestQueue2() { Queue q; QueueInit(&q); QueuePush(&q, 1); QueuePush(&q, 2); printf("Size:%d\n", QueueSize(&q)); while (!QueueEmpty(&q)) { printf("%d ", QueueFront(&q)); QueuePop(&q); } printf("\n"); QueueDestroy(&q); } int main() { //TestQueue1(); //TestQueue2(); return 0; }
🥰这期内容相对比较简单,希望烙铁们可以理解消化哦!
总结🥰
以上就是 【数据结构】队列—C语言版 的全部内容啦🥳🥳🥳🥳
本文章所在【数据结构与算法】专栏,感兴趣的烙铁可以订阅本专栏哦🥳🥳🥳
前途很远,也很暗,但是不要怕,不怕的人面前才有路。💕💕💕
小的会继续学习,继续努力带来更好的作品😊😊😊
创作写文不易,还多请各位大佬uu们多多支持哦🥰🥰🥰