最近一直在中國大學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 單鏈表是由每個結點的指標域按照邏輯次序相互連線而成的。...