单链表一

单链表样式样式: 头指针--->头结点---->a1---> ... --->an
头指针:
指的是链表指向第一个结点的指针,若链表有头结点,那么就会指向这个头结点。一般头指针会被冠以链表的名字,做标识作用。头指针必须存在
头结点:
放在第一个元素的结点之前,数据域一般没有意义,有时候可能用来存放链表的长度。有它是为了将头结点的操作和其它节点统一起来。头结点非必须。

单链表:若指向第i个元素,那么这个结点的数据域是i->data,指针域是i->next,i->next指向下一个元素。
单链表的读取(时间复杂度为O(n)):
获得链表第i个元素思路:
1)要声明一个结点p指向链表的第一个结点,初始化j从1开始。
2)当j <1,遍历链表,同时p的指针向后移动,指向下一个结点,j+1。
3)当到了链表末尾p为空时,说明第i个元素不存在
4)否则查找成功,返回结点p的数据。

将存储元素为e的结点插入到结点p和p->next之间,p和p->next的存储元素分别为ai和ai+1.
单链表的插入操作:
1)声明一个结点p指向链表的头结点,初始化j从1开始
2)2)当j <1,遍历链表,同时p的指针向后移动,指向下一个结点,j+1。
3)当到了链表末尾p为空时,说明第i个元素不存在
4)否则查找成功,在系统中生成一个空的结点s
5)将数据元素e赋值给s->data
6)单链表插入两个标准语句,s->next = p->next ,p->next = s;
7)返回成功

单链表的删除操作:
1)声明一个结点p指向链表的头结点,初始化j从1开始
2)2)当j <1,遍历链表,同时p的指针向后移动,指向下一个结点,j+1。
3)当到了链表末尾p为空时,说明第i个元素不存在
4)否则查找成功,将想删除结点p->next赋值给q
5)单链表的删除标准语句p->next = q->next
6)将q结点中的数据赋值给e
7)释放结点q

分析:单链表中插入和删除的时间复杂度都是O(n),
相比顺序存储结构似乎并没有什么优势,但是在插入第i个位置的元素时,前一种只是第一次O(n),接下来每次只需移动指针,这时时间复杂度是O(1),而顺序存储结构始终是O(n).所以对于插入和删除月频繁的操作,单链表的优势才会越明显。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 链表是线性表的链式存储方式,逻辑上相邻的数据在计算机内的存储位置不一定相邻,那么怎么表示逻辑上的相邻关系呢? 可以...
    rainchxy阅读 6,345评论 0 6
  • 1.线性表的定义 线性表:零个或多个数据元素的有限序列序列:也就是说元素之间是有顺序的,若元素存在多个,则第一个元...
    e40c669177be阅读 6,343评论 6 15
  • 本文内容取自于小甲鱼的数据结构与算法。//www.greatytc.com/p/230e6fde9c75 ...
    阿阿阿阿毛阅读 8,048评论 0 7
  • 大学的时候不好好学习,老师在讲台上讲课,自己在以为老师看不到的座位看小说,现在用到了老师讲的知识,只能自己看书查资...
    和珏猫阅读 5,319评论 1 3
  • 完整代码需结合前面一篇顺序表数据结构学习-线性表之顺序表各种操作网易云课堂小甲鱼课程链接:数据结构与算法 线性表的...
    NotFunGuy阅读 13,073评论 0 9