<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Queue on Kuqilin&#39;s Blog</title>
    <link>https://www.kuqilin.top/tags/queue/</link>
    <description>Recent content from Kuqilin&#39;s Blog</description>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    
    <managingEditor>kuqilin@outlook.com (Kuqilin)</managingEditor>
    <webMaster>kuqilin@outlook.com (Kuqilin)</webMaster>
    
    <copyright>本博客所有文章除特别声明外，均采用 BY-NC-SA 许可协议。转载请注明出处！</copyright>
    
    <lastBuildDate>Sat, 13 May 2023 00:00:00 +0000</lastBuildDate>
    
    
    <atom:link href="https://www.kuqilin.top/tags/queue/index.xml" rel="self" type="application/rss&#43;xml" />
    

    
      
    

    <item>
      <title>栈、队列和双端队列的Python实现</title>
      <link>https://www.kuqilin.top/post/zhan-dui-lie-hu-shuang-duan-dui-lie-di-python-shi-xian/</link>
      <pubDate>Sat, 13 May 2023 00:00:00 &#43;0000</pubDate>
      <author>kuqilin@outlook.com (Kuqilin)</author>
      <guid>https://www.kuqilin.top/post/zhan-dui-lie-hu-shuang-duan-dui-lie-di-python-shi-xian/</guid>
      <description>
        <![CDATA[<h1>栈、队列和双端队列的Python实现</h1><p>作者：Kuqilin（kuqilin@outlook.com）</p>
        
          <h1 id="栈队列和双端队列的python实现">
<a class="header-anchor" href="#%e6%a0%88%e9%98%9f%e5%88%97%e5%92%8c%e5%8f%8c%e7%ab%af%e9%98%9f%e5%88%97%e7%9a%84python%e5%ae%9e%e7%8e%b0"></a>
栈、队列和双端队列的Python实现
</h1><h2 id="栈的python实现">
<a class="header-anchor" href="#%e6%a0%88%e7%9a%84python%e5%ae%9e%e7%8e%b0"></a>
栈的Python实现
</h2><p>栈是元素的有序集合，添加操作与移除操作都发生在其顶端。栈的操作顺序是<strong>LIFO</strong>(<em>Last In First Out</em>)。 <del>这种东西小学生都会。</del> 如果不会请点击<a href="https://baike.baidu.com/item/%E6%A0%88/12808149">链接</a>查看。<br>
栈支持以下操作：</p>
<ul>
<li><code>Stack()</code>创建一个空栈。</li>
<li><code>push(item)</code>讲一个元素添加到栈的顶端。需要参数 <em>item</em> ，且无返回值。</li>
<li><code>pop()</code>将栈顶端的元素移除。不需要参数，但会返回顶端的元素，并且修改栈的内容。</li>
<li><code>peek()</code>返回栈顶端的元素，但是并不移除该元素。不需要参数，也不会修改栈的内容。</li>
<li><code>isEmpty()</code>检查栈是否为空。不需要参数，且返回布尔值。</li>
<li><code>size()</code>返回栈中元素的数目。不需要参数，且返回一个整数。<br>
栈的方法：</li>
</ul>
<table>
	<thead>
			<tr>
					<th style="text-align: center">栈操作</th>
					<th style="text-align: center">栈内容</th>
					<th style="text-align: center">返回值</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td style="text-align: center"><code>s.isEmpty()</code></td>
					<td style="text-align: center"><code>[]</code></td>
					<td style="text-align: center"><code>True</code></td>
			</tr>
			<tr>
					<td style="text-align: center"><code>s.push(4)</code></td>
					<td style="text-align: center"><code>[4]</code></td>
					<td style="text-align: center"><code>None</code></td>
			</tr>
			<tr>
					<td style="text-align: center"><code>s.push('dog')</code></td>
					<td style="text-align: center"><code>[4, 'dog']</code></td>
					<td style="text-align: center"><code>None</code></td>
			</tr>
			<tr>
					<td style="text-align: center"><code>s.peek()</code></td>
					<td style="text-align: center"><code>[4, 'dog']</code></td>
					<td style="text-align: center"><code>'dog'</code></td>
			</tr>
			<tr>
					<td style="text-align: center"><code>s.push(True)</code></td>
					<td style="text-align: center"><code>[4, 'dog', True]</code></td>
					<td style="text-align: center"><code>None</code></td>
			</tr>
			<tr>
					<td style="text-align: center"><code>s.size()</code></td>
					<td style="text-align: center"><code>[4, 'dog', True]</code></td>
					<td style="text-align: center"><code>3</code></td>
			</tr>
			<tr>
					<td style="text-align: center"><code>s.isEmpty()</code></td>
					<td style="text-align: center"><code>[4, 'dog', True]</code></td>
					<td style="text-align: center"><code>False</code></td>
			</tr>
			<tr>
					<td style="text-align: center"><code>s.pop()</code></td>
					<td style="text-align: center"><code>[4, 'dog']</code></td>
					<td style="text-align: center"><code>True</code></td>
			</tr>
			<tr>
					<td style="text-align: center"><code>s.size()</code></td>
					<td style="text-align: center"><code>[4, 'dog']</code></td>
					<td style="text-align: center"><code>2</code></td>
			</tr>
	</tbody>
</table>
<h4 id="代码如下">
<a class="header-anchor" href="#%e4%bb%a3%e7%a0%81%e5%a6%82%e4%b8%8b"></a>
代码如下：
</h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Stack</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="s1">&#39;&#39;&#39;这是一个栈&#39;&#39;&#39;</span>
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="bp">self</span><span class="o">.</span><span class="n">items</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">isEmpty</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">items</span> <span class="o">==</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">push</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="bp">self</span><span class="o">.</span><span class="n">items</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">item</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">pop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">items</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">peek</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">items</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">items</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">size</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">items</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">items</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">items</span><span class="p">)</span>
</span></span></code></pre></div><h4 id="以上代码的栈操作及其返回值">
<a class="header-anchor" href="#%e4%bb%a5%e4%b8%8a%e4%bb%a3%e7%a0%81%e7%9a%84%e6%a0%88%e6%93%8d%e4%bd%9c%e5%8f%8a%e5%85%b6%e8%bf%94%e5%9b%9e%e5%80%bc"></a>
以上代码的栈操作及其返回值：
</h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="o">&gt;&gt;&gt;</span> <span class="n">s</span> <span class="o">=</span> <span class="n">Stack</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="o">&gt;&gt;&gt;</span> <span class="n">s</span><span class="o">.</span><span class="n">isEmpty</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="kc">True</span>
</span></span><span class="line"><span class="cl"><span class="o">&gt;&gt;&gt;</span> <span class="n">s</span><span class="o">.</span><span class="n">push</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="o">&gt;&gt;&gt;</span> <span class="n">s</span><span class="o">.</span><span class="n">push</span><span class="p">(</span><span class="s1">&#39;dog&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="o">&gt;&gt;&gt;</span> <span class="n">s</span><span class="o">.</span><span class="n">peek</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="s1">&#39;dog&#39;</span>
</span></span><span class="line"><span class="cl"><span class="o">&gt;&gt;&gt;</span> <span class="n">s</span><span class="o">.</span><span class="n">push</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="o">&gt;&gt;&gt;</span> <span class="n">s</span><span class="o">.</span><span class="n">size</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="mi">3</span>
</span></span><span class="line"><span class="cl"><span class="o">&gt;&gt;&gt;</span> <span class="n">s</span><span class="o">.</span><span class="n">isEmpty</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="kc">False</span>
</span></span><span class="line"><span class="cl"><span class="o">&gt;&gt;&gt;</span> <span class="n">s</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="kc">True</span>
</span></span><span class="line"><span class="cl"><span class="o">&gt;&gt;&gt;</span> <span class="n">s</span><span class="o">.</span><span class="n">size</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="mi">2</span>
</span></span><span class="line"><span class="cl"><span class="o">&gt;&gt;&gt;</span><span class="nb">print</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="mi">4</span><span class="p">,</span> <span class="s1">&#39;dog&#39;</span><span class="p">]</span>
</span></span></code></pre></div><h2 id="队列的python实现">
<a class="header-anchor" href="#%e9%98%9f%e5%88%97%e7%9a%84python%e5%ae%9e%e7%8e%b0"></a>
队列的Python实现
</h2><p>队列是有序集合，添加操作发生在“尾部”，移除操作发生在“头部”。操作顺序是<strong>FIFO</strong>（ <em>First In First Out</em> ） <del>这东西小学二年级就学了（确信）。</del> 一年级请点击<a href="https://baike.baidu.com/item/%E9%98%9F%E5%88%97/14580481">链接</a>学习。<br>
队列支持以下操作：</p>
<ul>
<li><code>Queue()</code>创建一个空队列。</li>
<li><code>enqueue(item)</code>在队尾添加 <em>item</em> 元素，没有返回值。</li>
<li><code>dequeue()</code>在队头返回并移除一个元素。</li>
<li><code>isEmpty()</code>检查队列是否为空，不需要参数，返回布尔值。</li>
<li><code>size()</code>返回队列中元素的数目，整数型。<br>
队列的方法：</li>
</ul>
<table>
	<thead>
			<tr>
					<th style="text-align: left">队列操作</th>
					<th style="text-align: left">队列内容</th>
					<th style="text-align: left">返回值</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td style="text-align: left"><code>q.isEmpty()</code></td>
					<td style="text-align: left"><code>[]</code></td>
					<td style="text-align: left"><code>True</code></td>
			</tr>
			<tr>
					<td style="text-align: left"><code>q.enqueue(4)</code></td>
					<td style="text-align: left"><code>[4]</code></td>
					<td style="text-align: left"><code>None</code></td>
			</tr>
			<tr>
					<td style="text-align: left"><code>q.enqueue('dog')</code></td>
					<td style="text-align: left"><code>['dog', 4]</code></td>
					<td style="text-align: left"><code>None</code></td>
			</tr>
			<tr>
					<td style="text-align: left"><code>q.enqueue(True)</code></td>
					<td style="text-align: left"><code>[True, 'dog', 4]</code></td>
					<td style="text-align: left"><code>None</code></td>
			</tr>
			<tr>
					<td style="text-align: left"><code>q.size()</code></td>
					<td style="text-align: left"><code>[True, 'dog', 4]</code></td>
					<td style="text-align: left"><code>3</code></td>
			</tr>
			<tr>
					<td style="text-align: left"><code>q.isEmpty()</code></td>
					<td style="text-align: left"><code>[True, 'dog', 4]</code></td>
					<td style="text-align: left"><code>False</code></td>
			</tr>
			<tr>
					<td style="text-align: left"><code>q.dequeue()</code></td>
					<td style="text-align: left"><code>[True, 'dog']</code></td>
					<td style="text-align: left"><code>4</code></td>
			</tr>
			<tr>
					<td style="text-align: left"><code>q.size()</code></td>
					<td style="text-align: left"><code>[True, 'dog']</code></td>
					<td style="text-align: left"><code>2</code></td>
			</tr>
	</tbody>
</table>
<h4 id="用python实现队列">
<a class="header-anchor" href="#%e7%94%a8python%e5%ae%9e%e7%8e%b0%e9%98%9f%e5%88%97"></a>
用Python实现队列:
</h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Queue</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="s1">&#39;&#39;&#39;这是一个队列&#39;&#39;&#39;</span>
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="bp">self</span><span class="o">.</span><span class="n">items</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">isEmpty</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">item</span> <span class="o">==</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">enqueue</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="bp">self</span><span class="o">.</span><span class="n">items</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">item</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">dequeue</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="bp">self</span><span class="o">.</span><span class="n">items</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="nf">size</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">items</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">items</span><span class="p">)</span>
</span></span></code></pre></div><h4 id="以上代码的队列操作及其返回值">
<a class="header-anchor" href="#%e4%bb%a5%e4%b8%8a%e4%bb%a3%e7%a0%81%e7%9a%84%e9%98%9f%e5%88%97%e6%93%8d%e4%bd%9c%e5%8f%8a%e5%85%b6%e8%bf%94%e5%9b%9e%e5%80%bc"></a>
以上代码的队列操作及其返回值：
</h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="o">&gt;&gt;&gt;</span> <span class="n">q</span> <span class="o">=</span> <span class="n">Queue</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="o">&gt;&gt;&gt;</span> <span class="n">q</span><span class="o">.</span><span class="n">isEmpty</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="kc">True</span>
</span></span><span class="line"><span class="cl"><span class="o">&gt;&gt;&gt;</span> <span class="n">q</span><span class="o">.</span><span class="n">enqueue</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="o">&gt;&gt;&gt;</span> <span class="n">q</span><span class="o">.</span><span class="n">enqueue</span><span class="p">(</span><span class="s1">&#39;dog&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="o">&gt;&gt;&gt;</span> <span class="n">q</span><span class="o">.</span><span class="n">enqueue</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="o">&gt;&gt;&gt;</span> <span class="n">q</span><span class="o">.</span><span class="n">size</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="mi">3</span>
</span></span><span class="line"><span class="cl"><span class="o">&gt;&gt;&gt;</span> <span class="n">q</span><span class="o">.</span><span class="n">isEmpty</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="kc">False</span>
</span></span><span class="line"><span class="cl"><span class="o">&gt;&gt;&gt;</span> <span class="n">q</span><span class="o">.</span><span class="n">dequeue</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="mi">4</span>
</span></span><span class="line"><span class="cl"><span class="o">&gt;&gt;&gt;</span> <span class="n">q</span><span class="o">.</span><span class="n">size</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="mi">2</span>
</span></span><span class="line"><span class="cl"><span class="o">&gt;&gt;&gt;</span> <span class="nb">print</span><span class="p">(</span><span class="n">q</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="s1">&#39;dog&#39;</span><span class="p">,</span> <span class="kc">True</span><span class="p">]</span>
</span></span></code></pre></div><p>© 苦麒麟</p>

        
        <hr><p>本文2023-05-13首发于<a href='https://www.kuqilin.top/'>Kuqilin's Blog</a>，最后修改于2023-05-13</p><p>本博客所有文章除特别声明外，均采用 BY-NC-SA 许可协议。转载请注明出处！</p>]]>
      </description>
      
        <category>Python</category>
      
    </item>
    
  </channel>
</rss>
