棧 佇列 雙端佇列

2021-09-29 18:44:57 字數 3050 閱讀 8888

一、棧結構實現

class

stack

(object):

"""棧"""

def__init__

(self)

: self.items =

defis_empty

(self)

:"""判斷是否為空"""

return self.items ==

defpush

(self, item)

:"""加入元素"""

defpop

(self)

:"""彈出元素"""

return self.items.pop(

)def

peek

(self)

:"""返回棧頂元素"""

return self.items[

len(self.items)-1

]def

size

(self)

:"""返回棧的大小"""

return

len(self.items)

if __name__ ==

"__main__"

: stack = stack(

) stack.push(

"hello"

) stack.push(

"world"

) stack.push(

"itcast"

)print stack.size(

)print stack.peek(

)print stack.pop(

)print stack.pop(

)print stack.pop(

)

二、佇列

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

佇列是一種先進先出的(first in first out)的線性表,簡稱fifo。允許插入的一端為隊尾,允許刪除的一端為隊頭。佇列不允許在中間部位進行操作!假設佇列是q=(a1,a2,……,an),那麼a1就是隊頭元素,而an是隊尾元素。這樣我們就可以刪除時,總是從a1開始,而插入時,總是在佇列最後。這也比較符合我們通常生活中的習慣,排在第乙個的優先出列,最後來的當然排在隊伍最後。

class

queue

(object):

"""佇列"""

def__init__

(self)

: self.items =

defis_empty

(self)

:return self.items ==

defenqueue

(self, item)

:"""進佇列"""

self.items.insert(

0,item)

defdequeue

(self)

:"""出佇列"""

return self.items.pop(

)def

size

(self)

:"""返回大小"""

return

len(self.items)

if __name__ ==

"__main__"

: q = queue(

) q.enqueue(

"hello"

) q.enqueue(

"world"

) q.enqueue(

"itcast"

)print q.size(

)print q.dequeue(

)print q.dequeue(

)print q.dequeue(

)

三、雙端佇列

雙端佇列(deque,全名double-ended queue),是一種具有佇列和棧的性質的資料結構。

雙端佇列中的元素可以從兩端彈出,其限定插入和刪除操作在表的兩端進行。雙端佇列可以在佇列任意一端入隊和出隊

class

deque

(object):

"""雙端佇列"""

def__init__

(self)

: self.items =

defis_empty

(self)

:"""判斷佇列是否為空"""

return self.items ==

defadd_front

(self, item)

:"""在隊頭新增元素"""

self.items.insert(

0,item)

defadd_rear

(self, item)

:"""在隊尾新增元素"""

defremove_front

(self)

:"""從隊頭刪除元素"""

return self.items.pop(0)

defremove_rear

(self)

:"""從隊尾刪除元素"""

return self.items.pop(

)def

size

(self)

:"""返回佇列大小"""

return

len(self.items)

if __name__ ==

"__main__"

: deque = deque(

) deque.add_front(1)

deque.add_front(2)

deque.add_rear(3)

deque.add_rear(4)

print deque.size(

)print deque.remove_front(

)print deque.remove_front(

)print deque.remove_rear(

)print deque.remove_rear(

)

佇列 , 雙端佇列, 棧

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

棧 佇列 雙端佇列

棧 stack 有些地方稱為堆疊,是一種容器,可存入資料元素 訪問元素 刪除元素,由於棧資料結構只允許在一端進行操作,因而按照後進先出 lifo,last in first out 的原理運作。棧結構實現 棧可以用順序表實現,也可以用鍊錶實現。棧的操作 功能stack 建立乙個新的空棧 push i...

棧和佇列及雙端佇列

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