代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//队列结构
typedef struct queueNode
{
int data;
struct queueNode *pNext;
}QUEUENODE_T;
typedef struct Linkqueue
{
QUEUENODE_T *front; //队头
QUEUENODE_T *rear; //队尾
}LINKQUEUE_T;
//初始化队列
LINKQUEUE_T *Creat_EmptyQueue()
{
LINKQUEUE_T *NewQueue = NULL;
NewQueue = (LINKQUEUE_T *)malloc(sizeof(LINKQUEUE_T));
if (NewQueue == NULL)
{
printf("Creat_EmptyQueue failed.\n");
return NULL;
}
NewQueue->front = NewQueue->rear = NULL;
return NewQueue;
}
//判断队列是否为空
int Is_QueueEmpty(LINKQUEUE_T *pQueue)
{
return (pQueue->front == NULL) ? 0 : -1;
}
//清空队列
void ClearQueue(LINKQUEUE_T *pQueue)
{
QUEUENODE_T *pNode = NULL;
pNode = pQueue->front;
while (pNode != NULL)
{
pQueue->front = pQueue->front->pNext;
free(pNode);
pNode = pQueue->front;
}
pQueue->rear = NULL;
}
//销毁队列
int DestroyQueue(LINKQUEUE_T *pQueue)
{
if (pQueue == NULL)
{
printf("DestroyQueue error,pQueue is null.\n");
return -1;
}
else
{
ClearQueue(pQueue);
free(pQueue);
}
return 0;
}
//入队
int InputQueue(LINKQUEUE_T *pQueue, int value)
{
QUEUENODE_T *pNewqueue = NULL;
if (pQueue == NULL)
{
printf("InputQueue: pQueue is NULL,inputqueue failed.\n");
return -1;
}
pNewqueue = (QUEUENODE_T *)malloc(sizeof(QUEUENODE_T));
pNewqueue->data = value;
pNewqueue->pNext = NULL;
if (Is_QueueEmpty(pQueue) == 0) //队列为空
{
pQueue->front = pQueue->rear = pNewqueue;
}
else
{
pQueue->rear->pNext = pNewqueue;
pQueue->rear = pNewqueue;
}
printf("<<<数据[%d]入队>>>\n", pNewqueue->data);
return 0;
}
//出队
int OutputQueue(LINKQUEUE_T *pQueue)
{
QUEUENODE_T *Newqueue = NULL;
int tempdata = 0;
if (pQueue == NULL)
{
printf("OutputQueue:pQueue is NULL,output queue failed.\n");
return -1;
}
if (Is_QueueEmpty(pQueue) == 0)
{
printf("OutputQueue:front is null,output queue failed.\n");
return -1;
}
Newqueue = pQueue->front;
pQueue->front = pQueue->front->pNext;
tempdata = Newqueue->data;
printf(">>>>数据[%d]出队<<<<\n", Newqueue->data);
free(Newqueue);
return tempdata;
}
//遍历队列
int ErgodicQueue(LINKQUEUE_T *pQueue)
{
QUEUENODE_T *Newqueue = NULL;
int count = 1;
if (pQueue == NULL)
{
printf("ErgodicQueue:pQueue is NULL.\n");
return -1;
}
if (Is_QueueEmpty(pQueue) == 0)
{
printf("ErgodicQueue:front is null.\n");
return -1;
}
Newqueue = pQueue->front;
while (Newqueue != NULL)
{
printf(">>>>队列第[%d]个数据为[%d]<<<<\n", count, Newqueue->data);
Newqueue = Newqueue->pNext;
count++;
}
}
//test
int main()
{
LINKQUEUE_T *pQueueNew = NULL;
pQueueNew = Creat_EmptyQueue();
if (pQueueNew == NULL)
{
return -1;
}
//入队
InputQueue(pQueueNew, 10);
InputQueue(pQueueNew, 20);
InputQueue(pQueueNew, 30);
InputQueue(pQueueNew, 40);
InputQueue(pQueueNew, 50);
//遍历
ErgodicQueue(pQueueNew);
//出队
OutputQueue(pQueueNew);
OutputQueue(pQueueNew);
OutputQueue(pQueueNew);
OutputQueue(pQueueNew);
OutputQueue(pQueueNew);
OutputQueue(pQueueNew);
system("pause");
return 0;
}
测试结果: