我的資料結構思考 理解線性結構

2021-06-16 01:56:14 字數 1318 閱讀 6146

前面已經理解了,資料結構研究的目的是處理非數值問題在計算機中的處理。這一來將引出兩個問題:

一:從計算機需要處理的問題的角度抽象非數值問題中資料元素的固有邏輯關係。

二:如何將資料元素之間固有的邏輯關係恰當地對映到計算機中,以便於處理。這也稱為物理儲存結構。

問題一:

從計算機需要處理的問題的角度抽象非數值問題中資料元素的固有邏輯關係。

在「何為資料結構」一篇中提到了抽象的概念,並且說明了抽象的角度取決於分析問題的目的。資料結構是一門研究非數值計算的程式設計問題中計算機的操作物件(資料元素)以及它們之間的關係和運算等的學科。從該角度可以抽象出兩個模型:

線性模型:資料元素之間存在著簡單「一對一」的線性關係,如通訊錄問題。

非線模型:資料元素之間存在著「一對多」(樹)或「多對多」(圖)的關係。

以上兩個模型是非數值處理問題中資料元素之間固有的邏輯關係。

問題二:

如何將資料元素之間固有的邏輯關係恰當地對映到計算機中,以便於處理。這也稱為物理儲存結構。

如何將資料元素之間固有的邏輯關係對映到計算機物理結構上,以便於計算機的處理或者說是高效處理,這是資料結構研究的核心問題,是我在以後學習中為之努力的地方。

我的思考:

經過分析後發現:計算機的物理儲存結構也是一種「線性」的結構。計算機的儲存單元是依次序來擺放的(訪問),也就是說位址空間是連續的,線性的。那麼我們是否可以將現實問題的線性關係簡單地對映到計算機儲存結構的線性關係上呢?回答應該是肯定的,由此引出了第一種線性結構的物理表示:

順序表

由此我們可以總結出:通過順序表結構,我們只需向計算機申請一段記憶體來存放資料元素。然後我們就可以處理資料元素了。

順序表 = 指標(指向一段記憶體)

elemtype *elem

稍作觀察我們發現,這樣簡單的對映後,物理儲存結構可以隨機訪問的特點,也對映到了順序表上。由此我們總結出順序表的優點:隨機訪問

以後我們需要做的工作是將此結構進一步的細化,以便適應更多的突發情況。諸如:如果申請的這一段記憶體用完了怎麼辦?插入,刪除元素應該怎麼辦?所以必須讓計算機知道何時記憶體已經用完,必須申請新空間,自己目前有多少個元素。以及插入,刪除元素應該怎麼調整結構等。

下面附調整後的順序表的結構:

#difine list_init_size 100

#define listincrement

typedef struct{

elemtype *elem ; //指向一段記憶體的指標

int length ;

int listsize ;

資料結構思想

程式的好壞一般來說有2個標準,乙個是時間複雜度,乙個是空間複雜度。時間複雜度說的是程式執行的時間 空間複雜度說的是程式的記憶體占用的多少。而資料結構就是為了解決時間複雜度的,或者說乙個好的資料結構 演算法 可以節省程式執行的時間。顧名思義,線性表是一條線的。首先要稍稍提一下,資料結構的儲存只有陣列 ...

Early Orders 資料結構 思維

early orders 資料結構 思維 題目大意 給你乙個序列,讓你找乙個字典序最小的子串行,要求這子串行是乙個前k個數的全排列。題解 難度不太,冷靜思考。我用的優先佇列寫的,寫起來還是有點噁心,碼量不大,要注意很多細節。include define lson id 1 define rson i...

資料結構 線性結構

typedef int position typedef struct lnode list struct lnode 初始化 list makeempty 查詢 define error 1 position find list l,elementtype x 插入 bool insert lis...