This commit is contained in:
krahets
2023-10-17 00:34:17 +08:00
parent 0ffc26cb53
commit b9e72e2b86
7 changed files with 119 additions and 113 deletions

View File

@ -3426,8 +3426,14 @@
<!-- Page content -->
<h1 id="43">4.3 &nbsp; 列表<a class="headerlink" href="#43" title="Permanent link">&para;</a></h1>
<p><strong>数组长度不可变导致实用性降低</strong>。在实际中,我们可能事先无法确定需要存储多少数据,这使数组长度的选择变得困难。若长度过小,需要在持续添加数据时频繁扩容数组;若长度过大,则会造成内存空间的浪费</p>
<p>为解决此问题,出现了一种被称为「动态数组 dynamic array」的数据结构即长度可变的数组也常被称为「列表 list」。列表基于数组实现继承了数组的优点并且可以在程序运行过程中动态扩容。我们可以在列表中自由地添加元素而无须担心超过容量限制。</p>
<p>「列表 list」是一个抽象的数据结构概念它表示元素的有序集合支持元素访问、修改、添加、删除和遍历等操作无需使用者考虑容量限制的问题。列表可以基于链表或数组实现</p>
<ul>
<li>链表天然可以被看作是一个列表,其支持元素增删查改操作,并且可以灵活动态扩容。</li>
<li>数组也支持元素增删查改,但由于其长度不可变,因此只能被看作是一个具有长度限制的列表。</li>
</ul>
<p>当使用数组实现列表时,<strong>长度不可变的性质会导致列表的实用性降低</strong>。这是因为我们通常无法事先确定需要存储多少数据,从而难以选择合适的列表长度。若长度过小,则很可能无法满足使用需求;若长度过大,则会造成内存空间的浪费。</p>
<p>为解决此问题,我们可以使用「动态数组 dynamic array」来实现列表。它继承了数组的各项优点并且可以在程序运行过程中进行动态扩容。</p>
<p>实际上,<strong>许多编程语言中的标准库提供的列表都是基于动态数组实现的</strong>,例如 Python 中的 <code>list</code> 、Java 中的 <code>ArrayList</code> 、C++ 中的 <code>vector</code> 和 C# 中的 <code>List</code> 等。在接下来的讨论中,我们将把“列表”和“动态数组”视为等同的概念。</p>
<h2 id="431">4.3.1 &nbsp; 列表常用操作<a class="headerlink" href="#431" title="Permanent link">&para;</a></h2>
<h3 id="1">1. &nbsp; 初始化列表<a class="headerlink" href="#1" title="Permanent link">&para;</a></h3>
<p>我们通常使用“无初始值”和“有初始值”这两种初始化方法。</p>