This commit is contained in:
krahets
2024-01-08 03:06:17 +08:00
parent bdd29d27e5
commit 49adc0a90c
13 changed files with 52 additions and 144 deletions

View File

@@ -3529,23 +3529,15 @@
<li>UTF-8 是最受欢迎的 Unicode 编码方法通用性非常好。它是一种变长的编码方法具有很好的扩展性有效提升了存储空间的使用效率。UTF-16 和 UTF-32 是等长的编码方法。在编码中文时UTF-16 占用的空间比 UTF-8 更小。Java 和 C# 等编程语言默认使用 UTF-16 编码。</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">
<p class="admonition-title">为什么哈希表同时包含线性数据结构和非线性数据结构?</p>
<p>哈希表底层是数组,而为了解决哈希冲突,我们可能会使用“链式地址”(后续“哈希冲突”章节会讲):数组中每个桶指向一个链表,当链表长度超过一定阈值时,又可能被转化为树(通常为红黑树)。
从存储的角度来看,哈希表的底层是数组,其中每一个桶槽位可能包含一个值,也可能包含一个链表或一棵树。因此,哈希表可能同时包含线性数据结构(数组、链表)和非线性数据结构(树)。</p>
</div>
<div class="admonition question">
<p class="admonition-title"><code>char</code> 类型的长度是 1 字节吗?</p>
<p><strong>Q</strong>:为什么哈希表同时包含线性数据结构和非线性数据结构?</p>
<p>哈希表底层是数组,而为了解决哈希冲突,我们可能会使用“链式地址”(后续“哈希冲突”章节会讲):数组中每个桶指向一个链表,当链表长度超过一定阈值时,又可能被转化为树(通常为红黑树)。</p>
<p>从存储的角度来看,哈希表底层是数组,中每个桶槽位可能包含一个值,也可能包含一个链表或一棵树。因此,哈希表可能同时包含线性数据结构(数组、链表)和非线性数据结构(树)。</p>
<p><strong>Q</strong><code>char</code> 类型的长度是 1 字节吗?</p>
<p><code>char</code> 类型的长度由编程语言采用的编码方法决定。例如Java、JavaScript、TypeScript、C# 都采用 UTF-16 编码(保存 Unicode 码点),因此 <code>char</code> 类型的长度为 2 字节。</p>
</div>
<div class="admonition question">
<p class="admonition-title">基于数组实现的数据结构也称“静态数据结构” 是否有歧义?栈也可以进行出栈和入栈等操作,这些操作都是“动态”的。</p>
<p><strong>Q</strong>:基于数组实现的数据结构也称“静态数据结构” 是否有歧义?栈也可以进行出栈和入栈等操作,这些操作都是“动态”的。</p>
<p>栈确实可以实现动态的数据操作,但数据结构仍然是“静态”(长度不可变)的。尽管基于数组的数据结构可以动态地添加或删除元素,但它们的容量是固定的。如果数据量超出了预分配的大小,就需要创建一个新的更大的数组,并将旧数组的内容复制到新数组中。</p>
</div>
<div class="admonition question">
<p class="admonition-title">在构建栈(队列)的时候,未指定它的大小,为什么它们是“静态数据结构”呢?</p>
<p><strong>Q</strong>:在构建栈(队列)的时候,未指定它的大小,为什么它们是“静态数据结构”呢?</p>
<p>在高级编程语言中我们无须人工指定栈队列的初始容量这个工作由类内部自动完成。例如Java 的 <code>ArrayList</code> 的初始容量通常为 10。另外扩容操作也是自动实现的。详见后续的“列表”章节。</p>
</div>
<!-- Source file information -->