单链表的读取,插入与删除

一:单链表的读取

    获得链表第i个数据,算法思路:

    1.声明一个指针p指向链表的第一个结点,初始化j从1开始;

    2.j<i时,遍历链表,p指针后移,j+1;

    3.到链表尾部p为空或者j>i时,说明第i个节点不存在;

    4.若查找成功,返回结点p的数据。



二:单链表的插入


扫描二维码关注公众号,回复: 190205 查看本文章

  单链表第i 个数据插入结点的算法思路:

  1.声明一指针p 指向链表头结点,初始化从1开始;

  2.当j<i 时,就遍历链表,  让P 的指针向后移动,不断指向下结点,累加1;

  3.若到连表末尾p 为空,则说明第i个结点不存在;

  4.否则查找成功,  在系统中生成一个空结点s;

  5.将数据元素e 赋值给s->data;

  6.单链表的插入标准语句s->next=p->next;  p- >next = s


  

三:单链表的删除


 单链第1个数据删除结点的算法思路:

 1.声明一指针p指向链表头指针,初始化j 从1开始;

 2.当j<i 时,就遍历链表,让P 的指针向后移动,不断指向下一个结点,累加1;

 3.若到链表末尾p为空,说明第个结点不存在;

 4.否则查找成功,将欲删除的结点p->next 赋值给9;

 5.单链表的删除标准语句p->next=q->next;

 6.将q 结点中的数据赋值给e,作为返回;

 7.释放q 结点;



      分析一下刚才我们讲解的单链表插入和删除算法,我们发现,它们其实都是由两部分组成:第一部分就是遍历查找第1个结点; 第二部分就是插入和删除结点。
     从整个算祛来说,我们很容易推导出: 它们的时间复杂度都是0(n)。
     如果在我们不知道第i个结点的指针位置,单链表数据结构在插入和删除操作上,与线性表的顺序存储结构是没有大大优势的。但如果,我们希望从第i个位置,插入10 个结点,对于顺序存储结构意味着,每一次插入都需要移动n-i 个结点,每次都是0(n)。而单链表,我们只需要在第一次时,找到第i个位置的指针,此时为O(n),接下来只是简地通过赋值移动指针而已,时间复杂度都是0(1)。显然,对于插入或删除数据越频繁的操作,单链表的效率优势就越是明显。




猜你喜欢

转载自blog.csdn.net/falaodechongfei/article/details/80229995
今日推荐