python演算法與資料結構 資料結構介紹 38

2022-07-13 06:57:16 字數 2255 閱讀 6461

資料結構,直白地理解,就是研究資料的儲存方式。

我們知道,資料儲存只有乙個目的,即為了方便後期對資料的再利用,就如同我們使用陣列儲存是為了後期取得它們的值,因此,資料在計算機儲存空間的存放,決不是胡亂的,這就要求我們選擇一種好的方式來儲存資料,而這也是資料結構的核心內容例如,要儲存這樣一組資料:,資料之間具有這樣的關係:張三是張

四、張五的父親,同時張四還是張六和張七的父親,資料之間的關係如圖所示:

對於儲存之間具有複雜關係的資料,如果還是用變數或陣列來儲存(比如用陣列儲存 ),資料儲存是沒有問題,但是無法體現資料之間的邏輯關係,後期根本無法使用,顯然不明智。針對此類資料,資料結構提供了樹(或者圖)儲存結構,專門用於儲存這類資料。通過以上示例可以體會出,資料結構教會我們的絕不僅僅是如何儲存 1、2、這樣簡單的資料,而是解決具有複雜關係的大量資料的儲存問題。

線性表順序錶鏈表棧

佇列樹圖線性表結構儲存的資料往往是可以依次排列的,就像小朋友手拉手,每位學生的前面和後面都僅有乙個小朋友和他拉手,具備這種「一對一」關係的資料就可以使用線性表來儲存。

例如,儲存類似 list = [1,3,5,7,9]這樣的資料時,各元素依次排列,每個元素的前面和後邊有且僅有乙個元素與之相鄰(除首元素和尾元素),因此可以使用線性表儲存。線性表並不是一種具體的儲存結構,它包含順序儲存結構和鏈式儲存結構,是順序表和煉表的統稱。

順序表,簡單地理解,就是常用的陣列,只是換了個名字而已,例如使用順序表儲存 ,如圖所示:

我們知道,使用順序表(底層實現靠陣列)時,需要提前申請一定大小的儲存空間,這塊儲存空間的實體地址是連續的,如圖所示。鍊錶則完全不同,使用鍊錶儲存資料時,是隨用隨申請,因此資料的儲存位置是相互分離的,換句話說,資料的儲存位置是隨機的為了給各個資料塊建立「依次排列」的關係,鍊錶給各資料塊增設乙個指標,每個資料塊的指標都指向下乙個資料塊(最後乙個資料塊的指標指向 null),就如同乙個個小學生都伸手去拉住下乙個小學生的手,這樣,看似毫無關係的資料塊就建立了「依次排列」的關係,也就形成了鍊錶,如圖所示:

棧和佇列隸屬於線性表,是特殊的線性表,因為它們對線性表中元素的進出做了明確的要求。棧中的元素只能從線性表的一端進出(另一端封死),且要遵循「先入後出」的原則,即先進棧的元素後出棧。

棧結構如圖所示,像乙個木桶,棧中含有 3 個元素,分別是 a、b 和 c,從在棧中的狀態可以看出 a 最先進的棧,然後 b 進棧,最後 c 進棧。根據「先進後出」的原則,3 個元素出棧的順序應該是:c 最先出棧,然後 b 出棧,最後才是 a 出棧。

七、佇列

佇列中的元素只能從線性表的一端進,從另一端出,且要遵循「先入先出」的特點,即先進佇列的元素也要先出佇列。

佇列結構如圖所示,佇列中有 3 個元素,分別是 a、b 和 c,從在佇列中的狀態可以看出是 a 先進佇列,然後 b 進,最後 c 進。根據「先進先出」的原則,3 個元素出佇列的順序應該是 a 最先出佇列,然後 b 出,最後 c 出。

樹儲存結構適合儲存具有「一對多」關係的資料。

如圖所示,其中張四只有乙個父親,但他卻有兩(多)個孩子,這就是「一對多」的關係,滿足這種關係的資料可以使用樹儲存結構。

圖儲存結構適合儲存具有「多對多」關係的資料。

如圖所示,從 v1 可以到達 v2、v3、v4,同樣,從 v2、v3、v4 也可以到達 v1,這就是「多對多」的關係,滿足這種關係的資料可以使用圖儲存結構。

python資料結構與演算法

coding utf 8 import sys 使用以下語句將引數的str格式轉換為int格式 l list map int sys.argv 1 split target int sys.argv 2 def binarysearch print l print target left 0 rig...

資料結構與演算法 python

元類 基礎 冒泡 它重複地走訪要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端,故名氣泡排序。def bubble sort alist ...

python演算法與資料結構

若n1 n2 n3 1000,且n1平方 n2平方 n3平方 n1,n2,n3為自然數 求出所有n1 n2 n3可能的組合?n1 0 n2 0 n3 0 判斷n1 n2 n3是否等於1000,之後變n3 1,n3 2,n3 3,然後再變n2 那如果變為 n1 n2 n3 2000 了呢?思路1 實現...