易懂易理解的棧與棧操作(Python實現)

2021-10-07 16:42:42 字數 2084 閱讀 5346

棧(stack)在我們的生活中無處不在,其思想在生活和程式設計中有著重要的作用,因此對其深入掌握和理解有著重要的意義。

棧屬於一對一的線性結構,與佇列類似,其是一種運算受限的資料結構。

其特點是先進後出(後進先出)

廢話不多說,直接上**。

棧的基本操作

"""棧 """

class

stack()

:def

__init__

(self, size)

:# 初始化棧

''' :param size: 棧的的大小

'''self.data =

['null'

for i in

range(0

, size)

]# 生成了指定長度(size)的列表

self.size = size

self.top =-1

# 棧頂指標進行初始化

defempty

(self)

:# 判斷棧是否為空

if self.top ==-1

:return

true

else

:return

false

deffull

(self)

:# 判斷時候滿棧

if self.top == self.size -1:

# 下標為:size-1

return

true

else

:return

false

defpush

(self, content)

:# 入棧的功能實現

""" :param content: 新元素資料

:return:

"""if self.full():

print

("the stack is over!"

)else

: self.top = self.top +

1 self.data[self.top]

= content

defpop(self)

:# 出棧的功能實現

if self.empty():

print

("the stack is empty,is not element@"

)else

:print

(self.data[self.top]

)# 先取元素

self.data[self.top]

='null'

# 再把元素置空

self.top = self.top -

1# 最後棧針

光寫了方法不用肯定不爽,下面就來用一下。

棧的使用

if __name__ ==

'__main__'

: s = stack(4)

# 呼叫類時可以直接傳入類引數,原因:__init__ 方法!

print

("是否為空棧:"

, s.empty())

s.push(

"aaa"

) s.push(

"bbb"

) s.push(

"ccc"

) s.push(

"ddd"

) s.push(

"eee"

)print

("是否已滿棧:"

, s.full())

s.pop(

), s.pop(

), s.pop(

), s.pop(

)# 入棧順序和出棧順序剛好相反

執行結果:

是否為空棧: true

the stack is over!

是否已滿棧: true

dddccc

bbbaaa

棧操作與棧幀

結構化程式的乙個最基本的單元就是 函式 或者叫 過程 在彙編這一層自然也相應的有支援這些概念的指令操作,如棧操作和棧幀的概念。1 定址方式 我們已經知道在運算元表示中有一種是用來指示記憶體位址的內容的,在gnu assembly中指示記憶體位址有多種方式,這些方式被統稱 定址方式 通用的定址格式為 ...

對棧操作的理解

對棧操作的理解 乙個cpu具有八個通用暫存器 eax,edx,ecx,esi,edi,ebp,esp,ebx。這八個通用暫存器中的每乙個都被安排了特定用途,cpu在執行某些特定指令時需要特定的暫存器協作以高效的完成其指令執行過程。其中有兩個重要的暫存器負責棧的處理 ebp 擴充套件基址指標 和 es...

python 棧 python 棧的理解與應用

如何理解 棧 關於 棧 我有乙個非常貼切的例子,就是一摞疊在一起的盤子。我們平時放盤子的時候,都是從下往上乙個乙個放 取的時候,我們也是從上往下乙個乙個地依次取,不能從中間任意抽出。後進者先出,先進者後出,這就是典型的 棧 結構。從棧的操作特性上來看,棧是一種 操作受限 的線性表,只允許在一端插入和...