/*2010-09-09*/
/*用链表实现队列*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef D
#define DEBUG(format, ...) printf(format,##__VA_ARGS__)
#else
#define DEBUG(format, ...) do{}while(0)
#endif
typedef struct queue
{
int x;
struct queue* next;
}QUEUE;
void init_queue(QUEUE** qHead)//初始化队列
{
if(NULL!=*qHead)
{
DEBUG("in init_queue,you cannot creat a queue here!/n");
exit(-1);
}
*qHead=(QUEUE*)malloc(sizeof(QUEUE));
if(NULL==*qHead)
{
DEBUG("in init_queue,malloc error!/n");
exit(-1);
}
memset(*qHead,0,sizeof(QUEUE));
// *qHead->next=NULL;为什么不用这一句呢??!!
DEBUG("init_queue success!/n");
}
void in_queue(QUEUE* queHead,QUEUE* node)/入队
{
if(NULL==queHead)
{
DEBUG("in in_queue, queHead is null/n");
exit(-1);
}
while(queHead->next!=NULL)
{
queHead=queHead->next;
}
queHead->next=(QUEUE*)malloc(sizeof(QUEUE));
if(NULL==queHead->next)
{
DEBUG("in in_queue,malloc error!/n");
exit(-1);
}
queHead=queHead->next;
queHead->x=node->x;
queHead->next=NULL;
DEBUG("in_queue success!/n");
}
/***********************************************************
*函数功能:节点出队,free掉相应的空间
*返回值:返回一个QUEUE类型的值
***********************************************************/
QUEUE out_queue(QUEUE* qHead)//出队
{
if(NULL==qHead)
{
DEBUG("in out_queue,qHead is NULL/n");
exit(-1);
}
if(NULL==qHead->next)
{
DEBUG("in out_queue,the queue is empty!/n");
exit(-1);
}
QUEUE ret;
QUEUE* tmp=qHead->next;
qHead->next=tmp->next;
ret.x=tmp->x;//先存数据再free
free(tmp);
DEBUG("out_queue success!/n");
return ret;
}
int main(void)
{
QUEUE* queHead=NULL;
QUEUE node;
init_queue(&queHead);
int i;
char num[]={1,2,3,4,5};
int len;
len=sizeof(num)/sizeof(num[0]);
for(i=0;i<len;i++)
{
node.x=num[i];
in_queue(queHead,&node);
}
QUEUE test;
for(i=0;i<len;i++)
{
test=out_queue(queHead);
printf("%d/n",test.x);
}
return 0;
}