C语言实现队列相关操作(初始化、入队列、出队列、获取队头及队尾元素、获取队列中有效元素个数、判空、销毁) 您所在的位置:网站首页 队列c语言题目 C语言实现队列相关操作(初始化、入队列、出队列、获取队头及队尾元素、获取队列中有效元素个数、判空、销毁)

C语言实现队列相关操作(初始化、入队列、出队列、获取队头及队尾元素、获取队列中有效元素个数、判空、销毁)

2023-10-19 15:41| 来源: 网络整理| 查看: 265

今天给小伙伴们送上数据结构中队列的相关操作实现的代码,希望对需要的小伙伴们有所帮助,但是千万不要只是“拿来主义”,一定要进行思考后自己亲自动手写代码,这样自己的代码能力才能有所进步!最后还是那句话:“我在谢顶的路上一路狂奔,哈哈哈哈!”

C语言实现队列相关操作: 1.初始化 2.入队列 3.出队列 4.获取队头及队尾元素 5.获取队列中有效元素个数 6.判空 7.销毁

.h文件中的代码如下:

typedef int QDataType; // 链式结构:表示队列 typedef struct QListNode { struct QListNode* _next; QDataType _data; }QNode; // 队列的结构 typedef struct Queue { QNode* _front; QNode* _rear; }Queue; // 初始化队列 void QueueInit(Queue* q); // 队尾入队列 void QueuePush(Queue* q, QDataType data); // 队头出队列 void QueuePop(Queue* q); // 获取队列头部元素 QDataType QueueFront(Queue* q); // 获取队列队尾元素 QDataType QueueBack(Queue* q); // 获取队列中有效元素个数 int QueueSize(Queue* q); // 检测队列是否为空,如果为空返回非零结果,如果非空返回0 int QueueEmpty(Queue* q); // 销毁队列 void QueueDestroy(Queue* q);

.c文件中的代码如下:

#include #include #include #include"Queue.h" QNode* BuyQListNode(QDataType data) { QNode* node = (QNode*)malloc(sizeof(QNode)); if (node == NULL) { assert(0); return NULL; } node->_data = data; node->_next = NULL; } // 初始化队列 void QueueInit(Queue* q) { assert(q); q->_front = q->_rear = BuyQListNode(0); } // 队尾入队列 void QueuePush(Queue* q, QDataType data) { assert(q); q->_rear->_next = BuyQListNode(data); q->_rear = q->_rear->_next; } // 队头出队列 void QueuePop(Queue* q) { QNode* delNode = NULL; if (QueueEmpty(q)) { return; } delNode = q->_front->_next; q->_front->_next = delNode->_next; if (delNode->_next == NULL) { q->_rear = q->_front; } free(delNode); } // 获取队列头部元素 QDataType QueueFront(Queue* q) { assert(q); if(!QueueEmpty(q)) return q->_front->_next->_data; } // 获取队列队尾元素 QDataType QueueBack(Queue* q) { assert(q); if (!QueueEmpty(q)) return q->_rear->_data; } // 获取队列中有效元素个数 int QueueSize(Queue* q) { assert(q); int count = 0; QNode* cur = q->_front->_next; while (cur) { ++count; cur = cur->_next; } return count; } // 检测队列是否为空,如果为空返回非零结果,如果非空返回0 int QueueEmpty(Queue* q) { assert(q); return q->_front->_next == NULL; } // 销毁队列 void QueueDestroy(Queue* q) { assert(q); QNode* cur = q->_front; while (cur) { q->_front = cur->_next; free(cur); cur = q->_front; } q->_front = q->_rear = NULL; } //测试 void TestQueue() { Queue q; QueueInit(&q); QueuePush(&q, 1); QueuePush(&q, 2); printf("size=%d\n", QueueSize(&q)); printf("front=%d\n", QueueFront(&q)); printf("rear=%d\n", QueueBack(&q)); QueuePush(&q, 3); QueuePush(&q, 4); QueuePush(&q, 5); QueuePush(&q, 6); printf("size=%d\n", QueueSize(&q)); printf("front=%d\n", QueueFront(&q)); printf("rear=%d\n", QueueBack(&q)); QueuePop(&q); printf("size=%d\n", QueueSize(&q)); printf("front=%d\n", QueueFront(&q)); printf("rear=%d\n", QueueBack(&q)); QueuePop(&q); QueuePop(&q); QueuePop(&q); QueuePop(&q); QueuePop(&q); printf("size=%d\n", QueueSize(&q)); if (QueueEmpty(&q)) { printf("EMPTY!!!\n"); } else { printf("Error!!!\n"); } QueueDestroy(&q); } int main() { TestQueue(); return 0; }

运行结果截图:在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有