資料結構之線性表再思考

2022-03-01 21:07:40 字數 2336 閱讀 7909

資料結構學起來妙不可言,賊有意思。

很久沒寫部落格了,今天來一篇長的。前面寫的關於線性表的**和思路,經過我多次反覆思考,又有了新的收穫,與大家一起分享。

1、線性表的定義

首先要明白什麼是線性表,一種常用且最簡單的資料結構。

資料結構通俗來說就是:裝水的杯子,有的是圓的、有的是方的。

官方定義:線性表是n個資料元素的有限序列。

把這個樣的乙個資料模型對映到計算機,等同找一塊儲存空間給它,而線性表一般是申請動態記憶體,因此就是在堆上給它分配一塊記憶體。

看下圖

通過圖我們可以了解到,線性表資料結構如何對映在計算機中。有了這個基礎就可以進入**邏輯部分。/* 影象中的堆是為了更好講解 */

2、線性表的操作思路

在嚴奶奶的書有如下操作集合

1、初始化

2、銷毀

3、置空表

4、空表檢測

5、返回元素個數

6、返回指定位序元素的值

7、返回表中第乙個與指定值滿足compare()的資料元素的位序,若不存在,返回0

8、返回指定元素的前驅

9、返回指定元素的後驅

10、插入元素

11、刪除元素

12、遍歷

13、表a和表b,a = a u b  減去 a n b(a和b的補集)

14、已知非遞減序列表a和表b為合併非遞減序列表的表c , c = a u b

在所有的操作之前,需要定義乙個表的結構體:

結構體:

表首位址

表使用長度

表最大長度

**實現:

typedef struct changelistcl;

初始化1、表首位址指向申請記憶體的首位址及定義申請的記憶體多少

2、進行動態記憶體分配成功的檢測

3、表使用長度歸0

4、表最大長度被賦值申請記憶體長度

/*  動態記憶體的申請通過malloc函式來實現,需配套使用free函式釋放記憶體  */

銷毀1、釋放動態記憶體

2、表首位址指向null(消除表頭指標)

3、表使用長度歸0       (消除表使用長度)

4、表最大長度歸0       (消除表最大長度)

2的作用是假設1失敗,作為補救手段;

銷毀就是表的所有結構全部銷毀,包括首指標、使用長度、最大長度

結構體在記憶體中儲存是按照最大變數型別所佔位元組依次排序的,如果表的三個變數沒有全部銷毀,則會造成記憶體浪費。

置空表1、使用長度歸0

空表判斷

1、判斷使用長度是否為0

返回元素個數

1、返回使用長度

返回指定位序元素的值             

1、判斷位序是否合法

2、返回指定位序的值

7、返回表中第乙個與指定值滿足compare()的資料元素的位序,若不存在,返回0

在此之前,需要寫乙個compare函式

compare(  elemtype elemone , elemtype elemtwo )

函式作用:兩數相等,返回ture;兩數不等,返回false

1、在使用長度的範圍內判斷第乙個滿足要求的元素,並返回該元素的位序

返回前驅

1、位序2至使用長度之間判定

2、若有與指標值相等的元素,返回其元素前驅

返回後驅

1、位序1至 (使用長度 – 1)之間判定

2、若有與指標值相等的元素,返回其元素前驅

插入元素

1、判斷插入位序是否合法

2、判斷儲存空間是否滿了,如果滿,追加動態記憶體

3、追加動態分配成功檢測,失敗結束程式

4、新基址

5、最大長度加一

刪除元素

1、判斷刪除序號是否合法

2、返回刪除元素

3、刪除位置之後的元素左移

4、表長減一

遍歷1、visit函式(自己編寫,列印單個指定位置的值)

2、把visit函式作為函式引數,遍歷

表a和表b,a = a u b  減去 a n b(a和b的補集)

1、獲取b中的元素

2、進行locateeem判斷

3、插入不符合locateeem判斷的b中的元素到a中

4、a實際長度增加

已知非遞減序列表a和表b為合併非遞減序列表的表c , c = a u b

1、為c申請動態記憶體,分配成功檢測

2、合併演算法

2-1、比較大小

2-2、插入c,c表增加

2-3、a、b是否有一方先插完,再繼續插入另一表

**:

mysql 線性表 資料結構之線性表

概要 參考 大話資料結構 把常用的基本資料結構梳理一下。線性表定義 線性表 list 零個或多個資料元素的有限序列。若將線性表記為 a 1,cdots,a a i,a cdots,a n 則表中 a 領先於 a i a i 領先於 a 稱 a 是 a i 的直接前驅元素,a 是 a i 的直接後繼元...

資料結構之線性表

從現在開始,我們開始討論如何實現一些常用的資料結構和其中的一些經典演算法.等把資料結構講完了.我可能會繼續討論vc 的程式設計只是以及vs平台下的c c 開發等等.呵呵.我們進入正題吧.我在這裡就只實現線性表的連表結構.當然了,這裡實際上包含了好多知識.我希望大家在引用的時候.一定要領悟裡面的一些變...

資料結構之線性表

線性表是具有相同特性的資料元素的乙個有限序列。該序列中所含元素的個數叫做線性表的長度,用n表示,n 0。當n 0時,表示線性表是乙個空表,即表中不包含任何元素。設序列中第i i表示位序 個元素為ai 1 i n 線性表的一般表示為 a1,a2,ai,ai 1,an include include d...