順序棧 鏈式棧的python實現

2021-10-04 17:27:19 字數 1839 閱讀 2389

棧是一種操作受限的線性表資料結構,特點是只能在一端進行插入和刪除操作,操作順序是先進後出,後進先出 ; 

棧根據實現方式可以分為順序棧和鏈式棧,順序棧是用陣列來實現,鏈式棧是用鍊錶來實現 

順序棧的出棧操作的只涉及尾端的彈出操作,時間複雜度為o(1),而入棧操作,當插入的操作在順序棧的最大空間時,是o(1);當大於陣列的長度時,這時候需要進行動態擴容,而動態擴容會重新申請乙個更大的空間,並把原來的資料遷移過去,這時候的空間複雜度為o(n),

但由於這個擴充操作只有在陣列空間不足時才會操作,而其他的入棧操作時間複雜度都是o(1),所以實際上攤分下去,這個入棧操作平均複雜度可以看做o(1),最好時間複雜度為o(1),最差的時間複雜度為o(n)

class stack: 

def __init__(self):

self.items = list()

self.count = 0

self.leght = 0

def push(self,item):

self.count += 1

return true

def pop(self):

if self.count == 0 : return false

temp = self.items.pop()

self.count -= 1

return temp

python 的list 其實是一種元素外接的陣列,比如c++ 的陣列是一片連續的記憶體空間,而該記憶體空間就是放著該元素儲存的值,但是python 的list申請的也是一片連續的空間,但是存放的不是元素的值,而是指標,所以python的列表比起c++的陣列每次操作都會多了一次根據指標尋找值的操作.

鏈式棧的入棧操作和出站操作的時間複雜度都是o(1)

class node:

def __init__(self,value):

self.value = value

self.next = none

class link:

def __init__(self):

self.head = none

self.leght = 0

def add(self,value):

new_node = node(value)

if self.head == none :

self.head = new_node

else:

new_node.next = self.head

self.head = none

self.head = new_node

self.leght += 1

def pop(self):

tmp = self.head

self.head= none

self.head = tmp.next

self.leght -= 1

return tmp.value

class linkstack:

def __init__(self):

self.items = link()

self.count = 0

def push(self,item):

self.items.add(item)

self.count += 1

return true

def pop(self):

if self.count == 0 : return false

temp = self.items.pop()

self.count -= 1

return temp

這裡的鍊錶的插入和彈出操作是從煉表頭這端操作的單鏈表

棧的定義,順序棧,鏈式棧

棧又名堆疊,是資料暫時儲存的地方。它一種只能在頂端進行插入和刪除操作的特殊線性表,它按照先進後出的原則儲存資料,先進的資料被壓入棧底,最後的資料在棧頂,需要讀取資料的時候從棧頂開始彈出資料。棧具有記憶作用,對棧的插入和刪除操作中,不需要改變棧底指標。棧中允許進行插入和刪除操作的一端稱為棧頂 top ...

棧 順序 鏈式 java實現

棧的定義 棧 stack 是限制僅在表的一端進行插入和刪除運算的線性表。1 通常稱插入 刪除的這一端為棧頂 top 另一端稱為棧底 bottom 2 當表中沒有元素時稱為空棧。3 棧為後進先出 last in first out 的線性表,簡稱為 lifo 表。棧的修改是按後進先出的原則進行。每次刪...

棧 棧 鏈式棧,順序棧,共享棧

棧也是一種線性表結構,只不過棧的操作是受限的,它的特點就是在棧頂方向新增新的元素,且刪除元素也只能從棧頂方向刪除。因此棧是一種lifo 後進先出 特性的資料結構。壓棧 新的元素放入棧的操作。出棧 從棧中移除乙個元素的操作。因為棧是一種線性結構,所以可以通過前面所學的鍊錶和順序表作為內部實現。我們可以...