本 Wiki 开启了 HTTPS。但由于同 IP 的 Blog 也开启了 HTTPS,因此本站必须要支持 SNI 的浏览器才能浏览。为了兼容一部分浏览器,本站保留了 HTTP 作为兼容。如果您的浏览器支持 SNI,请尽量通过 HTTPS 访问本站,谢谢!
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版后一修订版两侧同时换到之后的修订记录 | ||
dsa:notes:dahua_ds:3_linearlist [2017/03/24 23:29] – [6.4.单链表的删除] haregy | dsa:notes:dahua_ds:3_linearlist [2017/03/25 01:05] – [6.4.单链表的插入] haregy | ||
---|---|---|---|
行 173: | 行 173: | ||
相比起链表的读取和存储,单链表的插入和删除操作都显得简单了许多: | 相比起链表的读取和存储,单链表的插入和删除操作都显得简单了许多: | ||
\\ | \\ | ||
- | \\{{: | + | \\ |
+ | {{ : | ||
+ | \\ | ||
+ | \\ | ||
+ | 大致的顺序是: | ||
+ | - 先将新节点指向目标节点。 | ||
+ | - 再将前驱结点指向新节点。 | ||
+ | 用代码可以表示为: | ||
+ | < | ||
+ | new -> next = front -> next; // copy the pointer info from front node to new node, use the info point to the rear node | ||
+ | front -> next = new; // then let front point to the new node | ||
+ | </ | ||
+ | 注意,这里**不能交换操作的顺序**。试想一下如果我们先让前驱结点指向新节点,那么指向 '' | ||
+ | \\ | ||
+ | \\ | ||
+ | 实现链表插入第 $i$ 个数据的的流程如下: | ||
+ | - 初始化:建立一个节点 '' | ||
+ | - 声明自变量 '' | ||
+ | - 如果找到链表末尾 '' | ||
+ | - 如果查找成功,则建立一个空节点 '' | ||
+ | - 将值赋予空节点 '' | ||
+ | - 对 '' | ||
+ | - 程序成功执行,返回 '' | ||
+ | ===6.5.单链表的删除=== | ||
+ | 单链表的删除则更简单了,只需要把要删除的节点的前驱结点直接指向要删除节点的后置节点就可以: | ||
+ | \\ | ||
+ | \\ | ||
+ | {{ : | ||
+ | \\ | ||
+ | \\ | ||
+ | 用代码可以表示为: | ||
+ | < | ||
+ | front -> next = new -> next; | ||
+ | </ | ||
+ | 注意:< | ||
+ | 实现链表删除第 $i$ 个数据的的流程如下: | ||
+ | - 初始化:创建节点 '' | ||
+ | - 当 '' | ||
+ | - 如果到链表末尾 '' | ||
+ | - 否则查找成功,删除节点。 | ||
+ | - 释放被删除节点的内存。 | ||
+ | - 返回成功。 | ||
+ | ===6.6.链表清空(销毁)=== | ||
+ | 链表的删除和创建一样也需要遍历,同时也需要挨个的释放节点的内存。算法思路大概如下: | ||
+ | - 声明节点 '' | ||
+ | - 用 '' | ||
+ | - 循环: | ||
+ | - 用'' | ||
+ | - 释放 '' | ||
+ | - 将 '' | ||
+ | ===6.7.总结=== | ||
+ | 学习完了线性表和链表,我们可以明确几个注意点: | ||
+ | - 需要频繁查找的时候,使用线性表;而需要频繁插入删除的时候,使用单链表。 | ||
+ | - 如果不知道元素有多少,那么用单链表。如果事先知道长度,那么用线性表。 |