基于c语言实现的队列基本操作,包括:
- 创建
- 入队
- 出队
- 判断是否为空
代码如下(gcc编译器):
#include <stdlib.h>
#include <stdio.h>
typedef struct node
{
int nValue;
struct node *pNext;
}Node;
typedef struct queue
{
int nCount;
Node *pHead;
Node *pTail;
}Queue;
void Init(Queue **pQueue)
{
*pQueue = (Queue*)malloc(sizeof(Queue));
(*pQueue)->pHead = NULL;
(*pQueue)->pTail = NULL;
(*pQueue)->nCount = 0;
}
void Push(Queue *pQueue, int nValue)
{
if(pQueue == NULL) exit(1);
Node *pTemp = NULL;
pTemp = (Node*)malloc(sizeof(Node));
pTemp->nValue = nValue;
pTemp->pNext = NULL;
if(pQueue->pHead == NULL)
{
pQueue->pHead = pTemp;
}
else
{
pQueue->pTail->pNext = pTemp;
}
pQueue->pTail = pTemp;
pQueue->nCount++;
}
int Pop(Queue *pQueue)
{
if(pQueue == NULL) exit(1);
if(pQueue->nCount == 0) return -1;
Node *pDel = NULL;
int nNum;
pDel = pQueue->pHead;
nNum = pQueue->pHead->nValue;
pQueue->pHead = pQueue->pHead->pNext;
free(pDel);
pDel = NULL;
pQueue->nCount--;
if(pQueue->nCount == 0)
{
pQueue->pTail = NULL;
}
return nNum;
}
int IsEmpty(Queue *pQueue)
{
if(pQueue == NULL) exit(1);
return pQueue->nCount==0? 1:0;
}
int main()
{
Queue *pQueue = NULL;
Init(&pQueue);
Push(pQueue, 1);
Push(pQueue, 2);
Push(pQueue, 3);
Push(pQueue, 4);
printf("%d\n", Pop(pQueue));
printf("%d\n", Pop(pQueue));
printf("%d\n", Pop(pQueue));
printf("%d\n", Pop(pQueue));
return 0;
}