队列是一种先进先出的数据结构,下面是实现代码,仅供参考
#pragma once
#include<malloc.h>
#include<assert.h>
typedef int QueueDataType;
typedef struct QueueNode{
QueueDataType _data;
struct QueueNode* _next;
}QueueNode;
typedef struct Queue{
QueueNode* _head;
QueueNode* _tail;
}Queue;
void QueueInit(Queue* q);//初始化队列
QueueNode* BuyQueueNode(QueueDataType x);//创建队列节点
void QueuePush(Queue* q, QueueDataType x);//入队
void QueuePop(Queue* q);//出队
QueueDataType QueueFront(Queue* q);//访问队头
size_t QueueSize(Queue* q);//队列大小
int QueueEmpty(Queue* q);//队列是否为空
void QueueInit(Queue* q)//初始化队列
{
q->_head = NULL;
q->_tail = NULL;
}
QueueNode* BuyQueueNode(QueueDataType x)//创建队列节点
{
QueueNode* node = (QueueNode*)malloc(sizeof(QueueNode));
assert(node);
node->_data = x;
node->_next = NULL;
return node;
}
void QueuePush(Queue* q, QueueDataType x)//入队
{
if (q->_head == NULL){
q->_head = q->_tail = BuyQueueNode(x);
}
else{
q->_tail->_next = BuyQueueNode(x);
q->_tail = q->_tail->_next;
}
}
void QueuePop(Queue* q)//出队
{
if (q->_head == NULL){
return;
}
else{
QueueNode* next = q->_head->_next;
free(q->_head);
q->_head = next;
if (q->_head == NULL){
q->_tail = q->_head;
}
}
}
QueueDataType QueueFront(Queue* q)//访问队头
{
assert(q->_head);
return q->_head->_data;
}
size_t QueueSize(Queue* q)//队列大小
{
QueueNode* cur = q->_head;
size_t count = 0;
while (cur){
cur = cur->_next;
count++;
}
return count;
}
int QueueEmpty(Queue* q)//队列是否为空
{
if (!q->_head) {
return 1;
}
else {
return 0;
}
}