棧和佇列及雙端佇列

2021-09-11 21:36:29 字數 2917 閱讀 7565

棧只允許在一端進行操作,所以是後進先出即lifo

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

以下為用順序表實現的**

# coding:utf-8

class

stack

(object):

"""棧"""

def__init__

(self)

: self.__list =

defpush

(self, item)

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

defpop

(self)

:"""彈出棧頂元素"""

return self.__list.pop(

)def

peek

(self)

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

if self.__list:

return self.__list[-1

]else

:return

none

defis_empty

(self)

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

return self.__list ==

# return not self.__list

defsize

(self)

:"""返回棧的元素個數"""

return

len(self.__list)

if __name__ ==

"__main__"

: s = stack(

) s.push(1)

s.push(2)

s.push(3)

s.push(4)

print

(s.pop())

print

(s.pop())

print

(s.pop())

print

(s.pop(

))

佇列

佇列是只允許在一端進行插入操作,在另一段進行刪除操作,所以是先進先出fifo

# coding:utf-8

class

queue

(object):

"""佇列"""

def__init__

(self)

: self.__list =

defenqueue

(self, item)

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

defdequeue

(self)

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

return self.__list.pop(0)

defis_empty

(self)

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

return self.__list ==

defsize

(self)

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

return

len(self.__list)

if __name__ ==

"__main__"

: s = queue(

) s.enqueue(1)

s.enqueue(2)

s.enqueue(3)

s.enqueue(4)

print

(s.dequeue())

print

(s.dequeue())

print

(s.dequeue())

print

(s.dequeue(

))

雙端佇列

相當於兩個棧

class

deque

(object):

"""雙端佇列"""

def__init__

(self)

: self.__list =

defadd_front

(self, item)

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

self.__list.insert(

0, item)

defadd_rear

(self, item)

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

defpop_front

(self)

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

return self.__list.pop(0)

defpop_rear

(self)

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

return self.__list.pop(

)def

is_empty

(self)

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

return self.__list ==

defsize

(self)

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

return

len(self.__list)

if __name__ ==

"__main__"

: s = queue(

) s.enqueue(1)

s.enqueue(2)

s.enqueue(3)

s.enqueue(4)

print

(s.dequeue())

print

(s.dequeue())

print

(s.dequeue())

print

(s.dequeue(

))

佇列 , 雙端佇列, 棧

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

棧 佇列 雙端佇列

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

棧 佇列 雙端佇列

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