数据结构:队列

    xiaoxiao2022-07-05  166

    队列

    基于队列实现以下操作:

    队列的初始化入队列出队列显示队列首位元素显示队列尾元素队列元素个数判断是否为空销毁队列

    代码如下 引入头文件,定义队列

    #pragma once typedef int QDataType; typedef struct QNode { struct QNode* _pNext; QDataType _data; }QNode; typedef struct Queue { QNode* _front; // 指向队头元素 QNode* _back; // 指向队尾元素 }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); //判断是否为空 int QueueEmpty(Queue* q); //销毁队列 void QueueDestroy(Queue* q);

    具体功能实现代码如下:

    #include"QNode.h" #include<stdio.h> #include<assert.h> #include<malloc.h> //队列初始化 void QueueInit(Queue* q) { assert(q); q->_back = q->_front = NULL; } //入队列 void QueuePush(Queue* q, QDataType data) { assert(q); QNode *pNewNode = (QDataType*)malloc(sizeof(QNode)); if (q->_front == NULL) { q->_front = q->_back == pNewNode; return; } assert(pNewNode); pNewNode->_data = data; pNewNode->_pNext = NULL; q->_back->_pNext = pNewNode; q->_back = pNewNode; } //出队列 void QueuePop(Queue* q) { assert(q); assert(q->_front); if (q->_front == NULL) q->_back = NULL; QNode* pCur = NULL; pCur = q->_front; q->_front = q->_front->_pNext; free(pCur); } //显示队列首位元素 QDataType QueueFront(Queue* q) { assert(q); assert(q->_front); return q->_front->_data; } //显示队列尾元素 QDataType QueueBack(Queue* q) { assert(q); assert(q->_back); return q->_back->_data; } //队列元素个数 int QueueSize(Queue* q) { assert(q); QNode* pCur = q->_front; int i = 1; while (pCur) { pCur = pCur->_pNext; i++; } return i; } //判断是否为空 int QueueEmpty(Queue* q) { assert(q); if (QueueSize(q) == 0) return 0; else return 1; } //销毁队列 void QueueDestroy(Queue* q) { assert(q); QNode* pCur = q->_front; QNode* pPre = NULL; while (pCur) { pPre = pCur; pCur = pCur->_pNext; free(pPre); } q->_front = q->_back = NULL; }
    最新回复(0)