基本資料結構 棧

2022-05-01 02:15:10 字數 2421 閱讀 9574

- 我們從四個簡單但重要的概念開始研究資料結構。棧,佇列,deques(雙向佇列), 列表是一類資料的容器,它們資料元素之間的順序由新增或刪除的順序決定。一旦乙個資料元素被新增,它相對於前後元素一直保持該位置不變。諸如此類的資料結構被稱為線性資料結構。

- 線性資料結構有兩端,有時被稱為左右,某些情況被稱為前後。你也可以稱為頂部和底部,名字都不重要。將兩個線性資料結構區分開的方法是新增和移除元素的方式,特別是新增和移除元素的位置。例如一些結構允許從一端新增元素,另一些允許從另一端移除元素。

- 概念:棧(有時稱為「後進先出棧」)是乙個元素的有序集合,其中新增移除新元素總發生在同一端。這一端通常稱為「頂部」。與頂部對應的端稱為「底部」。棧的底部很重要,因為在棧中靠近底部的元素是儲存時間最長的。最近新增的元素是最先會被移除的。這種排序原則有時被稱為 lifo,後進先出。它基於在集合內的時間長度做排序。較新的項靠近頂部,較舊的項靠近底部。

- 案例:棧的例子很常見。幾乎所有的自助餐廳都有一堆托盤或盤子,你從頂部拿乙個,就會有乙個新的托盤給下乙個客人。想象桌上有一堆書, 只有頂部的那本書封面可見,要看到其他書的封面,只有先移除他們上面的書。下圖展示了另乙個棧,包含了很多 python 物件。

- 分析:和棧相關的最有用的想法之一來自對它的觀察。假設從乙個乾淨的桌面開始,現在把書一本本疊起來,你在構造乙個棧。考慮下移除一本書會發生什麼。移除的順序跟剛剛被放置的順序相反。棧之所以重要是因為它能反轉項的順序。插入跟刪除順序相反。

- 應用:每個 web 瀏覽器都有乙個返回按鈕。當你瀏覽網頁時,這些網頁被放置在乙個棧中(實際是網頁的**)。你現在檢視的網頁在頂部,你第乙個檢視的網頁在底部。如果按『返回』按鈕,將按相反的順序瀏覽剛才的頁面。

- 棧的抽象資料型別定義:棧的抽象資料型別應該由以下結構和操作定義。棧操作如下: 

stack() 建立乙個空的新棧。 它不需要引數,並返回乙個空棧。

push(item)將乙個新項新增到棧的頂部。它需要 item 做引數並不返回任何內容。

pop() 從棧中刪除頂部項。它不需要引數並返回 item 。棧被修改。

peek() 從棧返回頂部項,但不會刪除它。不需要引數。 不修改棧。

isempty() 測試棧是否為空。不需要引數,並返回布林值。

size() 返回棧中的 item 數量。不需要引數,並返回乙個整數。

class stack():

def __init__(self):

self.items =

def push(self,item):

def pop(self):

if self.isempty():

return '空'

else:

return self.items.pop()

def isempty(self):

#空=》true

return self.items ==

def peek(self):

return self.items[len(self.items) - 1]

def size(self):

return len(self.items)

應用:

stack = stack()

stack.push(1)

stack.push(2)

stack.push(3)

print(stack.size())

print(stack.pop())

print(stack.pop())

print(stack.pop())

print(stack.pop())

print(stack.peek())3321空

案例2:

s = stack()

#模擬瀏覽器回退按鈕

def getrequest(url):

s.push(url)

def showcurrentpage():

print(s.pop())

def back():

return s.pop()

getrequest('www.1.com')

getrequest('www.2.com')

getrequest('www.3.com')

showcurrentpage()

print(back())

print(back())

執行結果:

www.3.com

www.2.com

www.1.com

基本資料結構 棧

基本資料結構 棧 一.線性資料結構 我們從四個簡單但重要的概念開始研究資料結構。棧,佇列,deques 雙向佇列 列表是一類資料的容器,它們資料元素之間的順序由新增或刪除的順序決定。一旦乙個資料元素被新增,它相對於前後元素一直保持該位置不變。諸如此類的資料結構被稱為線性資料結構。線性資料結構有兩端,...

基本資料結構 棧

棧的特徵是後進先出 last in,first out,lifo 棧上的插入操作稱為壓入 push 刪除操作稱為彈出 pop 下面使用乙個陣列s n 來實現乙個最多容納n個元素的棧。定義乙個屬性指向最新插入的元素。棧的操作 如下 public class stack public stack int...

基本資料結構(3) 棧

棧 stack 在電腦科學中,是一種特殊的序列形式的資料結構,它的特殊之處在於只能允許在鏈結序列或陣列的一端 稱為棧頂,top 進行加入 push 和輸出 pop 的運算。棧可以用一維動態陣列或鍊錶的形式來完成。由於堆疊資料結構只允許在一端進行操作,因而按照後進先出 lifo,last in fir...