【数据结构】单链表的建立——头插法与尾插法

如题所述

第1个回答  2023-09-17

【数据结构】单链表的建立——头插法与尾插法。

单链表的建立

当我们准备采用单链表的形式来实现线性表,那么第一步我们需要考虑到的就是单链表的建立,也就是初始化的过程。而由于链表是一个动态的结构,它不需要预先分配空间,因此生成链表的过程是一个结点“逐个插入”的过程,而结点插入的位置是我们可以选择的,所以按照结点插入的位置可以将单链表的建立方法分为头插法和尾插法。

①头插法

该算法的官方描述为∶从一个空表开始,重复读入数据,生成新结点,将读入数据存放到新结点的数据域中,然后将新结点插入到当前链表的表头结点之后。

这里的重点就是:每次生成的新结点都是要与头结点相连接的,每个新结点都插在了原来第一个节点的前面。通过这种方法建立的链表是后来居前的,也就是链表是逆序的。因此,当有题目让我们实现线性表的逆序表示,就应该首先考虑头插法。

图示为:

其中,指针H始终指向头结点,指针s指向新结点。①表示初始化空表②表示申请新结点并赋值③表示插入第一个结点④表示插入第二个结点(④-1和④-2代表了先后顺序)。整个图示过程展现了头插法的基本原理。

对应的算法为:

②尾插法

该算法的官方描述为∶从一个空表开始,重复读入数据,生成新结点将读入数据存放到新结点的数据域中,然后将新结点插入到当前链表的表尾结点之后。

这里的重点就是:生成的一个新结点是直接插入当前单链表的尾端,也就是让原来最后一个结点指向该新结点。这也是链表长度增长的一种最基本的方式。后来居后,生成的链表是顺序的。

图示为:

其中指针H始终指向头结点,指针s指向新结点,指针r始终指向单链表的表尾。①表示初始化空表②表示申请新结点并赋值③表示插入第一个结点④表示插入第二个结点(④-1和④-2代表了先后顺序)

整个图示过程展现了尾插法的基本原理。

对应的算法为:

分析完头插法和尾插法,又到了辨析两者时间复杂度的经典问题。

头插法:

每个节点:只需要移动一下它本身和头指针的指向即可,不需要移动其他的元素,实际也和其他的元素没有关系,所以单个节点的时间复杂度是O(n)。

整个链表:设单链表的总长度为n,在一个已有N个元素的单链表中插入元素,如果插入位置为x那么需要找到它的前驱才可以插入,最坏时间复杂度为O(n),时间复杂度也为O(n)

尾插法:

每个节点:只需要移动一下它本身和尾指针的指向即可,不需要移动其他的元素,实际也和其他的元素没有关系,所以单个节点的时间复杂度是O(1)。

整个链表:设单链表的总长度为n,在一个已有N个元素的单链表中插入元素,如果插入位置为x那么需要找到它的前驱才可以插入,最坏时间复杂度为O(n),时间复杂度也为O(n)。

思维导图:

【数据结构】单链表的建立——头插法与尾插法
该算法的官方描述为∶从一个空表开始,重复读入数据,生成新结点将读入数据存放到新结点的数据域中,然后将新结点插入到当前链表的表尾结点之后。这里的重点就是:生成的一个新结点是直接插入当前单链表的尾端,也就是让原来最后一个结点指向该新结点。这也是链表长度增长的一种最基本的方式。后来居后...

【数据结构】单链表的建立---头插法与尾插法
单链表的建立是数据结构中一个基本操作,涉及头插法与尾插法。头插法从空表开始,逐个插入新结点至链表头,形成逆序链表。反之,尾插法则将新结点插入至链表尾部,生成顺序链表。无论方法如何,每次插入新结点仅需调整头或尾指针,复杂度为O(n)。理解这两种方法对于解决相关问题至关重要。通过实践和...

数据结构单链表头插法和尾插法是什么意思?
头插法是新增节点总是插在头部,以带头结点链表为例,链表头指针是Head,新增节点p 那么 p->next = Head->next;Head->next = p;如果是不带头结点的链表那么对应是 p->next = Head;Head = p;而尾插法是将新增节点插在链表尾部,for(t = Head; t->next; t=t->next); \/\/结束时t...

数据结构单链表头插法和尾插法是什么意思?
头插法是新增节点总是插在头部,以带头结点链表为例,链表头指针是Head,新增节点p。数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。数据...

了解前插法和尾插法的区别
前插法和尾插法是单链表建立时常用的两种方法,它们在插入方式和特点上存在显著差异。前插法,也称为头插法,是将新生成的结点依次插入到头结点之后,即链表的开始位置。这种方法插入速度快,因为不需要遍历旧链表,新元素直接作为新的头结点,其next指针指向原来的头结点。然而,前插法的缺点是遍历链表...

前插法和后插法的区别
前插法和后插法的区别为:前插法是将新数据插入到链表(或其它)的首端,后插法是将新数据插入到链表(或其它)的尾端。前插法和后插法是数据结构中链表的两种不同插入方法,多用于建立单链表。前插法又叫头插法、前插入,后插法又叫尾插法、后插入。

数据结构尾插和头插的区别是什么
头插法:新插入的元素始终成为当前第一个元素 尾插法:新插入的元素始终成为当前最后一个元素

大家看数据结构中 头插法和尾插法,,为什么尾插法要设置最后一个节点为...
首先说头插法是在链表的开始插入节点,所以他必有后继 所以要设置其起后继指针为插入前的头结点。而 尾插法是在链表的尾部插入节点所以修改原链表的尾部的后继指针为新节点 而新节点以是尾部无后继结点 所以尾插法的节点后继为NULL

单链表创建之--头插法创建带头结点的单链表,超详细
单链表常见的创建方法有 头插法 和 尾插法 ,这里记录头插法创建 带头结点的单链表 具体过程: 以C语言为例, 1)首先使用 typedef 关键字定义结点数据类型 4行的 LNode 和 * LinkList 可有可无,有的话后面定义结点变量和指针变量时更方便,不必须在LNode前面加 struct 关键字...

【数据结构】C\/C++ 单链表的 创建、初始化、增、删、改、查、遍历等基 ...
头插法建立链表函数Creat_LinkList()的工作流程是:动态分配链表节点,输入用户数据,通过循环将节点依次插入到链表头部,直到用户输入0为止。尾插法的创建函数Creat_LinkList_R()则是在每次循环中,将新节点插入到当前尾节点的后面,尾节点指针随新节点更新。遍历链表使用Print_LinkList()函数,从头节点...

相似回答
大家正在搜