双向链式队列-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);
相关推荐
晓蛋2 天前
c语言指的是什么意思
c语言·编译器·编程开发·集成开发环境·程序实例
傲世仙尊2 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
牵猫散步的鱼儿2 天前
重载、重写(覆盖)、重定义区别
c语言
phltxy2 天前
C 语言指针:从内存地址到灵活的数据访问
c语言
m0_547486662 天前
《数据结构教程》全套 PPT课件2026
数据结构
phltxy2 天前
C 语言中的数据存储:从类型到二进制位
c语言
wuminyu2 天前
HotSpot的轻量锁与膨胀后的ObjectMonitor状态重建原理
java·linux·c语言·jvm·c++
码不停蹄Zzz2 天前
指针用法篇——malloc和free指针详解
c语言
彧azz2 天前
操作系统时间管理与系统核心板块学习总结
c语言·笔记·学习·系统架构
白色的北极熊2 天前
c语言 牛客网 BC15
c语言