資料結構 第二章 線性表

2021-09-27 08:57:35 字數 2698 閱讀 6413

資料結構——第二章 線性表

※模板(引數化的多型***)

☆引數化多型性:講程式所處理的物件型別引數化,使一段**可用於處理多種不同型別的物件

☆採用模板程式設計:提供**共享機制(邏輯功能相同,資料型別不同)

☆定義格式:

template//尖括號內又稱模板形參表

返回值型別 函式名 (參數列) //如果變數被引數化,則返回值型別為t

☆類模板:定義類模板,則類內成員函式均成為函式模板。在類外定義要使用模板的格式

定義格式:template 《模板形參表》 //typename t

class 類模板名

成員函式類外定義:

template 《模板形參表》

返回值型別 模板名 《形參表》::成員函式名

※指標:變數名,記憶體位址,值 (p).data=p->data

左值:記憶體位址 右值:值

注:所有型別的指標本身所佔記憶體相等大小(char int*)

※線性表的邏輯結構

☆線性表:是n(n>=0)個資料元素的有限序列 當n=0時為空表

記為l(a1,a2,a3,……,an) 表中資料型別相同

注:表中資料元素邏輯序號從1開始

訪問數值,邏輯結構

析構函式(無返回值,但定義時前面不加void):鏈式.動態儲存時,需要寫析構函式主動釋放空間。靜態儲存則不需要析構函式

☆線性表的順序儲存結構(用一維陣列)

順序表:線性表的順序儲存結構

特點:用一段連續的儲存單元依次儲存線性表資料

①無參建構函式(初始化順序表):建立乙個空順序表,將表的長度初始化為0

類名()

②有引數的建構函式(建立順序表):傳入資料元素,將資料元素個數作為順序表的長度

③遍歷操作④按位/按值查詢⑤插入/刪除(注意空間和位置合法性.操作完成後表長度+1/-1)

注:空間合法性:判斷資料的數量是否小於等於表長

位置合法性:插入資料位置在1-n+1之間

順序表 優點:可隨機訪問資料,邏輯關係不另外佔據空間

缺點:容量難以確定,插入刪除操作需要移動的資料量大

☆線性表的鏈式儲存結構及實現

單鏈表的儲存結構:用一組任意的儲存單元存放線性表的元素

儲存位址不一定連續

使用指標儲存其後繼元素所在的位址(元素間的邏輯關係)

特點:儲存空間動態申請,長度靈活

first(頭指標)--頭結點--首元結點---結點2---結點3--……--結點n--尾結點

每個結點的儲存位址在其前驅結點的next域中

第乙個元素沒有前驅,故設頭指標指向第乙個結點的位址

最後乙個元素沒有後繼,故指標域為空 (尾標誌)

通常在開始結點(首元結點)前設一型別相同的結點,稱「頭結點」

模板使用時一定要例項化:template struct node

①無參建構函式(單鏈表的初始化)

template linklist:: linklist( )

②有參建構函式 頭插法 尾插法

1.頭插法(有頭結點)

template linklist:: linklist(datatype a[ ], int n)

}2.尾插法

template linklist:: linklist(datatype a[ ], int n)

r->next = nullptr; //單鏈表建立完畢,將終端結點的指標域置空

}3.遍歷操作

template void linklist:: printlist( )

}4.按位查詢

template datatype linklist:: get(int i)

if (p == nullptr) throw "位置";

else return p->data;

}5.按值查詢

template int linklist:: locate(datatype x)

return 0; //退出迴圈表明查詢失敗

}6.插入

template void linklist:: insert(int i, datatype x)

if (p == nullptr) throw "位置"; //沒有找到第i – 1個結點

else }}

}7.刪除

template datatype linklist:: delete(int i)

if (p == nullptr || p->next == nullptr) //結點p不存在或p的後繼結點不存在

throw "位置";

else }}

}8.析構函式

template linklist:: ~linklist( )

}雙鏈表(快速確定單鏈表中任一結點的前驅節點,可以在單鏈表的每個節點中再設定乙個指向其前驅結點的指標域,形成雙鏈表)

llink data rlink

插入時(p後插s)要修改四個指標(s->rlink=p->rlink,s->llink=p->rlink->llink,p->rlink=s,s->rlink->llink=s)(後繼結點不為空 若為空,則需要改變三個指標)

刪除後主動釋放空間

迴圈列表(將終端節點的指標由空改為指向頭結點)

判斷尾結點 :p->next=first

※順序表和煉表的比較

元素較少,多查詢,少插入少刪除的情況下用順序表

資料結構 第二章 線性表

線性表 是具有相同型別的n n 0 個元素的有限序列,其中n為表長,當n 0時,該錶為空表。線性表的特點 線性表的九種基本操作 initlist l 初始化表。構造乙個空的線性表。destroylist l 銷毀操作。銷毀線性表,並釋放線性表l所占用的記憶體空間。locateelem l,e 按值查...

資料結構 第二章 線性表

線性表 順序儲存 鏈式儲存 順序表單鍊錶 雙鏈表迴圈鍊錶 靜態鍊錶 陣列指標實現 借助陣列實現 定義 線性表是具有相同資料型別的n n 0 個資料元素的有限序列,其中n為表長,當n 0時該線性表是乙個空表。特點 1 個數有限 2 表中元素具有邏輯上的順序性。3 表中元素都是資料元素,每個元素都是單個...

資料結構第二章 線性表

線性表的定義 線性表是具有相同特性的資料元素的乙個有限序列。線性表的特性 1 有窮性 乙個線性表中的元素個數是有限的。2 一致性 乙個線性表中的所有元素的性質相同。從實現的角度看,所有元素具有相同的資料型別。3 序列性 線性表的順序儲存結構 線性表的順序儲存結構簡稱為順序表。順序表的基本運算 1 初...