棧 佇列 雙端佇列

2021-09-27 11:38:50 字數 4237 閱讀 8267

棧(stack),有些地方稱為堆疊,是一種容器,可存入資料元素、訪問元素、刪除元素,由於棧資料結構只允許在一端進行操作,因而按照後進先出(lifo, last in first out)的原理運作。

棧結構實現

棧可以用順序表實現,也可以用鍊錶實現。

棧的操作

功能stack()

建立乙個新的空棧

push(item)

新增乙個新的元素item到棧頂

pop()

彈出棧頂元素

peek()

返回棧頂元素

is_empty()

判斷棧是否為空

size()

返回棧的元素個數

python實現堆疊(lifo順序表實現)

// 先用列表構建乙個空的容器物件

class

stack

(object)

: def __init__

(self)

: self.__list =

def push

(self, item):""

"新增乙個新的元素到item棧頂"

"" self.__list.

(item)

def pop

(self):""

"彈出棧頂元素"

""return self.__list .

pop(

) def peek

(self):""

"返回棧頂元素"

""if self.__list:

#判斷為非空列表,返回最後進去的乙個元素(棧頂)

return self.__list[-1

]else

:return none

def is_empty

(self):""

"判斷棧是否為空"

""return self.__list ==

]返回true

# return not self.__list

def size

(self):""

"返回棧的元素個數"

""return

len(self.__list)

if __name__ ==

'__main__'

: s =

stack()

s.push(1

) s.

push(3

) s.

push(4

)print

(s.pop()

)print

(s.pop()

)print

(s.pop()

)

佇列(queue)是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。

佇列是一種先進先出的(first in first out)的線性表,簡稱fifo。允許插入的一端為隊尾,允許刪除的一端為隊頭。佇列不允許在中間部位進行操作!

假設佇列是q=(a1,a2,……,an),那麼a1就是隊頭元素,而an是隊尾元素。這樣我們就可以刪除時,總是從a1開始,而插入時,總是在佇列最後。這也比較符合我們通常生活中的習慣,排在第乙個的優先出列,最後來的當然排在隊伍最後。

佇列的實現

同棧一樣,佇列也可以用順序表或者鍊錶實現。

佇列的操作

功能queue()

建立乙個空的佇列

enqueue(item)

往佇列中新增乙個item元素

dequeue()

從佇列頭部刪除乙個元素

is_empty()

判斷乙個佇列是否為空

size()

返回佇列的大小

python實現佇列(fifo順序表實現)

class

queue

(object)

: def __init__

(self)

: self.__list =

def enqueue

(self, item):""

"往佇列中新增乙個item元素"

"" self.__list.

(item)

def dequeue

(self):""

"從佇列頭部刪除乙個元素"

""return self.__list.

pop(0)

def is_empty

(self):""

"判斷乙個佇列是否為空"

""return self.__list ==

def size

(self):""

"返回佇列的大小"

""return

len(self.__list)

if __name__ ==

'__main__'

: s =

queue()

s.enqueue(1

) s.

enqueue(3

) s.

enqueue(4

)print

(s.dequeue()

)print

(s.dequeue()

)print

(s.dequeue()

)

雙端佇列(deque,全名double-ended queue),是一種具有佇列和棧的性質的資料結構。雙端佇列中的元素可以從兩端彈出,其限定插入和刪除操作在表的兩端進行。雙端佇列可以在佇列任意一端入隊和出隊。

雙端佇列的操作

功能deque()

建立乙個空的雙端佇列

add_front(item)

從隊頭加入乙個item元素

add_rear(item)

從隊尾加入乙個item元素

remove_front()

從隊頭刪除乙個item元素

remove_rear()

從隊尾刪除乙個item元素

is_empty()

判斷雙端佇列是否為空

size()

返回佇列的大小

python實現雙端佇列(順序表實現)

class

deque

(object):""

"雙端佇列"

"" def __init__

(self)

: self.__list =

def add_front

(self, item):""

"往佇列頭部新增乙個item元素"

"" self.__list.

insert(0

, item)

def add_rear

(self, item):""

"往佇列尾部新增乙個item元素"

"" self.__list.

(item)

def remove_front

(self):""

"從佇列頭部刪除乙個元素"

""return self.__list.

pop(0)

def remove_rear

(self):""

"從佇列尾部刪除乙個元素"

""return self.__list.

pop(

) def is_empty

(self):""

"判斷乙個佇列是否為空"

""return self.__list ==

def size

(self):""

"返回佇列的大小"

""return

len(self.__list)

佇列 , 雙端佇列, 棧

注意 linkedlist中新增或者取出的方法有很多,比如add,offer,offerfirst,offerlast,push.根據使用的資料結構不同,最好區分使用.一,佇列queue fifo first in first out 0,模型上一般為右進左出,右端入隊並稱為隊尾,左端出隊並稱為隊頭...

棧 佇列 雙端佇列

一 棧結構實現 class stack object 棧 def init self self.items defis empty self 判斷是否為空 return self.items defpush self,item 加入元素 defpop self 彈出元素 return self.it...

棧和佇列及雙端佇列

棧 棧只允許在一端進行操作,所以是後進先出即lifo 可以用順序表實現,也可以用鍊錶實現 以下為用順序表實現的 coding utf 8 class stack object 棧 def init self self.list defpush self,item 新增乙個新的元素item到棧頂 de...