This commit is contained in:
krahets
2023-11-26 02:06:45 +08:00
parent 8b60940d5a
commit baa76db4e1
110 changed files with 7129 additions and 254 deletions

View File

@@ -895,6 +895,8 @@
@@ -1119,12 +1121,40 @@
<li class="md-nav__item">
<a href="../ram_and_cache/" class="md-nav__link">
<span class="md-ellipsis">
4.4 &nbsp; 内存与缓存 *
</span>
<span class="md-status md-status--new" title="最近添加">
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../summary/" class="md-nav__link">
<span class="md-ellipsis">
4.4 &nbsp; 小结
4.5 &nbsp; 小结
</span>
@@ -3779,7 +3809,7 @@
<div class="highlight"><span class="filename">array.swift</span><pre><span></span><code><a id="__codelineno-29-1" name="__codelineno-29-1" href="#__codelineno-29-1"></a><span class="cm">/* 在数组的索引 index 处插入元素 num */</span>
<a id="__codelineno-29-2" name="__codelineno-29-2" href="#__codelineno-29-2"></a><span class="kd">func</span> <span class="nf">insert</span><span class="p">(</span><span class="n">nums</span><span class="p">:</span> <span class="kr">inout</span> <span class="p">[</span><span class="nb">Int</span><span class="p">],</span> <span class="n">num</span><span class="p">:</span> <span class="nb">Int</span><span class="p">,</span> <span class="n">index</span><span class="p">:</span> <span class="nb">Int</span><span class="p">)</span> <span class="p">{</span>
<a id="__codelineno-29-3" name="__codelineno-29-3" href="#__codelineno-29-3"></a> <span class="c1">// 把索引 index 以及之后的所有元素向后移动一位</span>
<a id="__codelineno-29-4" name="__codelineno-29-4" href="#__codelineno-29-4"></a> <span class="k">for</span> <span class="n">i</span> <span class="k">in</span> <span class="n">sequence</span><span class="p">(</span><span class="bp">first</span><span class="p">:</span> <span class="n">nums</span><span class="p">.</span><span class="bp">count</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">next</span><span class="p">:</span> <span class="p">{</span> <span class="nv">$0</span> <span class="o">&gt;</span> <span class="n">index</span> <span class="o">+</span> <span class="mi">1</span> <span class="p">?</span> <span class="nv">$0</span> <span class="o">-</span> <span class="mi">1</span> <span class="p">:</span> <span class="kc">nil</span> <span class="p">})</span> <span class="p">{</span>
<a id="__codelineno-29-4" name="__codelineno-29-4" href="#__codelineno-29-4"></a> <span class="k">for</span> <span class="n">i</span> <span class="k">in</span> <span class="n">nums</span><span class="p">.</span><span class="bp">indices</span><span class="p">.</span><span class="bp">dropFirst</span><span class="p">(</span><span class="n">index</span><span class="p">).</span><span class="n">reversed</span><span class="p">()</span> <span class="p">{</span>
<a id="__codelineno-29-5" name="__codelineno-29-5" href="#__codelineno-29-5"></a> <span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="p">=</span> <span class="n">nums</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
<a id="__codelineno-29-6" name="__codelineno-29-6" href="#__codelineno-29-6"></a> <span class="p">}</span>
<a id="__codelineno-29-7" name="__codelineno-29-7" href="#__codelineno-29-7"></a> <span class="c1">// 将 num 赋给 index 处元素</span>
@@ -3921,12 +3951,11 @@
<div class="tabbed-block">
<div class="highlight"><span class="filename">array.swift</span><pre><span></span><code><a id="__codelineno-41-1" name="__codelineno-41-1" href="#__codelineno-41-1"></a><span class="cm">/* 删除索引 index 处元素 */</span>
<a id="__codelineno-41-2" name="__codelineno-41-2" href="#__codelineno-41-2"></a><span class="kd">func</span> <span class="nf">remove</span><span class="p">(</span><span class="n">nums</span><span class="p">:</span> <span class="kr">inout</span> <span class="p">[</span><span class="nb">Int</span><span class="p">],</span> <span class="n">index</span><span class="p">:</span> <span class="nb">Int</span><span class="p">)</span> <span class="p">{</span>
<a id="__codelineno-41-3" name="__codelineno-41-3" href="#__codelineno-41-3"></a> <span class="kd">let</span> <span class="nv">count</span> <span class="p">=</span> <span class="n">nums</span><span class="p">.</span><span class="bp">count</span>
<a id="__codelineno-41-4" name="__codelineno-41-4" href="#__codelineno-41-4"></a> <span class="c1">// 把索引 index 之后的所有元素向前移动一位</span>
<a id="__codelineno-41-5" name="__codelineno-41-5" href="#__codelineno-41-5"></a> <span class="k">for</span> <span class="n">i</span> <span class="k">in</span> <span class="n">sequence</span><span class="p">(</span><span class="bp">first</span><span class="p">:</span> <span class="n">index</span><span class="p">,</span> <span class="n">next</span><span class="p">:</span> <span class="p">{</span> <span class="nv">$0</span> <span class="o">&lt;</span> <span class="bp">count</span> <span class="o">-</span> <span class="mi">1</span> <span class="o">-</span> <span class="mi">1</span> <span class="p">?</span> <span class="nv">$0</span> <span class="o">+</span> <span class="mi">1</span> <span class="p">:</span> <span class="kc">nil</span> <span class="p">})</span> <span class="p">{</span>
<a id="__codelineno-41-6" name="__codelineno-41-6" href="#__codelineno-41-6"></a> <span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="p">=</span> <span class="n">nums</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span>
<a id="__codelineno-41-7" name="__codelineno-41-7" href="#__codelineno-41-7"></a> <span class="p">}</span>
<a id="__codelineno-41-8" name="__codelineno-41-8" href="#__codelineno-41-8"></a><span class="p">}</span>
<a id="__codelineno-41-3" name="__codelineno-41-3" href="#__codelineno-41-3"></a> <span class="c1">// 把索引 index 之后的所有元素向前移动一位</span>
<a id="__codelineno-41-4" name="__codelineno-41-4" href="#__codelineno-41-4"></a> <span class="k">for</span> <span class="n">i</span> <span class="k">in</span> <span class="n">nums</span><span class="p">.</span><span class="bp">indices</span><span class="p">.</span><span class="bp">dropFirst</span><span class="p">(</span><span class="n">index</span><span class="p">).</span><span class="bp">dropLast</span><span class="p">()</span> <span class="p">{</span>
<a id="__codelineno-41-5" name="__codelineno-41-5" href="#__codelineno-41-5"></a> <span class="n">nums</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="p">=</span> <span class="n">nums</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span>
<a id="__codelineno-41-6" name="__codelineno-41-6" href="#__codelineno-41-6"></a> <span class="p">}</span>
<a id="__codelineno-41-7" name="__codelineno-41-7" href="#__codelineno-41-7"></a><span class="p">}</span>
</code></pre></div>
</div>
<div class="tabbed-block">

View File

@@ -895,6 +895,8 @@
@@ -1003,12 +1005,40 @@
<li class="md-nav__item">
<a href="ram_and_cache/" class="md-nav__link">
<span class="md-ellipsis">
4.4 &nbsp; 内存与缓存 *
</span>
<span class="md-status md-status--new" title="最近添加">
</span>
</a>
</li>
<li class="md-nav__item">
<a href="summary/" class="md-nav__link">
<span class="md-ellipsis">
4.4 &nbsp; 小结
4.5 &nbsp; 小结
</span>
@@ -3302,7 +3332,8 @@
<li><a href="https://www.hello-algo.com/chapter_array_and_linkedlist/array/">4.1 &nbsp; 数组</a></li>
<li><a href="https://www.hello-algo.com/chapter_array_and_linkedlist/linked_list/">4.2 &nbsp; 链表</a></li>
<li><a href="https://www.hello-algo.com/chapter_array_and_linkedlist/list/">4.3 &nbsp; 列表</a></li>
<li><a href="https://www.hello-algo.com/chapter_array_and_linkedlist/summary/">4.4 &nbsp; 小结</a></li>
<li><a href="https://www.hello-algo.com/chapter_array_and_linkedlist/ram_and_cache/">4.4 &nbsp; 内存与缓存 *</a></li>
<li><a href="https://www.hello-algo.com/chapter_array_and_linkedlist/summary/">4.5 &nbsp; 小结</a></li>
</ul>
<!-- Source file information -->

View File

@@ -895,6 +895,8 @@
@@ -1112,12 +1114,40 @@
<li class="md-nav__item">
<a href="../ram_and_cache/" class="md-nav__link">
<span class="md-ellipsis">
4.4 &nbsp; 内存与缓存 *
</span>
<span class="md-status md-status--new" title="最近添加">
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../summary/" class="md-nav__link">
<span class="md-ellipsis">
4.4 &nbsp; 小结
4.5 &nbsp; 小结
</span>
@@ -4433,19 +4463,14 @@
<td>分散内存空间</td>
</tr>
<tr>
<td>缓存局部性</td>
<td>友好</td>
<td>不友好</td>
</tr>
<tr>
<td>容量扩展</td>
<td>长度不可变</td>
<td>可灵活扩展</td>
</tr>
<tr>
<td>内存效率</td>
<td>占用内存少、浪费部分空间</td>
<td>占用内存多</td>
<td>元素占用内存少、但可能浪费空间</td>
<td>元素占用内存多</td>
</tr>
<tr>
<td>访问元素</td>

View File

@@ -18,7 +18,7 @@
<link rel="prev" href="../linked_list/">
<link rel="next" href="../summary/">
<link rel="next" href="../ram_and_cache/">
<link rel="icon" href="../../assets/images/favicon.png">
@@ -895,6 +895,8 @@
@@ -1105,12 +1107,40 @@
<li class="md-nav__item">
<a href="../ram_and_cache/" class="md-nav__link">
<span class="md-ellipsis">
4.4 &nbsp; 内存与缓存 *
</span>
<span class="md-status md-status--new" title="最近添加">
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../summary/" class="md-nav__link">
<span class="md-ellipsis">
4.4 &nbsp; 小结
4.5 &nbsp; 小结
</span>
@@ -3499,7 +3529,7 @@
<div class="tabbed-block">
<div class="highlight"><span class="filename">list_test.go</span><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a><span class="cm">/* 初始化列表 */</span>
<a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a><span class="c1">// 无初始值</span>
<a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a><span class="nx">nums1</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="p">[]</span><span class="kt">int</span>
<a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a><span class="nx">nums1</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="p">[]</span><span class="kt">int</span><span class="p">{}</span>
<a id="__codelineno-4-4" name="__codelineno-4-4" href="#__codelineno-4-4"></a><span class="c1">// 有初始值</span>
<a id="__codelineno-4-5" name="__codelineno-4-5" href="#__codelineno-4-5"></a><span class="nx">nums</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="p">[]</span><span class="kt">int</span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">}</span>
</code></pre></div>
@@ -5449,9 +5479,9 @@ aria-label="页脚"
<a
href="../summary/"
href="../ram_and_cache/"
class="md-footer__link md-footer__link--next"
aria-label="下一页: 4.4 &amp;nbsp; 小结"
aria-label="下一页: 4.4 &amp;nbsp; 内存与缓存 *"
rel="next"
>
<div class="md-footer__title">
@@ -5459,7 +5489,7 @@ aria-label="页脚"
下一页
</span>
<div class="md-ellipsis">
4.4 &nbsp; 小结
4.4 &nbsp; 内存与缓存 *
</div>
</div>
<div class="md-footer__button md-icon">
@@ -5568,13 +5598,13 @@ aria-label="页脚"
<a href="../summary/" class="md-footer__link md-footer__link--next" aria-label="下一页: 4.4 &amp;nbsp; 小结" rel="next">
<a href="../ram_and_cache/" class="md-footer__link md-footer__link--next" aria-label="下一页: 4.4 &amp;nbsp; 内存与缓存 *" rel="next">
<div class="md-footer__title">
<span class="md-footer__direction">
下一页
</span>
<div class="md-ellipsis">
4.4 &nbsp; 小结
4.4 &nbsp; 内存与缓存 *
</div>
</div>
<div class="md-footer__button md-icon">

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -15,7 +15,7 @@
<link rel="canonical" href="https://www.hello-algo.com/chapter_array_and_linkedlist/summary/">
<link rel="prev" href="../list/">
<link rel="prev" href="../ram_and_cache/">
<link rel="next" href="../../chapter_stack_and_queue/">
@@ -26,7 +26,7 @@
<title>4.4   小结 - Hello 算法</title>
<title>4.5   小结 - Hello 算法</title>
@@ -94,7 +94,7 @@
<div data-md-component="skip">
<a href="#44" class="md-skip">
<a href="#45" class="md-skip">
跳转至
</a>
@@ -129,7 +129,7 @@
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
4.4 &nbsp; 小结
4.5 &nbsp; 小结
</span>
</div>
@@ -895,6 +895,8 @@
@@ -1002,6 +1004,34 @@
<li class="md-nav__item">
<a href="../ram_and_cache/" class="md-nav__link">
<span class="md-ellipsis">
4.4 &nbsp; 内存与缓存 *
</span>
<span class="md-status md-status--new" title="最近添加">
</span>
</a>
</li>
@@ -1017,7 +1047,7 @@
<span class="md-ellipsis">
4.4 &nbsp; 小结
4.5 &nbsp; 小结
</span>
@@ -1028,7 +1058,7 @@
<span class="md-ellipsis">
4.4 &nbsp; 小结
4.5 &nbsp; 小结
</span>
@@ -3351,7 +3381,7 @@
<!-- Page content -->
<h1 id="44">4.4 &nbsp; 小结<a class="headerlink" href="#44" title="Permanent link">&para;</a></h1>
<h1 id="45">4.5 &nbsp; 小结<a class="headerlink" href="#45" title="Permanent link">&para;</a></h1>
<h3 id="1">1. &nbsp; 重点回顾<a class="headerlink" href="#1" title="Permanent link">&para;</a></h3>
<ul>
<li>数组和链表是两种基本的数据结构,分别代表数据在计算机内存中的两种存储方式:连续空间存储和分散空间存储。两者的特点呈现出互补的特性。</li>
@@ -3360,6 +3390,9 @@
<li>常见的链表类型包括单向链表、循环链表、双向链表,它们分别具有各自的应用场景。</li>
<li>列表是一种支持增删查改的元素有序集合,通常基于动态数组实现,其保留了数组的优势,同时可以灵活调整长度。</li>
<li>列表的出现大幅地提高了数组的实用性,但可能导致部分内存空间浪费。</li>
<li>程序运行时,数据主要存储在内存中。数组提供更高的内存空间效率,而链表则在内存使用上更加灵活。</li>
<li>缓存通过缓存行、预取机制以及空间和时间局部性等数据加载机制,为 CPU 提供快速数据访问,显著提升程序的执行效率。</li>
<li>由于数组具有更高的缓存命中率,因此它通常比链表更高效。在选择数据结构时,应根据具体需求和场景做出恰当选择。</li>
</ul>
<h3 id="2-q-a">2. &nbsp; Q &amp; A<a class="headerlink" href="#2-q-a" title="Permanent link">&para;</a></h3>
<div class="admonition question">
@@ -3445,9 +3478,9 @@ aria-label="页脚"
<a
href="../list/"
href="../ram_and_cache/"
class="md-footer__link md-footer__link--prev"
aria-label="上一页: 4.3 &amp;nbsp; 列表"
aria-label="上一页: 4.4 &amp;nbsp; 内存与缓存 *"
rel="prev"
>
<div class="md-footer__button md-icon">
@@ -3459,7 +3492,7 @@ aria-label="页脚"
上一页
</span>
<div class="md-ellipsis">
4.3 &nbsp; 列表
4.4 &nbsp; 内存与缓存 *
</div>
</div>
</a>
@@ -3571,7 +3604,7 @@ aria-label="页脚"
<nav class="md-footer__inner md-grid" aria-label="页脚" >
<a href="../list/" class="md-footer__link md-footer__link--prev" aria-label="上一页: 4.3 &amp;nbsp; 列表" rel="prev">
<a href="../ram_and_cache/" class="md-footer__link md-footer__link--prev" aria-label="上一页: 4.4 &amp;nbsp; 内存与缓存 *" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
@@ -3581,7 +3614,7 @@ aria-label="页脚"
上一页
</span>
<div class="md-ellipsis">
4.3 &nbsp; 列表
4.4 &nbsp; 内存与缓存 *
</div>
</div>
</a>