用链表实现队列

来源:互联网 发布:南通家纺城网络批发 编辑:程序博客网 时间:2024/05/16 10:30

/*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;
}

原创粉丝点击