【数据结构---17】C语言实现一个链表队列
Queue.h
#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);
void QueueTest();
Queue.c
#include "queue.h"
#include <stdio.h>
#include <malloc.h>
#include <assert.h>
QNode* BuyNode(QDataType data)
{
QNode* newnode = (QNode*)malloc(sizeof(QNode));
if (newnode == NULL)
{
assert(0);
}
newnode->_data = data;
newnode->_pNext = NULL;
return newnode;
}
初始化操作:
void QueueInit(Queue* q)
{
assert(q);
q->_front = q->_back = NULL;
}
入队:
void QueuePush(Queue* q, QDataType data)
{
assert(q);
QNode* node = BuyNode(data);
if (q->_front == NULL )
{
q->_front = q->_back = node;
}
else
{
q->_back->_pNext = node;
q->_back = node;
}
}
出队:
void QueuePop(Queue* q)
{
assert(q);
if (q->_front == NULL)
{
return;
}
QNode* newhead = q->_front;
//队列中只有一个元素
if (q->_front->_pNext == NULL)
{
q->_front = q->_back = NULL;
}
else
{
q->_front = newhead->_pNext;
free(newhead);
newhead = NULL;
}
}
获取队头元素:
QDataType QueueFront(Queue* q)
{
if (q->_front == NULL)
{
return -1;
}
return q->_front->_data;
}
获取队尾元素:
QDataType QueueBack(Queue* q)
{
if (q->_front == NULL)
{
return -1;
}
return q->_back->_data;
}
查看当前元素个数:
int QueueSize(Queue* q)
{
QNode* pCur = q->_front;
int count = 0;
while (pCur != NULL)
{
pCur = pCur->_pNext;
count++;
}
return count;
}
检测队列是否为空:
int QueueEmpty(Queue* q)
{
if (q->_front == NULL)
{
return -1;
}
return 1;
}
销毁队列:
void QueueDestroy(Queue* q)
{
assert(q);
if (q->_front == NULL)
{
return;
}
QNode* pCur = q->_front;
while (pCur != NULL)
{
q->_front= pCur->_pNext;
free(pCur);
pCur = NULL;
pCur = q->_front;
}
q->_front = q->_back = NULL;
}
测试队列的实现:
void QueueTest()
{
Queue s;
QueueInit(&s);
QueuePush(&s, 1);
QueuePush(&s, 2);
QueuePush(&s, 3);
QueuePush(&s, 4);
//出队列
QueuePop(&s);
QueuePop(&s);
QueuePop(&s);
//查看当前元素个数
printf("size=%d\n",QueueSize(&s));
}
主函数:
int main()
{
QueueTest();
return 0;
}