单链表实现队列:
链表为空的判断条件:pQueue->pFront==pQueue->pRear或者若结构体中存在数的个数时,判断pQueue->size==0,即元素个数为0
头文件:队列.h
#pragma once
#include<stdio.h>
#include<stdlib.h>
//利用单链表实现队列
//函数接口 :
typedef int QDataType;
typedef struct QNode {
QDataType data;
struct QNode *pNext;
} QNode;
typedef struct Queue {
QNode *pFront;
QNode *pRear;
int size;
} Queue;
// 初始化
void QueueInit(Queue *pQueue)
{
pQueue->pFront = pQueue->pRear = NULL;
pQueue->size = 0;
}
// 入队列
void QueuePush(Queue *pQueue, QDataType data)
{
QNode*node = (QNode*)malloc(sizeof(QNode));
node->data = data;
if (pQueue->size == 0)
{
pQueue->pFront = node;
pQueue->pRear = node;
pQueue->size++;
return;
}
pQueue->pRear->pNext = node;
pQueue->pRear = pQueue->pRear->pNext;
pQueue->size++;
}
// 出队列
void QueuePop(Queue *pQueue)
{
Queue*pp = pQueue;
if (pQueue->size == 0)
{
printf("链表为空!\n");
return;
}
pQueue->pFront = pQueue->pFront->pNext;
pQueue->size--;
}
// 返回队首元素 ,返回-1表明空链表
QDataType QueueFront(Queue *pQueue)
{
if (pQueue->pFront == pQueue->pRear)
return -1;
return pQueue->pFront->data;
}
// 判断是否为空
// 1 空
// 0 不空
int QueueIsEmpty(Queue *pQueue)
{
if (pQueue->size == 0)
return 1;
else
return 0;
}
// 返回数据个数
int QueueSize(Queue *pQueue)
{
return pQueue->size;
}
void test()
{
Queue pQueue;
QueueInit(&pQueue);
/*QueuePush(&pQueue, 0);
QueuePush(&pQueue, 1);
QueuePush(&pQueue, 2);
QueuePush(&pQueue, 3);
QueuePush(&pQueue, 4);
QueuePush(&pQueue, 5);
QueuePush(&pQueue, 6);
QueuePush(&pQueue, 7);
QueuePush(&pQueue, 8);*/
printf("%d: ", QueueFront(&pQueue));
int a = QueueSize(&pQueue);//数据个数
QueuePop(&pQueue);
a = QueueSize(&pQueue);
int b = QueueIsEmpty(&pQueue);//判断是否为空
}
源文件:main.cpp
#include"队列.h"
int main()
{
test();
system("pause");
return 0;
}