隊(duì)列是使用鏈表實(shí)現(xiàn)律秃,包含隊(duì)列的初始化、入隊(duì)治唤、出隊(duì)棒动、輸出隊(duì)列內(nèi)容、判斷隊(duì)列內(nèi)容是否為空
#include <iostream>
//鏈表節(jié)點(diǎn)
typedef struct Node
{
int nData;
Node *pNext;
}*PNODE;
//隊(duì)列
//隊(duì)列有兩個(gè)指針記錄數(shù)據(jù)宾添,front船惨、rear
typedef struct Queue
{
PNODE pFront;
PNODE pRear;
}*PQUEUE;
//初始化隊(duì)列
void init_queue(PQUEUE pQueue);
void push_queue(PQUEUE pQueue, const int& nValue);
void pop_queue(PQUEUE pQueue);
void show_queue(const PQUEUE pQueue);
bool isEmpty_queue(const PQUEUE pQueue);
int main()
{
Queue oQueue;
init_queue(&oQueue);
push_queue(&oQueue, 1);
push_queue(&oQueue, 2);
push_queue(&oQueue, 3);
push_queue(&oQueue, 4);
push_queue(&oQueue, 40);
push_queue(&oQueue, 88);
push_queue(&oQueue, 99);
show_queue(&oQueue);
pop_queue(&oQueue);
pop_queue(&oQueue);
pop_queue(&oQueue);
}
//初始化隊(duì)列
void init_queue(PQUEUE pQueue)
{
//初始化的時(shí)候,申請(qǐng)一個(gè)無(wú)效節(jié)點(diǎn)(不存儲(chǔ)任何內(nèi)容)
//讓隊(duì)首缕陕、隊(duì)尾都指向這個(gè)無(wú)效節(jié)點(diǎn)
pQueue->pRear = (PNODE)malloc(sizeof(Node));
if (nullptr == pQueue->pRear)
{
std::cout << "申請(qǐng)內(nèi)存失敗" << std::endl;
exit(-1);
}
pQueue->pRear->pNext = nullptr;
//隊(duì)首指向隊(duì)尾
pQueue->pFront = pQueue->pRear;
}
//入隊(duì)
void push_queue(PQUEUE pQueue, const int& nValue)
{
//插入需要從隊(duì)尾插入
PNODE pNewNode = (PNODE)malloc(sizeof(Node));
if (nullptr == pQueue->pRear)
{
std::cout << "申請(qǐng)內(nèi)存失敗" << std::endl;
exit(-1);
}
pNewNode->pNext = nullptr;
//由于隊(duì)尾永遠(yuǎn)指向一個(gè)無(wú)效的節(jié)點(diǎn)粱锐,所以這里直接把數(shù)據(jù)存儲(chǔ)到隊(duì)尾節(jié)點(diǎn)即可
pQueue->pRear->nData = nValue;
//然后把申請(qǐng)好的無(wú)效節(jié)點(diǎn)與隊(duì)尾連接起來(lái),避免丟失節(jié)點(diǎn)
pQueue->pRear->pNext = pNewNode;
//讓隊(duì)尾指向新加的無(wú)效節(jié)點(diǎn)扛邑,就等于rear + 1
pQueue->pRear = pNewNode;
}
//出隊(duì)
void pop_queue(PQUEUE pQueue)
{
if (isEmpty_queue(pQueue))
{
return;
}
//出隊(duì)從隊(duì)首彈出
//先記錄隊(duì)首的節(jié)點(diǎn)
PNODE pTempNode = pQueue->pFront;
//隊(duì)首指向隊(duì)首的下一個(gè)節(jié)點(diǎn)怜浅,相當(dāng)于front + 1
pQueue->pFront = pQueue->pFront->pNext;
std::cout << "彈出的元素為:" << pTempNode->nData << std::endl;
//釋放內(nèi)存
free(pTempNode);
}
//輸出隊(duì)列內(nèi)容
void show_queue(const PQUEUE pQueue)
{
PNODE pNode = pQueue->pFront;
while (pNode != pQueue->pRear)
{
std::cout << pNode->nData << "\t";
pNode = pNode->pNext;
}
//輸出完以后換個(gè)行
std::cout << "\n";
}
//隊(duì)列是否為空
bool isEmpty_queue(const PQUEUE pQueue)
{
if (pQueue->pFront == pQueue->pRear)
{
return true;
}
return false;
}