mirror of
https://github.com/krahets/hello-algo.git
synced 2026-04-07 20:50:58 +08:00
deploy
This commit is contained in:
@@ -4494,8 +4494,8 @@
|
||||
<p>我们可以使用一个变量 <code>front</code> 指向队首元素的索引,并维护一个变量 <code>queSize</code> 用于记录队列长度。定义 <code>rear = front + queSize</code> ,这个公式计算出的 <code>rear</code> 指向队尾元素之后的下一个位置。</p>
|
||||
<p>基于此设计,<strong>数组中包含元素的有效区间为 [front, rear - 1]</strong>,进而:</p>
|
||||
<ul>
|
||||
<li>对于入队操作,将输入元素赋值给 <code>rear</code> 索引处,并将 <code>queSize</code> 增加 1 ;</li>
|
||||
<li>对于出队操作,只需将 <code>front</code> 增加 1 ,并将 <code>queSize</code> 减少 1 ;</li>
|
||||
<li>对于入队操作,将输入元素赋值给 <code>rear</code> 索引处,并将 <code>queSize</code> 增加 1 。</li>
|
||||
<li>对于出队操作,只需将 <code>front</code> 增加 1 ,并将 <code>queSize</code> 减少 1 。</li>
|
||||
</ul>
|
||||
<p>可以看到,入队和出队操作都只需进行一次操作,时间复杂度均为 <span class="arithmatex">\(O(1)\)</span> 。</p>
|
||||
<div class="tabbed-set tabbed-alternate" data-tabs="4:3"><input checked="checked" id="__tabbed_4_1" name="__tabbed_4" type="radio" /><input id="__tabbed_4_2" name="__tabbed_4" type="radio" /><input id="__tabbed_4_3" name="__tabbed_4" type="radio" /><div class="tabbed-labels"><label for="__tabbed_4_1">ArrayQueue</label><label for="__tabbed_4_2">push()</label><label for="__tabbed_4_3">pop()</label></div>
|
||||
|
||||
@@ -4997,8 +4997,8 @@
|
||||
<p>在链表实现中,链表的扩容非常灵活,不存在上述数组扩容时效率降低的问题。但是,入栈操作需要初始化节点对象并修改指针,因此效率相对较低。不过,如果入栈元素本身就是节点对象,那么可以省去初始化步骤,从而提高效率。</p>
|
||||
<p>综上所述,当入栈与出栈操作的元素是基本数据类型(如 <code>int</code> , <code>double</code> )时,我们可以得出以下结论:</p>
|
||||
<ul>
|
||||
<li>基于数组实现的栈在触发扩容时效率会降低,但由于扩容是低频操作,因此平均效率更高;</li>
|
||||
<li>基于链表实现的栈可以提供更加稳定的效率表现;</li>
|
||||
<li>基于数组实现的栈在触发扩容时效率会降低,但由于扩容是低频操作,因此平均效率更高。</li>
|
||||
<li>基于链表实现的栈可以提供更加稳定的效率表现。</li>
|
||||
</ul>
|
||||
<h3 id="_5">空间效率<a class="headerlink" href="#_5" title="Permanent link">¶</a></h3>
|
||||
<p>在初始化列表时,系统会为列表分配“初始容量”,该容量可能超过实际需求。并且,扩容机制通常是按照特定倍率(例如 2 倍)进行扩容,扩容后的容量也可能超出实际需求。因此,<strong>基于数组实现的栈可能造成一定的空间浪费</strong>。</p>
|
||||
|
||||
Reference in New Issue
Block a user