双向链式队列-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);
相关推荐
CSharp精选营3 天前
关系型 vs 非关系型:从原理到选型,一文搞定数据库核心分类
数据结构·nosql·关系型数据库·非关系型数据库·技术选型
刘马想放假6 天前
Modbus 全栈技术解析:TCP、RTU、ASCII、RTU over TCP
数据结构·网络协议
北域码匠7 天前
冒泡排序太慢?鸡尾酒排序双向优化,原生 C# 零第三方库完整代码
数据结构·排序算法·泛型·c# 算法·鸡尾酒排序·原生 c# 开发·冒泡排序优化·嵌入式算法
Darling噜啦啦14 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
LDR00615 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
小小工匠15 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
Luminous.15 天前
C语言--day30
c语言·开发语言
玖玥拾15 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
謓泽15 天前
C语言不是语法,是通往机器的地图。
c语言·开发语言
不会C语言的男孩15 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言