首页 > 其他 > 详细

线性表的链式表示——双链表

时间:2021-06-23 21:54:03      阅读:20      评论:0      收藏:0      [点我收藏+]

1、和单链表比较

单链表无法逆向检索

双链表可进可退

存储结构:
技术分享图片

typedef struct DNode {              //定义双链表节点类型
    ElemType data;                  //数据域
    struct DNode *prior, *next;     //前驱和后继指针
} DNode, *DLinkList;

2、插入节点

在p节点后插入s节点,注意执行的顺序

技术分享图片
/**
 * 在p节点之后插入s节点
 * @param p
 * @param s
 * @return
 */
bool InsertNextDNode(DNode *p, DNode *s) {
    if (p == NULL || s == NULL) {   //非法参数
        return false;
    }
    s->next = p->next;
    if (p->next != NULL) {    //如果p节点有后继节点
        p->next->prior = s;
    }
    s->prior = p;
    p->next = s;
    return true;
}

3、删除节点

删除p节点后的q节点

技术分享图片
/**
 * 删除p的后继节点
 * @param p
 * @return
 */
bool DeleteNextNode(DNode *p) {
    if (p == NULL) {
        return false;
    }
    DNode *q = p->next;          //找到p的后继节点q
    if (q == NULL) {
        return false;
    }
    p->next = q->next;
    if (q->next != NULL) {       //q节点不是最后一个节点
        q->next->prior = p;
    }
    free(q);                     //释放空间节点
    return true;
}

线性表的链式表示——双链表

原文:https://www.cnblogs.com/studentyang/p/14924295.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!