資料學習之線性表的鏈式儲存C 實現

2021-07-28 11:25:15 字數 2526 閱讀 6119

最近一直在中國大學mooc網上選修了浙江大學的《資料結構》課程。第二週的課程講了線性表、堆疊和佇列三種抽象資料型別。接下來三篇部落格就這三種抽象資料型別進行總結和描述,並貼出c++實現的結構和主要的操作函式。

一、線性表抽象資料型別描述:

任何一種抽象資料型別的描述主要分為資料物件集操作集兩部分。

1、資料物件集:線性表示n個元素的構成的有序序列。(注意是有序序列)

2、操作集:(1)建立並初始化乙個空線性表;(2)根據位序k返回相應的元素的值

(3)在乙個已有的線性表中查詢資料值x第一次出現的位置,即位序值

(4)在乙個已有的線性表中在位序i前面插入乙個新的元素  (5)在乙個已有的線性表中刪除指定位序i的元素

(6)計算並返回乙個已有線性表的長度。

二、主要操作集函式的c++實現

1、資料結構實現,struct.

//list可以是乙個節點的指標,也可以是乙個線性表的第0個節點的指標,從而指向乙個線性表

typedef struct lnode* list;

//節點結構體定義

struct lnode

;

注意:這裡對list的理解,乙個list是個lnode結構體的指標,乙個list可指向乙個線性表,也可以指向線性表中的乙個節點。具體指什麼根據實際用處定。

2、建立和初始化乙個線性表

//操作函式1: 建立乙個新的空的線性表

//功能: 建立乙個節點的記憶體,初始化next指標,並將指標返回

list makeempty()

這裡特別需要注意的是:開始的時候必須為線性表的指標開闢記憶體,這個指標節點的作用僅僅是整個線性表的指標,不能當成線性表的乙個節點來看,可以當做線性表的第0個節點,該節點不儲存資料,僅表示乙個線性表的頭。當其next指標為null時,證明此時線性表為空,乙個元素沒有,但是這個時候該指標還是有,其記憶體還是有。

3、求乙個線性表的長度

//操作函式2: 求乙個線性表的表長

//功能: 遍歷整個鍊錶,返回其長度

int length(list ptrl)

return j;

}

此處注意:理解線性表的結尾標識,結尾節點的next指標為null,如果線性表指標的next指標為null,則證明線性表為空。

//操作函式3: 按序號查詢函式

//功能: 按序號查詢鍊錶中的節點,返回序號為k的節點的指標

list findkth(int k, list ptrl)

//判斷是否找到

if(i==k)

return p;

else

//沒有找到k節點

return null;

}

注意:這裡位序預設是從1開始的,即線性表中的第乙個元素是第乙個節點,位序是1。這裡返回的乙個節點指標,指向位序i的節點的指標。

5、按元素值查詢函式

//操作函式4: 按值查詢函式

//功能: 按序號查詢鍊錶中的節點,返回序號為k的節點的指標

list find(double data, list ptrl)

這裡注意:查詢的時候要判斷是否到了表的結尾,返回是元素值所在節點的指標;從節點頭開始遍歷;線性表的指標的next指標所指的節點才是整個線性表的第乙個節點。

6、在位序i之前插入乙個元素

//操作函式5: 插入操作的實現

//功能: 往現有的線性表中插入乙個節點

list insert(double data, list ptrl, int i)

p=find(i-1, ptrl); //找到第i-1個節點的指標

if(p==null)

else

}

7、刪除現有線性表的i位序處的乙個元素

//操作函式6: 刪除操作的實現

//功能: 往現有的線性表中刪除乙個節點

list delete(int i, list ptrl)

p = findkth(i-1, ptrl); //查詢第i-1個節點並返回其指標

if(p==null)

else if(p->next==null)

else //第i和i-1個節點都存在

}

注意:

刪除原理: 第i-1節點的next指標指向第i+1位序的節點即可,但是要釋放記憶體,因為在插入原始的時候開闢了記憶體。

線性表之鏈式儲存結構

下面 為單鏈表的一些基本操作 include using namespace std typedef int elemtype typedef struct lnode linklist 逆序建立鍊錶 linklist recreatelinklist linklist l cout l n cha...

線性表的鏈式儲存

此方法雖然簡單,但是真寫起來太複雜了。線性表的鏈式儲存 include include struct lnode 線性表的初始化 void init l lnode l 線性表的後插建立 void create l1 lnode l n next null 線性表的後插建立 void create ...

線性表的鏈式儲存

引言 一 單鏈表 相較於順序儲存用連續的儲存單元儲存,單鏈表採用鏈式儲存結構,用一組位址任意的儲存單元儲存資料元素。特點 1 儲存單元可以是不連續的,即邏輯結構與物理結構可以不相同 2 元素用結點儲存,每個結點由元素值和下乙個元素的位址構成 3 單鏈表是由每個結點的指標域按照邏輯次序相互連線而成的。...