棧和隊列的特性
.棧(stacks)是一種只能通過訪問其一端來實現(xiàn)數(shù)據存儲與檢索的線性數(shù)據結構,具有后進先出(last in first out党巾,LIFO)的特征
.隊列(queue)是一種具有先進先出特征的線性數(shù)據結構,元素的增加只能在一端進行霜医,元素的刪除只能在另一端進行昧港。能夠增加元素的隊列一端稱為隊尾,可以刪除元素的隊列一端則稱為隊首
.對棧的兩種主要操作是將一個元素壓入棧和將一個元素彈出棧支子。入棧使用push()方法,出棧使用pop()方法
另一個常用的操作是預覽棧頂?shù)脑卮锸妗op()方法雖然可以訪問棧頂?shù)脑刂蹬螅钦{用該方法后叹侄,棧頂元素也從棧中被永久性地刪除了。peek()方法則只返回棧頂元素昨登,而不刪除它
為了記錄棧頂元素的位置趾代,同時也為了標記哪里可以加入新元素,我們使用變量top丰辣,當向棧內壓入元素時撒强,該變量增大;從棧內彈出元素時笙什,該變量減小
push()飘哨、pop()和peek()是棧的3個主要方法,但是棧還有其他方法和屬性
stack通常的操作:
Stack() 建立一個空的棧對象
push() 把一個元素添加到棧的最頂層
pop() 刪除棧最頂層的元素琐凭,并返回這個元素
peek() 返回最頂層的元素芽隆,并不刪除它
isEmpty() 判斷棧是否為空
size() 返回棧中元素的個數(shù)
#-*- coding:?UTF-8 -*-
__author__ = 'Administrator'
#python的list對象模擬棧的實現(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)建一個棧對象,并加入操作方法
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())
-
.隊列是一種先進先出(First-In-First-Out统屈,F(xiàn)IFO)的數(shù)據結構胚吁。隊列被用在很多地方,比如提交操作系統(tǒng)執(zhí)行的一系列進程愁憔、打印任務池等腕扶,一些仿真系統(tǒng)用隊列來模擬銀行或雜貨店里排隊的顧客
隊列的兩種主要操作是:向隊列中插入新元素和刪除隊列中的元素。插入操作也叫做入隊吨掌,刪除操作也叫做出隊半抱。入隊操作在隊尾插入新元素,出隊操作刪除隊頭的元素思犁。
隊列的另外一項重要操作是讀取隊頭的元素代虾。這個操作叫做peek()。該操作返回隊頭元素激蹲,但不把它從隊列中刪除棉磨。除了讀取隊頭元素,我們還想知道隊列中存儲了多少元素学辱,可以使用size()滿足該需求
queue通常的操作:
Queue() 定義一個空隊列乘瓤,無參數(shù),返回值是空隊列策泣。
enqueue(item) 在隊列尾部加入一個數(shù)據項衙傀,參數(shù)是數(shù)據項,無返回值萨咕。
dequeue() 刪除隊列頭部的數(shù)據項统抬,不需要參數(shù),返回值是被刪除的數(shù)據,隊列本身有變化聪建。
isEmpty() 檢測隊列是否為空钙畔。無參數(shù),返回布爾值金麸。
size() 返回隊列數(shù)據項的數(shù)量擎析。無參數(shù),返回一個整數(shù)挥下。
class Queue:
"""模擬隊列"""
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)