This commit is contained in:
krahets
2023-06-02 01:35:09 +08:00
parent 5d3d1d12b9
commit e64a83ee34
93 changed files with 42131 additions and 3773 deletions

View File

@ -18,7 +18,7 @@
<link rel="prev" href="../list/">
<link rel="next" href="../../chapter_stack_and_queue/stack/">
<link rel="next" href="../../chapter_stack_and_queue/">
<link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.4.2, mkdocs-material-9.1.11">
@ -266,6 +266,10 @@
@ -273,10 +277,16 @@
<label class="md-nav__link" for="__nav_1" id="__nav_1_label" tabindex="0">
0. &nbsp; &nbsp; 写在前面
<span class="md-nav__icon md-icon"></span>
</label>
<div class="md-nav__link md-nav__link--index ">
<a href="../../chapter_preface/">0. &nbsp; &nbsp; 写在前面</a>
<label for="__nav_1">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_1">
@ -286,6 +296,8 @@
<ul class="md-nav__list" data-md-scrollfix>
@ -353,6 +365,10 @@
@ -360,10 +376,16 @@
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
1. &nbsp; &nbsp; 引言
<span class="md-nav__icon md-icon"></span>
</label>
<div class="md-nav__link md-nav__link--index ">
<a href="../../chapter_introduction/">1. &nbsp; &nbsp; 引言</a>
<label for="__nav_2">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2">
@ -373,6 +395,8 @@
<ul class="md-nav__list" data-md-scrollfix>
@ -440,6 +464,10 @@
@ -449,10 +477,16 @@
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
2. &nbsp; &nbsp; 复杂度分析
<span class="md-nav__icon md-icon"></span>
</label>
<div class="md-nav__link md-nav__link--index ">
<a href="../../chapter_computational_complexity/">2. &nbsp; &nbsp; 复杂度分析</a>
<label for="__nav_3">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3">
@ -462,6 +496,8 @@
<ul class="md-nav__list" data-md-scrollfix>
@ -543,6 +579,10 @@
@ -554,10 +594,16 @@
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
3. &nbsp; &nbsp; 数据结构简介
<span class="md-nav__icon md-icon"></span>
</label>
<div class="md-nav__link md-nav__link--index ">
<a href="../../chapter_data_structure/">3. &nbsp; &nbsp; 数据结构简介</a>
<label for="__nav_4">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4">
@ -567,6 +613,8 @@
<ul class="md-nav__list" data-md-scrollfix>
@ -664,6 +712,10 @@
@ -673,10 +725,16 @@
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
4. &nbsp; &nbsp; 数组与链表
<span class="md-nav__icon md-icon"></span>
</label>
<div class="md-nav__link md-nav__link--index ">
<a href="../">4. &nbsp; &nbsp; 数组与链表</a>
<label for="__nav_5">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_5">
@ -686,6 +744,8 @@
<ul class="md-nav__list" data-md-scrollfix>
@ -808,6 +868,10 @@
@ -817,10 +881,16 @@
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
5. &nbsp; &nbsp; 栈与队列
<span class="md-nav__icon md-icon"></span>
</label>
<div class="md-nav__link md-nav__link--index ">
<a href="../../chapter_stack_and_queue/">5. &nbsp; &nbsp; 栈与队列</a>
<label for="__nav_6">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6">
@ -830,6 +900,8 @@
<ul class="md-nav__list" data-md-scrollfix>
@ -911,6 +983,10 @@
@ -918,10 +994,16 @@
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
6. &nbsp; &nbsp; 散列表
<span class="md-nav__icon md-icon"></span>
</label>
<div class="md-nav__link md-nav__link--index ">
<a href="../../chapter_hashing/">6. &nbsp; &nbsp; 散列表</a>
<label for="__nav_7">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
@ -931,6 +1013,8 @@
<ul class="md-nav__list" data-md-scrollfix>
@ -996,6 +1080,10 @@
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8" >
@ -1011,10 +1099,16 @@
<label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0">
7. &nbsp; &nbsp;
<span class="md-nav__icon md-icon"></span>
</label>
<div class="md-nav__link md-nav__link--index ">
<a href="../../chapter_tree/">7. &nbsp; &nbsp;</a>
<label for="__nav_8">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8">
@ -1024,6 +1118,8 @@
<ul class="md-nav__list" data-md-scrollfix>
@ -1133,6 +1229,10 @@
@ -1140,10 +1240,16 @@
<label class="md-nav__link" for="__nav_9" id="__nav_9_label" tabindex="0">
8. &nbsp; &nbsp;
<span class="md-nav__icon md-icon"></span>
</label>
<div class="md-nav__link md-nav__link--index ">
<a href="../../chapter_heap/">8. &nbsp; &nbsp;</a>
<label for="__nav_9">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_9_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_9">
@ -1153,6 +1259,8 @@
<ul class="md-nav__list" data-md-scrollfix>
@ -1220,6 +1328,10 @@
@ -1229,10 +1341,16 @@
<label class="md-nav__link" for="__nav_10" id="__nav_10_label" tabindex="0">
9. &nbsp; &nbsp;
<span class="md-nav__icon md-icon"></span>
</label>
<div class="md-nav__link md-nav__link--index ">
<a href="../../chapter_graph/">9. &nbsp; &nbsp;</a>
<label for="__nav_10">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_10_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_10">
@ -1242,6 +1360,8 @@
<ul class="md-nav__list" data-md-scrollfix>
@ -1323,6 +1443,10 @@
@ -1334,19 +1458,27 @@
<label class="md-nav__link" for="__nav_11" id="__nav_11_label" tabindex="0">
10. &nbsp; &nbsp; 搜索算法
<span class="md-nav__icon md-icon"></span>
</label>
<div class="md-nav__link md-nav__link--index ">
<a href="../../chapter_searching/">10. &nbsp; &nbsp; 搜索</a>
<label for="__nav_11">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_11_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_11">
<span class="md-nav__icon md-icon"></span>
10. &nbsp; &nbsp; 搜索算法
10. &nbsp; &nbsp; 搜索
</label>
<ul class="md-nav__list" data-md-scrollfix>
@ -1442,6 +1574,10 @@
@ -1465,19 +1601,27 @@
<label class="md-nav__link" for="__nav_12" id="__nav_12_label" tabindex="0">
11. &nbsp; &nbsp; 排序算法
<span class="md-nav__icon md-icon"></span>
</label>
<div class="md-nav__link md-nav__link--index ">
<a href="../../chapter_sorting/">11. &nbsp; &nbsp; 排序</a>
<label for="__nav_12">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_12_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_12">
<span class="md-nav__icon md-icon"></span>
11. &nbsp; &nbsp; 排序算法
11. &nbsp; &nbsp; 排序
</label>
<ul class="md-nav__list" data-md-scrollfix>
@ -1657,6 +1801,10 @@
@ -1664,26 +1812,34 @@
<label class="md-nav__link" for="__nav_13" id="__nav_13_label" tabindex="0">
12. &nbsp; &nbsp; 回溯算法
<span class="md-nav__icon md-icon"></span>
</label>
<div class="md-nav__link md-nav__link--index ">
<a href="../../chapter_backtracking/">12. &nbsp; &nbsp; 回溯</a>
<label for="__nav_13">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_13_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_13">
<span class="md-nav__icon md-icon"></span>
12. &nbsp; &nbsp; 回溯算法
12. &nbsp; &nbsp; 回溯
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../chapter_backtracking/backtracking_algorithm/" class="md-nav__link">
12.1. &nbsp; 回溯算法New
12.1. &nbsp; 回溯算法
</a>
</li>
@ -1697,7 +1853,7 @@
<li class="md-nav__item">
<a href="../../chapter_backtracking/permutations_problem/" class="md-nav__link">
12.2. &nbsp; 全排列问题New
12.2. &nbsp; 全排列问题
</a>
</li>
@ -1711,7 +1867,7 @@
<li class="md-nav__item">
<a href="../../chapter_backtracking/n_queens_problem/" class="md-nav__link">
12.3. &nbsp; N 皇后问题New
12.3. &nbsp; N 皇后问题
</a>
</li>
@ -1904,7 +2060,7 @@
<li>数组支持随机访问、占用内存较少;但插入和删除元素效率低,且初始化后长度不可变。</li>
<li>链表通过更改指针实现高效的节点插入与删除,且可以灵活调整长度;但节点访问效率低、占用内存较多。常见的链表类型包括单向链表、循环链表、双向链表。</li>
<li>动态数组,又称列表,是基于数组实现的一种数据结构。它保留了数组的优势,同时可以灵活调整长度。列表的出现极大地提高了数组的易用性,但可能导致部分内存空间浪费。</li>
<li>下表总结并对比了数组与链表的各项特性。</li>
<li>下表总结并对比了数组与链表的各项特性与操作效率</li>
</ul>
<div class="center-table">
<table>
@ -1936,26 +2092,6 @@
<td>随机访问</td>
<td>插入、删除</td>
</tr>
</tbody>
</table>
</div>
<div class="admonition note">
<p class="admonition-title">缓存局部性</p>
<p>在计算机中,数据读写速度排序是“硬盘 &lt; 内存 &lt; CPU 缓存”。当我们访问数组元素时,计算机不仅会加载它,还会缓存其周围的其他数据,从而借助高速缓存来提升后续操作的执行速度。链表则不然,计算机只能挨个地缓存各个节点,这样的多次“搬运”降低了整体效率。</p>
</div>
<ul>
<li>下表对比了数组与链表在各种操作上的效率。</li>
</ul>
<div class="center-table">
<table>
<thead>
<tr>
<th>操作</th>
<th>数组</th>
<th>链表</th>
</tr>
</thead>
<tbody>
<tr>
<td>访问元素</td>
<td><span class="arithmatex">\(O(1)\)</span></td>
@ -1974,6 +2110,10 @@
</tbody>
</table>
</div>
<div class="admonition note">
<p class="admonition-title">缓存局部性</p>
<p>在计算机中,数据读写速度排序是“硬盘 &lt; 内存 &lt; CPU 缓存”。当我们访问数组元素时,计算机不仅会加载它,还会缓存其周围的其他数据,从而借助高速缓存来提升后续操作的执行速度。链表则不然,计算机只能挨个地缓存各个节点,这样的多次“搬运”降低了整体效率。</p>
</div>
<h2 id="441-q-a">4.4.1. &nbsp; Q &amp; A<a class="headerlink" href="#441-q-a" title="Permanent link">&para;</a></h2>
<div class="admonition question">
<p class="admonition-title">数组存储在栈上和存储在堆上,对时间效率和空间效率是否有影响?</p>
@ -2110,13 +2250,13 @@
<a href="../../chapter_stack_and_queue/stack/" class="md-footer__link md-footer__link--next" aria-label="下一页: 5.1. &amp;nbsp; 栈" rel="next">
<a href="../../chapter_stack_and_queue/" class="md-footer__link md-footer__link--next" aria-label="下一页: 5. &amp;nbsp; 栈与队列" rel="next">
<div class="md-footer__title">
<span class="md-footer__direction">
下一页
</span>
<div class="md-ellipsis">
5.1. &nbsp;
5. &nbsp;与队列
</div>
</div>
<div class="md-footer__button md-icon">