棧(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...