双向链式队列-C语言

代码实现简单,记录一下

c 复制代码
typedef struct List {
    int key;
    int val;
    struct List *prev;
    struct List *next;
}DlistNode;

typedef struct Dlist {
    DlistNode *head;
    DlistNode *tail;
    int len;
}Dlist;

Dlist *InitDlist(void) {
    Dlist *dl = (Dlist *)malloc(sizeof(Dlist));
    dl->head = (DlistNode *)malloc(sizeof(DlistNode));
    dl->tail = (DlistNode *)malloc(sizeof(DlistNode));
    dl->tail->next = NULL;
    dl->tail->prev = dl->head;
    dl->head->prev = NULL;
    dl->head->next = dl->tail;
    dl->len = 0;
    return dl;
}

DlistNode *DlistPush(Dlist *dl, int key, int val) {
    // printf("add: %d %d\n", key, val);
    DlistNode *p = (DlistNode *)malloc(sizeof(DlistNode));
    p->key = key;
    p->val = val;
    p->next = dl->tail;
    p->prev = dl->tail->prev;
    dl->tail->prev = p;
    p->prev->next = p;
    dl->len++;
    return p;
}

DlistNode *DlistPop(Dlist *dl) {
    DlistNode *p = dl->head->next;
    // printf("del: %d %d\n", p->key, p->val);
    dl->head->next = dl->head->next->next;
    dl->head->next->prev = dl->head;
    dl->len--;
    return p;
}

int DlistDel(Dlist *dl, DlistNode *d) {
    // printf("del: %d %d\n", d->key, d->val);
    DlistNode *p = d->prev, *q = d->next;
    p->next = q;
    q->prev = p;
    int res = d->val;
    free(d);
    dl->len--;
    return res;
}

使用

c 复制代码
# 初始化
Dlist *dl = InitDlist();
# push
DlistPush(dl, 0, 1);
# Pop
DlistPop(dl);
# 删除指定元素
DlistNode *d = xxx;
DlistDel(dl, d);
相关推荐
zephyr0535 分钟前
链表实现O(n log n)时间复杂度的排序——归并排序详解
java·数据结构·算法
XWalnut2 小时前
LeetCode刷题 day37
java·数据结构·算法·leetcode
爱跳舞的烤冷面2 小时前
自学嵌入式第19天(数据结构篇——栈)
数据结构
星轨初途3 小时前
LeetCode 热题 100——day11 滑动窗口最大值
数据结构·c++·算法·leetcode·职场和发展
Aurorar0rua4 小时前
CS50 x 2024 Notes Memory - 03
c语言·开发语言·学习方法
捷瑞电子工坊14 小时前
嵌入式秋招面经:5大核心模块高频考题与实战避坑总结
c语言·stm32·嵌入式工程师·rtos·通信协议·嵌入式面试
天空'之城15 小时前
C 语言工业级通用组件手写 30:安全内存拷贝组件
c语言·内存拷贝·工业级组件·安全内存操作
LuminousCPP16 小时前
数据结构-双向循环链表
c语言·数据结构·笔记·链表
白狐_79818 小时前
408数据结构第5章:树与二叉树②——遍历、线索树、森林与哈夫曼
数据结构·算法·深度优先
小僧景贤19 小时前
嵌入式C语言 第二篇:基础语法|嵌入式C与标准C的核心差异
c语言·开发语言·嵌入式c语言