棧和隊(duì)列的特性
.棧(stacks)是一種只能通過(guò)訪(fǎng)問(wèn)其一端來(lái)實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)與檢索的線(xiàn)性數(shù)據(jù)結(jié)構(gòu),具有后進(jìn)先出(last in first out,LIFO)的特征
.隊(duì)列(queue)是一種具有先進(jìn)先出特征的線(xiàn)性數(shù)據(jù)結(jié)構(gòu),元素的增加只能在一端進(jìn)行,元素的刪除只能在另一端進(jìn)行。能夠增加元素的隊(duì)列一端稱(chēng)為隊(duì)尾,可以刪除元素的隊(duì)列一端則稱(chēng)為隊(duì)首
.對(duì)棧的兩種主要操作是將一個(gè)元素壓入棧和將一個(gè)元素彈出棧。入棧使用push()方法,出棧使用pop()方法
另一個(gè)常用的操作是預(yù)覽棧頂?shù)脑亍op()方法雖然可以訪(fǎng)問(wèn)棧頂?shù)脑?,但是調(diào)用該方法后,棧頂元素也從棧中被永久性地刪除了。peek()方法則只返回棧頂元素,而不刪除它
為了記錄棧頂元素的位置,同時(shí)也為了標(biāo)記哪里可以加入新元素,我們使用變量top,當(dāng)向棧內(nèi)壓入元素時(shí),該變量增大;從棧內(nèi)彈出元素時(shí),該變量減小
push()、pop()和peek()是棧的3個(gè)主要方法,但是棧還有其他方法和屬性
stack通常的操作:
Stack() 建立一個(gè)空的棧對(duì)象
push() 把一個(gè)元素添加到棧的最頂層
pop() 刪除棧最頂層的元素,并返回這個(gè)元素
peek() 返回最頂層的元素,并不刪除它
isEmpty() 判斷棧是否為空
size() 返回棧中元素的個(gè)數(shù)
#-*- coding:?UTF-8 -*-
__author__ = 'Administrator'
#python的list對(duì)象模擬棧的實(shí)現(xiàn)
class Stack:
#模擬棧
def __init__(self):
self.items = []
def isEmpty(self):
return len(self.items)==0
def push(self,item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
if not self.isEmpty():
return self.items[len(self.items)-1]
def size(self):
return len(self.items)
#創(chuàng)建一個(gè)棧對(duì)象,并加入操作方法
s = Stack()
print(s.isEmpty())
s.push(4)
s.push('DOG')
print(s.peek())
s.push(True)
print(s.size())
print(s.isEmpty())
s.push(8.4)
print(s.pop())
print(s.pop())
print(s.size())
-
.隊(duì)列是一種先進(jìn)先出(First-In-First-Out,F(xiàn)IFO)的數(shù)據(jù)結(jié)構(gòu)。隊(duì)列被用在很多地方,比如提交操作系統(tǒng)執(zhí)行的一系列進(jìn)程、打印任務(wù)池等,一些仿真系統(tǒng)用隊(duì)列來(lái)模擬銀行或雜貨店里排隊(duì)的顧客
隊(duì)列的兩種主要操作是:向隊(duì)列中插入新元素和刪除隊(duì)列中的元素。插入操作也叫做入隊(duì),刪除操作也叫做出隊(duì)。入隊(duì)操作在隊(duì)尾插入新元素,出隊(duì)操作刪除隊(duì)頭的元素。
隊(duì)列的另外一項(xiàng)重要操作是讀取隊(duì)頭的元素。這個(gè)操作叫做peek()。該操作返回隊(duì)頭元素,但不把它從隊(duì)列中刪除。除了讀取隊(duì)頭元素,我們還想知道隊(duì)列中存儲(chǔ)了多少元素,可以使用size()滿(mǎn)足該需求
queue通常的操作:
Queue() 定義一個(gè)空隊(duì)列,無(wú)參數(shù),返回值是空隊(duì)列。
enqueue(item) 在隊(duì)列尾部加入一個(gè)數(shù)據(jù)項(xiàng),參數(shù)是數(shù)據(jù)項(xiàng),無(wú)返回值。
dequeue() 刪除隊(duì)列頭部的數(shù)據(jù)項(xiàng),不需要參數(shù),返回值是被刪除的數(shù)據(jù),隊(duì)列本身有變化。
isEmpty() 檢測(cè)隊(duì)列是否為空。無(wú)參數(shù),返回布爾值。
size() 返回隊(duì)列數(shù)據(jù)項(xiàng)的數(shù)量。無(wú)參數(shù),返回一個(gè)整數(shù)。
class Queue:
"""模擬隊(duì)列"""
def init(self):
self.items = []
def isEmpty(self):
return self.items == []
def enqueue(self, item):
self.items.insert(0,item)
def dequeue(self):
return self.items.pop()
def size(self):
return len(self.items)
q=Queue()
q.isEmpty()
q.enqueue('dog')
q.enqueue(4)
q=Queue()
q.isEmpty()
q.enqueue(4)
q.enqueue('dog')
q.enqueue(True)