1.创建:通过二级指针创建队
2.入队和出队:通过尾进头出逻辑
#include<stdio.h>
#include<stdlib.h>
//尾进头出
typedef struct node
{
int nValue;
struct node* pNext;
}QueueNode;//节点
typedef struct queuenode
{
int nCount;
QueueNode* pHead;
QueueNode* pTail;
}Queue;//队列
//创建
void InitQueue(Queue** pQueue)
{
*pQueue = (Queue*)malloc(sizeof(Queue));
(*pQueue)->nCount = 0;
(*pQueue)->pHead = NULL;
(*pQueue)->pTail = NULL;
}
//入队
void PushNode(Queue* pQueue,int value)
{
if(pQueue == NULL)return;
QueueNode* pTemp;
pTemp = (QueueNode*)malloc(sizeof(QueueNode));
pTemp->nValue = value;
pTemp->pNext = NULL;
if(pQueue->pHead == NULL)
{
pQueue->pHead = pTemp;
}
else
{
pQueue->pTail->pNext = pTemp;
}
//添加一个节点,尾指针移动一次
pQueue->pTail = pTemp;
pQueue->nCount++;
}
//出队
int PopNode(Queue* pQueue)
{
//头出
if(pQueue==NULL || pQueue->nCount == 0)return -1;
QueueNode* del;
int num;
del = pQueue->pHead;
num = del->nValue;
//注意:free前记得强头指针后移动
pQueue->pHead = pQueue->pHead->pNext;
free(del);
del = NULL;
pQueue->nCount--;
if(pQueue->nCount == 0)
{
pQueue->pTail = NULL;
}
return num;
}
//是否为空
int IsEmpty(Queue* pQueue)
{
return pQueue->nCount == 0?1:0;
}
int main()
{
Queue* MyQueue;
InitQueue(&MyQueue);
PushNode(MyQueue,1);
PushNode(MyQueue,4);
PushNode(MyQueue,15);
PushNode(MyQueue,11);
PushNode(MyQueue,9);
printf("IsEmpty:%d\n",IsEmpty(MyQueue));
printf("输出:");
printf("%d ",PopNode(MyQueue));
printf("%d ",PopNode(MyQueue));
printf("%d ",PopNode(MyQueue));
printf("%d ",PopNode(MyQueue));
printf("%d ",PopNode(MyQueue));
printf("IsEmpty:%d\n",IsEmpty(MyQueue));
return 0;
}