双向链式队列-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);
相关推荐
Yvonne爱编码16 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
熬夜有啥好16 小时前
数据结构——哈希表
数据结构·散列表
我能坚持多久18 小时前
【初阶数据结构01】——顺序表专题
数据结构
rainbow688919 小时前
深入解析C++STL:map与set底层奥秘
java·数据结构·算法
wangjialelele19 小时前
平衡二叉搜索树:AVL树和红黑树
java·c语言·开发语言·数据结构·c++·算法·深度优先
xuxie9919 小时前
day 21 双向链表以及循环链表
数据结构·链表
森G19 小时前
七、04ledc-sdk--------makefile有变化
linux·c语言·arm开发·c++·ubuntu
历程里程碑20 小时前
普通数组----合并区间
java·数据结构·python·算法·leetcode·职场和发展·tornado
weixin_3954489120 小时前
mult_yolov5_post_copy.c_cursor_0205
c语言·python·yolo
Z9fish21 小时前
sse哈工大C语言编程练习20
c语言·开发语言·算法