此代码在VS2013环境下实现:
#pragma once
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <Windows.h>
typedef int DataType;
typedef struct QNode{
DataType data;
struct QNode *pNext;
}QNode;
typedef struct Queue {
QNode *pFront;//头指针
QNode *pRear;//尾指针
int size;
}Queue;
//增加节点
QNode* Create()
{
return (QNode*)malloc(sizeof(QNode));
}
//初始化
void QueueInit(Queue *pQ)
{
assert(pQ);
pQ->pFront = pQ->pRear = NULL;
pQ->size = 0;
}
//入队列
void QueuePush(Queue *pQ, DataType data)
{
assert(pQ);
pQ->size++;
QNode* pNode = Create();
assert(pNode);
pNode->data = data;
pNode->pNext = NULL;
if (pQ->pFront == NULL&&pQ->pRear == NULL){
pQ->pFront = pQ->pRear = pNode;
return;
}
pQ->pRear->pNext = pNode;
pQ->pRear = pNode;
}
//出队列
void QueuePop(Queue *pQ)
{
assert(pQ);
assert(pQ->size > 0);
pQ->size--;
QNode *pOldNode = pQ->pFront;
pQ->pFront = pQ->pFront->pNext;
free(pOldNode);
}
//返回队列首元素
DataType QueueFront(Queue* pQ)
{
assert(pQ);
if (pQ->size = 0){
return -1;
}
return pQ->pFront->data;
}
//判断队列是否为空
DataType isEmpty(Queue *pQ)
{
assert(pQ);
return pQ->size > 0 ? 1 : 0;
}
//返回队列大小
DataType QueueSize(Queue* pQ)
{
assert(pQ);
return pQ->size;
}
//测试代码:
void test()
{
Queue queue;
printf("第一次判断:是否为空?(1不为空,0为空) %d \n", isEmpty(&queue));
QueueInit(&queue);
QueuePush(&queue, 1);
QueuePush(&queue, 2);
QueuePush(&queue, 3);
QueuePush(&queue, 4);
QueuePush(&queue, 5);
QueuePush(&queue, 6);
printf("第一次判断:队列大小为:%d \n", QueueSize(&queue));
printf("第二次判断:是否为空?(1不为空,0为空) %d \n", isEmpty(&queue));
QueuePop(&queue);
printf("第二次判断:队列大小为:%d \n", QueueSize(&queue));
printf("队列首元素为:%d \n", QueueFront(&queue));
}