用链表实现队列

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值