Python數(shù)據(jù)結(jié)構(gòu)—棧、隊(duì)列

棧和隊(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)



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容