基本資料結構 棧

2022-05-01 01:45:11 字數 3621 閱讀 2027

基本資料結構-棧

一.線性資料結構

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

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

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

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

- 棧的分析與應用:

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

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

三.python實現棧

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

class

stack:

def__init__

(self):

self.items =

defisempty(self):

return self.items ==

defpush(self, item):

defpop(self):

return

self.items.pop()

defpeek(self):

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

defsize(self):

return len(self.items)

- 應用:

from basic.stack import

stack

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())

一.線性資料結構

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

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

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

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

- 棧的分析與應用:

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

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

三.python實現棧

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

class

stack:

def__init__

(self):

self.items =

defisempty(self):

return self.items ==

defpush(self, item):

defpop(self):

return

self.items.pop()

defpeek(self):

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

defsize(self):

return len(self.items)

- 應用:

from basic.stack import

stack

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())

基本資料結構 棧

我們從四個簡單但重要的概念開始研究資料結構。棧,佇列,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...