首页 > 其他 > 详细

【C解析之十】链表进阶

时间:2014-03-25 22:00:29      阅读:661      评论:0      收藏:0      [点我收藏+]

C解析之十链表进阶


         前言:最直观的图解,解链表最迷惑之点。下面将介绍链表的核心操作:插入,删除,查询,掌握这些操作,链表便可在你的程序中大放光彩啦。
         1.链表的插入:将新的节点插入到链表指定的位置。
          如下图:
       bubuko.com,布布扣
            等待插入的新节点(p),插入链表两个节点之间(左边为p1,右边为p2),完成这一操作需要两步:1.将p1的指针指向等待插入的节点;2将等待插入节点的指针指向p2。(如图)。
           bubuko.com,布布扣
              上图数字1,2分别指示了这两个操作步骤。插入节点的关键代码:
                         p1->next = p;
                         p->next = p2;
            2.链表的删除 将一个节点从链表删除。
            如下图:
          bubuko.com,布布扣
           删除节点操作是上一步插入节点逆操作。删除节点P,只需要把P1的指针指向P2,P便不在属于链表了。(如图)。
           bubuko.com,布布扣
             
            上图的数字1指示了删除所需的一步操作。有同学可能觉得,P的指针还指向P2呢,这丝毫不能改变P已经被链表删除了的事实。链表删除操作的核心代码:
                P1->next=P->next;   //P-next指向的是P2
       或者 :P1->next=P2;      
             3.链表的查询:遍历链表查找满足特定要求的节点。 
               链表的查询,需要遍历每一个节点,那么在遍历的过程中同样可以输出链表,遍历的最后可以找到链表的末尾(此处同时解释【C解析之九】链表初探中最后读者可能存在疑问的链表输出与找到链表的末尾)。
             如下图:  
      bubuko.com,布布扣
           链表习惯上表头Head不存储数据,Head之后的节点才真正是存有数据的节点,不管是查询时的比较,还是遍历时的输出都是操作链表节点内的数据。我们定义一个指针,通过指针的偏移(依次指向每个节点)来访问所有的节点。
          bubuko.com,布布扣
             依次分析:
             数字1: 将指针指向第一个链表节点,代码:P=Head->next;
             数字2: 指针指向下一个链表节点,    代码:P=P->next;
             数字3: 指针继续指向下一个节点,    代码:P=P->next;
             ......
             最后的结果:P-next=NULL,此时P指向的加点便是末尾的节点,这可以成为控制while循环的条件之一。
            继续扩展上一篇的例子:这个例子是初学者进一步学习C的良好例子,有兴趣的同学可以试试。掌握这个例子,C语言可以说已经初步入门了。同时,这个例子对链表操作而言,可谓五脏俱全,借助上面的图解仔细阅读,理解其中的关系。笔者认为,链表的操作,能极好地锻炼逻辑思维,同时考验开发者的细致程度。为便初学者,笔者决定不再增加更多的干扰,次程序就不做模块化处理了。
    

        

【C解析之十】链表进阶,布布扣,bubuko.com

【C解析之十】链表进阶

原文:http://blog.csdn.net/lovecodeless/article/details/22063591

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