C语言使用非循环双向链表实现队列

本文介绍如何使用非循环双向链表来构建队列,通过带头结点和尾结点的双链表设计,使得在链表头尾进行插入删除操作更为便捷,避免了遍历链表的需要。提供了核心代码,并将完整代码上传至GitHub供参考。
摘要由CSDN通过智能技术生成

       在前面两篇博客中,我分别使用了静态数组和动态数组来模拟循环队列。但是线性表中和队列最神似的莫过于链表了。我在前面也使用了大量的篇幅来讲述了链表的各种操作。今天我们使用一种比较特殊的链表——非循环双向链表来实现队列。首先这里的说明的是构建的是普通的队列,而不是循环队列。当我们使用数组的时候创建循环队列是为了节省存储空间,而来到链表中时,每一个节点都是动态申请和释放的,不会造成空间的浪费,所以就不需要采用循环队列了。第二,大家在很多书上看到的是使用单链表实现队列,我这里将会使用带头结点尾结点的非循环双链表实现,虽然多维护了两个节点和指针域,但是在链表头尾进行插入删除的时候不需要遍历链表了,队列操作变得非常的方便。真正实现了只在头尾操作。代码上传至https://github.com/chenyufeng1991/Queue_LinkedList

核心代码如下:

(1)初始化队列

//初始化带头结点和尾结点的非循环双向链表
void InitialQueue(Queue **pHead,Queue **pTail){

    *pHead = (Queue *)malloc(sizeof(Queue));
    *pTail = (Queue *)malloc(sizeof(Queue));

    if (*pHead == NULL || *pTail == NULL) {
        printf("%s函数执行,内存分配失败,初始化双链表失败\n",__FUNCTION__);
    }else{
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值