队列
基于队列实现以下操作:
- 队列的初始化
- 入队列
- 出队列
- 显示队列首位元素
- 显示队列尾元素
- 队列元素个数
- 判断是否为空
- 销毁队列
代码如下
引入头文件,定义队列
#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;
}