美文网首页
链表学习之增删查改

链表学习之增删查改

作者: jkCodic | 来源:发表于2017-03-27 21:01 被阅读0次

    链表是一种高效的数据结构,能够实现对线性数据的快速处理,生活中的应用非常广泛,例如点歌时候对歌曲的处理。(可以理解为将数据和指针用结构体打包,用指针的特点在逻辑上串联数据)


    分类与区别(补图):
    ①单链表:最后一位指向空
    ②单向循环链表:比单链表多了:尾节点->头节点
    ③双向链表:比单链表多了返回方向
    ④双向循环链表(内核链表):比单向循环链表多了返回方向


    实现一个链表的公共步骤:
    1.链表初始化(申请头节点内存空间;) 2.创建新节点(需要指向NULL)
    3.各位置插入操作:头 中 尾(包括最后一个有效的前一位:判断不全引起的)
    4.删除链表节点的元素 5.修改元素 打印


    特殊链表的区别步骤:


    总结:
    1.使用的关键在于确定好要查找的位置,通过指针P的关系来进行修改等操作,注意逻辑关系,断开前考虑是否还要再引用,断开了就不能再引用,写代码时专注某模块;
    2.常用位置表示:p>next=NULL;//p为辅助指针,遍历链表用;
    3.敲码思路:画步骤图(画上head,断开关系画×)加叫法;
    4.p->next->next=NULL;//叫法:p的next的next指向空)
    5.初始化时(或者新增节点时最好赋值NULL,防止野指针),pHead->pNext = NULL;//防止乱指向
    使用注意:
    1.【判断申请内存空间是否成功的位置】初始化头节点(创建新节点);
    2.判断用户输入比对值是否存在;
    3.判断最后一位有效数据的条件(往往需要考虑在最后前一位进行插入操作)
    4.新增或删除节点等操作要实时更新下标


    问题探讨
    ①顺序表插入问题:p->next->stu.name是否还要判断最后一位?
    ②健壮性:;1.判断malloc分配的head是否为空(严谨);2.控制输入字节长度,buf判断提醒长度; 3.删除操作时要将20的值赋值给19的时候检测,不能给其他引用;char *p=&a;//a为int,可以通过编译原因:
    ③函数执行结果返回小技巧:设置ret值让函数返回;
    ④带参数的宏-续行符:\ ,宏直接替换,定义为结构体指针时需要加()->安全,防止替换出错
    ⑤节点处理完成后要进行位置更新操作

    相关文章

      网友评论

          本文标题:链表学习之增删查改

          本文链接:https://www.haomeiwen.com/subject/jgikottx.html