C语言学习-双链表(Link List)数据结构类型

双向链表是链表中的一种,双链表是操作系统中常用的数据结构,其特点就是,每个链表节点都具有两个指向同类型数据结构的指针变量成员。

双向链表的节点的数据结构类型模型代表:

1 struct p_list_node
2 {
3     struct p_list_node    *p_next;       //指向后继节点
4     struct p_list_node    *p_prev;       //指向前置节点
5 };

给已有的结构体数据类型起一个容易理解识别的别名:

1 typedef struct p_list_node   p_list;      

###双向链表的初始化函数:

1 void rt_list_init(p_list *l)
2 {
3     l->p_next = l->p_prev = l;
4 }

双向链表的初始化,就是让链表节点的成员指针指向本节点自己。

###双向链表中,向指定节点后面插入节点方法:

1 void rt_list_insert_after(p_list *l,p_list *n)
2 {
3      l->p_next->p_prev = n;      //先让指定节点的后继节点指向新插入的节点
4      n->p_next = l->p_next;      //再让新插入的节点指向它自己的后继节点
5 
6      l->p_next = n;              //让指定节点指向新插入的节点
7      n->p_prev = l;              //让新插入的节点指向指定节点
8 }

思维方式:后插法,先让新节点和指定节点的后继节点建立指向关系,再让新插入节点和指定节点建立指向关系。

###双向链表中,向指定节点前面插入节点方法:

1 void rt_list_insert_before(p_list *l,p_list *n)
2 {
3      l->p_prev->p_next = n;         //先让指定节点的前置节点指向新插入的节点
4      n->p_prev = l->p_prev;         //再让新插入的节点指向指定节点的前置节点
5 
6      l->p_prev = n;                      //让指定节点指向新插入的节点
7      n->p_next = l;                      //在让新插入的节点指向指定节点
8 }

思维方式:前插法,先让新节点和指定节点的前置节点建立指向关系,再让新插入节点和指定节点建立指向关系。

###双向链表中,删除指定节点方法:

1 void rt_list_remove(p_list *n)
2 {
3      n->p_next->p_prev = n->p_prev;         //先将要删除的节点的后继节点指向要删除节点的前置节点
4      n->p_prev->p_next = n->p_next;        //再将要删除的节点的前置节点指向要删除节点的后继节点
5      
6      n->p_next = n->p_prev =n;                  //将删除的节点指向自己
7 }

思维方式:删除指定节点,先将待删除节点的后继节点指向待删除节点的前置节点,再将待删除节点的前置节点指向待删除节点的后继节点。

 

posted @ 2020-02-29 22:34  Bosswjl  阅读(947)  评论(0)    收藏  举报