queue.h
#ifndef _QUEUE_H_
#define _QUEUE_H_
#include <stdio.h>
#include <stdlib.h>
typedef int DataType;
typedef struct node
{
DataType data;
struct node *pNext;
}QueueNode;
typedef struct list
{
QueueNode *pFront;
QueueNode *pRear;
int cLen;
}QueueList;
extern QueueList *createQueueList();
extern int isEmptyQueue(QueueList *pList);
extern void showQueue(QueueList *pList);
extern int enterQueue(QueueList *pList,DataType data);
extern int outQueue(QueueList *pList,DataType *poutdata);
extern void destroyQueue(QueueList **pList);
#endif
queue.c
#include "queue.h"
/*创建队列*/
QueueList *createQueueList()
{
QueueList *pList = malloc(sizeof(QueueList));
if(NULL == pList)
{
perror("createQueueList malloc error!\n");
return NULL;
}
pList->pFront = NULL;
pList->pRear = NULL;
pList->cLen;
return pList;
}
/*判空*/
int isEmptyQueue(QueueList *pList)
{
return 0 == pList->cLen;
}
/*遍历打印(验证)*/
void showQueue(QueueList *pList)
{
QueueNode *pTmpNode = pList->pFront;
while(pTmpNode != NULL)
{
printf("%d ",pTmpNode->data);
pTmpNode = pTmpNode->pNext;
}
printf("\n");
}
/*入队(尾插)*/
int enterQueue(QueueList *pList,DataType data)
{
QueueNode *pPushQNode = malloc(sizeof(QueueNode));
if(NULL == pPushQNode)
{
perror("pushQueue malloc error!\n");
return -1;
}
pPushQNode->data = data;
pPushQNode->pNext = NULL;
if(isEmptyQueue(pList))
{
pList->pFront = pPushQNode;
pList->pRear = pPushQNode;
}
else
{
pList->pRear->pNext = pPushQNode;
pList->pRear = pPushQNode;
}
pList->cLen++;
return 0;
}
/*出队(头删)*/
int outQueue(QueueList *pList,DataType *poutdata)
{
if(isEmptyQueue(pList))
{
return 0;
}
QueueNode *pFreeNode = pList->pFront;
pList->pFront = pFreeNode->pNext;
if(poutdata != NULL)
{
*poutdata = pFreeNode->data;
}
free(pFreeNode);
if(NULL == pList->pFront)
{
pList->pRear = NULL;
}
pList->cLen--;
return 0;
}
/*销毁*/
void destroyQueue(QueueList **pList)
{
while((*pList)->pFront != NULL)
{
outQueue(*pList,NULL);
}
free(*pList);
*pList = NULL;
}
main.c
#include "queue.h"
int main(int argc, const char *argv[])
{
QueueList *pList = NULL;
pList = createQueueList();
int i = 0;
for(i = 1;i < 10;++i)
{
enterQueue(pList,i);
}
showQueue(pList);
outQueue(pList,NULL);
showQueue(pList);
return 0;
}