C語言 ,單鏈表實現佇列(初始化,入隊,出隊,元素個數,隊首元素,是否為空)
單鏈表實現佇列:
連結串列為空的判斷條件: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;
}