ITPub博客

首页 > > > C语言实现队列

C语言实现队列

作者:dapan 时间:2019-11-06 21:51:42 0 删除 编辑

什么是队列?

上一篇文章写了什么是栈,用C语言实现了栈,既然说了栈,不说队列,感觉总是少了点什么,所以就顺手写一个队列,而且最近做项目也用到这个队列的代码。

栈的特点是先进后出,队列的特点是先进先出,从这个特点可以知道,队列是比较友好的,不像栈那样最开始进去排队的人,竟然是最后一个出来的。

新建一个队列

因为我这个例程是使用链表实现队列的,所以新建一个队列,实际上就是开辟一个内存空间,用来存储队列的头部。跟栈一样,我们理解了建立一个队列就是需要建立一个头,开辟的这个空间,代表的是这个队列,就好比,你老爸就可以代表你们家庭,不管你家有多少人,有多少个小孩,你老爸始终都是这个家庭的户主。

/*创建队列,外部释放内存*/
QueueInfo_st *createQueue(void)
{
    QueueInfo_st *queue = (QueueInfo_st *)malloc(sizeof(QueueInfo_st));
    if(NULL == queue)
    {
        printf("malloc failed\n");
        return NULL;
    }
    queue->next = NULL;
    return queue;
}

向队列中插入数据

向队列插入数据,我做的有点麻烦,先是遍历链表,找到这个链表的尾部,然后再在链表的尾部插入数据,看文章的大神,有好的方法可以指出来,我觉得应该有更加优秀的方法的。

/*入队列,0表示成,非0表示出错*/
int queue_push(QueueInfo_st *s,ElementType value)
{
    /*用来保存尾部指针*/
    QueueInfo_st *temp = (QueueInfo_st *)malloc(sizeof(QueueInfo_st));
    if(NULL == temp)
    {
        printf("malloc failed\n");
        return FAILURE;
    }

    /*找到链表的尾部*/
    while(s->next != NULL)
    {
        s = s->next;
    }

    temp->value = value;
    temp->next = s->next;
    s->next = temp;

    return SUCCESS;
}

取出队列的数据

取出队列的数据,也就是把头部指向的下一个链表里面的数据给取出来,取出来要记得释放内存哈,这一步尤其重要。

/*出队列*/
int queue_pop(QueueInfo_st *s,ElementType *value)
{
    /*首先判断队列是否为空*/
    if(queue_is_empty(s))
        return FAILURE;
    /*找出队列顶元素*/
    *value = s->next->value;
    /*保存等下需要free的指针*/
    QueueInfo_st *temp = s->next;
    /*更换队列顶的位置*/
    s->next = s->next->next;

    /*释放队列顶节点内存*/
    if(temp!=NULL)/*先判断指针是否为空*/
        free(temp);
    temp = NULL;

    return SUCCESS;
}

查看全文

队列,C语言实现​mp.weixin.qq.com图标

原文作者:;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2020-08-07

  • 博文量
    4504
  • 访问量
    87209