数据结构四双向链表

来源:互联网 发布:淘宝有机证书编号 编辑:程序博客网 时间:2024/06/01 08:23

双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。而之前的单链表为单向链表,双向链表也就是在单链表的结点中增加一个指向其前驱的pre指针

        如图

        

        

        这里介绍双向链表的常用操作:

               l 创建双向链表

               l 销毁双向链表

               l 清空双向链表

               l 获取表长度

               l 把node插入pos位置

               l 获取pos位置的元素

               l 删除pos位置的元素

               l 删除表中与node相同的元素(删除第一个匹配成功的)

               l 重置游标

               l 返回游标所指向的结点

               l 游标后移

               l 游标前移

 

         代码总分为三个文件:

                     DLinkList.h : 放置功能函数的声明,以及表的声明,表结点的定义 

                     DLinkList.c : 放置功能函数的定义,以及表的定义

                     Main.c    : 主函数,使用功能函数完成各种需求,一般用作测试

        整体结构图为:

 

        

        

              这里详细说下插入操作和删除操作:

 

              插入操作

                        如图

 

                                        

             

              插入元素方法:

                       判断表和插入位置是否合法

                       由表头开始通过next域移动pos次后,当前元素的next域为要插入的位置

                       Current的next域指向node

                       Node的next域指向next

                       判断是否为尾插,如果不是的话next的pre域指向node

                       判断是否为头插,如果是的话node的pre域指向NULL 

                      如果之前表为空表,则游标指向插入的结点

                      表长度加1

  

              删除操作

                        如图

 

                 

              删除元素方法:

                     判断表和插入位置是否合法

                     由表头开始通过next域移动pos次后,当前元素的next指向的元素为要删除的元素

                     把current的next域指向next

                     判断是否为尾插,如果不是的话,next的pre指针指向current

                     如果不是尾插且是头插的话,next的pre指针指向NULL

                     如果删除的结点正好游标也指向它,则游标后移

                     表长度减1

原创粉丝点击