python面試題2 1 如何實現棧

2022-08-05 07:30:23 字數 2574 閱讀 5275

本題目摘自《python程式設計師面試演算法寶典》,我會每天做一道這本書上的題目,並分享出來,統一放在我部落格內,收集在乙個分類中。

【阿里巴巴面試題】

難度係數:⭐⭐⭐

考察頻率:⭐⭐⭐⭐

題目描述:

實現乙個棧的資料結構,使其具有以下方法:壓棧、彈棧、取棧頂元素、判斷棧是否為空以及獲取棧中元素個數。

方法一 : 陣列(列表)實現採用陣列(列表)實現棧的時候,棧空間是一段連續的空間。

class

stack

:def

__init__

(self, maxsize)

: self.maxsize = maxsize

self.data_list =

[none

]* self.maxsize

self.top =

0def

is_empty

(self)

:# 判斷是否為空

return self.top ==

0def

in_stack

(self, value)

:# 壓棧

if self.top < self.maxsize:

self.data_list[self.top]

= value

self.top +=

1else

:raise exception(

"棧已滿"

)def

pop(self)

:# 彈棧

if self.is_empty():

return

none

self.top -=

1return self.data_list[self.top]

defget_top

(self)

:# 取棧頂元素

if self.is_empty():

return

return self.data_list[self.top-1]

defget_count

(self)

:# 獲取棧中元素

return self.top

方法二 :鍊錶實現在建立鍊錶的時候經常採用一種從頭結點插入新結點的方法。可以採用這種方法來實現棧。

class

stack

:def

__init__

(self, maxsize)

: self.maxsize = maxsize

self.data_list =

[none

]* self.maxsize

self.top =

0def

is_empty

(self)

:# 判斷是否為空

return self.top ==

0def

in_stack

(self, value)

:# 壓棧

if self.top < self.maxsize:

self.data_list[self.top]

= value

self.top +=

1else

:raise exception(

"棧已滿"

)def

pop(self)

:# 彈棧

if self.is_empty():

return

none

self.top -=

1return self.data_list[self.top]

defget_top

(self)

:# 取棧頂元素

if self.is_empty():

return

return self.data_list[self.top-1]

defget_count

(self)

:# 獲取棧中元素

return self.top

兩種方法對比:採用陣列(列表)實現棧的優點是:乙個元素值占用乙個儲存空間;它的缺點是:如果初始化申請的儲存空間太大,會造成空間的浪費,如果申請的空間小,後期會經常需要擴充儲存空間,擴充儲存空間是個費時的操作,這樣會造成效能下降。

採用鍊錶實現棧的優點是:使用靈活方便,只有在需要的時候才會申請空間。它的缺點是:除了要儲存元素外,還需要額外的儲存空間儲存指標資訊。

演算法效能分析:

這兩種方法壓棧和彈棧的時間複雜度都是o(1)

歡迎小夥伴們加入我建立的python***:625988679

python面試題之Python如何實現單例模式?

使用 metaclass 元類 的高階python用法 class singleton2 type def init cls,name,bases,dict super singleton2,cls init name,bases,dict cls.instance none def call cl...

python語法面試題 python面試題

1.去重,集合 集合的乙個重要特點是 自動去除重複的值 li 1,2,3,1,1,2,2,3,3 去除重複的元素 set set li 轉換為集合,因為集合會自動去重。print set li list set 將集合轉換為列表print li 2.生成器 規則 生成器函式,或者生成器表示式,在呼叫...

劍指offer面試題21

面試題21 包含min函式的棧 題目 定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的min函式。在該棧中,呼叫min push及pop的時間複雜度都是o 1 預備知識 棧的定義 模板函式 思路 面對乙個複雜的問題,我們可以舉幾個具體的例子來尋找規律,對於本題目,我們可以通過舉例來分析它...