1. 程式人生 > >Python 如何用列表實現棧和佇列

Python 如何用列表實現棧和佇列

前面學習了列表的基礎知識,本著學以致用的原則,就想著如何通過列表來實現資料結構棧和佇列。

1.棧結構,其實就是一個後進先出的一個線性表,只能在棧頂壓入或彈出元素。用列表表示棧,則向棧中壓入元素,可以用列表的append()方法來實現,彈出棧頂元素可以用列表的pop()方法實現。

>>> x=[]            #建立一個空列表,此處表示棧
>>> x
[]
>>> x.append('a')   #壓入元素'a'
>>> x
['a']
>>> x.append('b')   #壓入元素'b'
>>> x
['a', 'b']
>>> x.pop()         #彈出棧頂元素'b'
'b'
>>> x
['a']
>>> x.pop()         #彈出棧頂元素'a'
'a'
>>> x
[]
>>> x.pop()         #試圖對一個空棧做彈出操作,會報異常
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: pop from empty list
2.佇列,其實就是一個先進先出的線性表,只能在隊首執行刪除操作,在隊尾執行插入操作。用列表表示佇列,可以用append()方法實現在隊尾插入元素,用pop(0)方法實現在隊首刪除元素。
>>> x=[]
>>> x.append('a')
>>> x
['a']
>>> x.append('b')
>>> x
['a', 'b']
>>> x.pop(0)
'a'
>>> x.pop(0)
'b'
>>> x.pop(0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: pop from empty list
細心觀察剋制,上面是把列表的最左邊當做了佇列的首,把最右邊當做了尾(左首右尾)。也可以通過列表實現相反的佇列,右首左尾。用insert(0,...)方法實現隊尾插入元素,用pop()實現隊首刪除元素。(這樣做是有意義的,人們習慣於把佇列右邊作為首的)
>>> x=[]
>>> x.insert(0,'a')
>>> x
['a']
>>> x.insert(0,'b')
>>> x
['b', 'a']      #是不是發現列表順序和上面正好相反
>>> x.pop()
'a'
>>> x.pop()
'b'

備註:當然也可以使用insert(0,...)和pop(0)兩個方法實現棧,不過這樣不太符合人們的直觀感受。

相關推薦

Python列表實現佇列(二)

用列表實現佇列        佇列和棧實現的功能差不多,無非是入佇列,出佇列,佇列長度等等。其中,入佇列可以用列表的append()來實現,出佇列可以使用pop(0)來實現。由於這個實現方法比較簡單,因此它也是最低效的。append方法入佇列和棧實

Python列表實現佇列(一)

用列表實現棧 棧方法 列表實現 S.push() L.append() S.pop() L.pop() S.top()

python_列表實現佇列

棧 棧的結構: 棧是先進後出(LIFO-first in last out); 類似於往箱子裡面放書; 程式碼實現如下: (實際應用中這樣太麻煩,將來會用類實現) 佇列 佇列結構: 佇列是

Python 如何用列表實現佇列

前面學習了列表的基礎知識,本著學以致用的原則,就想著如何通過列表來實現資料結構棧和佇列。 1.棧結構,其實就是一個後進先出的一個線性表,只能在棧頂壓入或彈出元素。用列表表示棧,則向棧中壓入元素,可以用列表的append()方法來實現,彈出棧頂元素可以用列表的pop()方法實

python列表的操作以及使用列表實現佇列

>>> a = [1, 2, 3, 4, 5, 6]>>> a.append(45)>>> a[1, 2, 3, 4, 5, 6,45]首先我們建立了一個列表 a。然後呼叫列表的方法 a.append(45) 新增元素 4

Python列表作為佇列 Collections中的各種方法

Collections中的各種方法 閱讀目錄(Content) 一、各種方法介紹 二、程式碼部分 回到頂部(go to top) 一、各種方法介紹 Counter    統計個數   elements&n

佇列C++實現佇列

棧是一種後進先出的線型結構,C++實現棧的程式碼如下: #include <iostream> using namespace std; #define MAXLEN 50 typede

python列表練習-python實現佇列

1.棧的工作原理:先進後出 入棧 出棧 棧頂元素 棧的長度 棧是否為空 stack = [] info = """ 棧操作 1.入棧 2.出棧 3.棧頂元素 4.棧的長度 5.棧是否為空 """ while True:

Python 如何用列表實現隊列?

pen 彈出 module trace 執行 方法 ace 元素 異常 1.棧結構,其實就是一個後進先出的一個線性表,只能在棧頂壓入或彈出元素。用列表表示棧,則向棧中壓入元素,可以用列表的append()方法來實現,彈出棧頂元素可以用列表的pop()方法實現。 1 &g

Python中的連結串列之單向連結串列實現佇列

Python中除了列表,還有連結串列這樣的基礎資料結構,之前我們都是介紹用列表實現棧、佇列這樣的資料結構的,接下來我們看一下用連結串列實現的棧和佇列。 既然列表已經可以實現棧和隊列了,那麼連結串列又有什麼存在的意義呢?當然是因為列表有一些明細的缺點: 記憶體的

python實現佇列

利用python列表的操作,利用選單的形式實現棧和佇列 棧: stack=[] def push(): stack.append(input('enter: ').strip()) def

作業1#python列表實現多用戶登錄,並有三次機會

循環 HA 成功 NPU name 單用戶 登錄 [1] and 1 username = ["juebai","haha"] 2 password = [123,456] 3 count = 0 4 while count < 3: 5 _use

js 實現佇列

js實現棧或者佇列有兩種方式: 1.陣列:陣列本身提供棧方法(push,pop),佇列方法(push,shift)。 程式碼實現(棧): /*=======棧結構=======*/ var stack=function(){ this.data=[] this.push=push

C語言實現佇列(佇列的基本操作)

棧: 棧:棧(stack)又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。 特點:先進後出 stack.h #pragma once #include <stdio.h> #include <

python 語法:實現佇列

學資料結構的時候,用c語言實現棧與佇列可不容易。用python只要幾行程式碼就可以了,基於列表實現棧,基於雙端列表實現佇列。 棧(後進先出) stack = [1, 2, 3, 4] stack.append(5) # 入棧 stack.pop() # 出棧 佇列(先進先

python資料結構之佇列

1.功能實現 之前文章有,可以點開看看 棧 佇列 2.應用(1)括號匹配及字尾表示式 class Solution(object): def isValid(self, s): """ :type s: str :rtype

Java實現佇列

棧:LIFO(後進先出) 佇列:FIFO(先進先出) 棧的順序儲存結構實現: /** * 基於陣列實現的順序棧 * @param <E> */ public class Stack<E> { private Object[]

C++實現佇列(Linux環境)

Stack.h #pragma once #include<iostream> using namespace std; #include<assert.h> //靜態棧 te

利用容器介面卡實現佇列

利用模板實現分別實現一個順序表和連結串列,再用著兩個順序錶鏈表來實現棧和佇列的容器介面卡 stack.h #pragma once #include"Seqlist.h" #include"list.h" //使用容器介面卡實現棧 template<class

JavaScript實現佇列

翻譯:瘋狂的技術宅 原文:code.tutsplus.com/articles/da… 說明:本專欄文章首發於公眾號:jingchengyideng 。 棧和佇列是web開發中最常用的兩種資料結構。絕大多數使用者,甚至包括web開發人員,都不知道這個驚人的事實。如果你是一個