第二章 線性表

2021-07-11 15:01:45 字數 3687 閱讀 4266

寫在前邊的話寫**好比寫詩,資料結構就好比唐詩三百首,熟讀並默寫這是基本功能,所以要閒的沒事可以在紙上多寫

線性表的定義和基本操作

線性表的實現

2.1順序儲存結構

2.2鏈式儲存結構

2.3線性表的應用

1. 線性表的邏輯特性

只有乙個表頭元素,只有乙個表尾元素,表頭元素沒有前驅,表尾元素沒有後繼元素,其它的只有乙個前驅和後繼元素。

2. 線性表的儲存結構

順尋儲存:順序表

鏈式儲存:鍊錶

2.1順序表

順序表就是線性表中所有元素按照其邏輯順序,依次儲存到從指定位置開始的一塊連續的儲存空間中。

2.2鍊錶

在鍊錶儲存中,每個結點不僅包含所存元素本身資訊,還包含元素之間的邏輯關係資訊,即前驅結點包含後繼結點的位址資訊。

2.3兩種比較

順序表:隨機訪問、靜態分配、占用連續儲存空間

鍊錶:不支援隨機訪問、動態分配、結點儲存空間利用率較順序表低

順序表插入乙個元素時,需要移動多個元素;鍊錶插入元素時,不需要移動元素。

3. 鍊錶5種形式

3.1單鏈表

帶頭結點的head->next==null鍊錶為空

不帶頭結點的head == null鍊錶為空

3.2雙鏈表

3.3迴圈單鏈表

帶頭結點的head->next==head鍊錶為空

不帶頭結點的head == null鍊錶為空

3.4迴圈雙鏈表

帶頭結點的head->next==head && head->prior==head鍊錶為空

不帶頭結點的head == null鍊錶為空

3.4靜態鍊錶

具有相同特性的資料元素的乙個有限序列。序列中所包含的元素個數叫做線性表的長度。

#define maxsize 100

1、順序表的結構定義

typedef structsqlist;

簡寫

int a[maxsize];

int n;

2、單鏈表結點定義

typedef struct lnodelnode;

3、雙鏈表結點的定義

typedef struct dlnodedlnode;

1、定位 x

int locateelem(sqlist l,int x)

return i;

}

2、插入元素 x

void insert(sqlist &l,int x)

l.data[p]=x;

++l.length;

}

3、刪除順序表l中下標為p的元素,並將刪除元素賦值給e

int listdelete(sqlist &l,int p,int &e)
4、初始化順序表

void initlist(sqlist &l)
5、用e返回l指定位置p上的元素

int getelem(sqlist l,int p,int &e)
1、有a、b兩個帶頭結點的遞增有序的單鏈表,將a和b歸併為乙個非遞減有序的單鏈表c。

void merge(lnode *&a,lnode *&b,lnode *&c)

else

}r->next=

null; //

if(p!=

null) r->next=p;

if(q!=

null) r->next=q;

}

2、使用尾插法建立鍊錶

void creatlistr(lnode *&c,int a,int n)

r->next=null;

}

3、使用頭插法建立鍊錶

void creatlistf(lnode *&c,int a,int n)

}

頭插法最後得到的鍊錶順序和原陣列順序是相反的

4、把之前的鍊錶歸併成乙個遞減有序的鍊錶

使用頭插法即可實現

void merge(lnode *&a,lnode *&b,lnode *&c)else

}while(p!=

null)

while(q!=

null)

}

5、插入乙個結點

->a->b 插入結點 s

s->next = a->next;

a->next = s;

6、刪除乙個結點

->a->b

q=a->next;  //用q接收b,為的是刪除之後將該結點空間釋放

a->next=a->next->next;

free(q);

7、查詢乙個鍊錶c(帶頭結點)中是否含有值為 x 的元素,如果存在則刪除該結點並返回 1

int searchanddelete(lnonde *&c, int x)

p=p->next; //更新p

}if(p->next==

null)

else

}

1、採用尾插法建立雙聯表

void creatdlistr(dlnode *&l,int a,int n)

r->next=null;

}

2、查詢結點值為 x 的結點,存在返回結點指標,否則返回null

dlnode* search(dlnode *c,int

x) p=p->next;

}return p; //最後不管是找到還是沒找到都返回p,因為如果沒找到,那麼終止while的時候p也是為null

}

3、插入結點演算法

p<->q 插入結點 s

s->next = p->next;

p->next->prior = s;

s->prior = p;

p->next = s;

4、刪除 p結點的後繼結點 演算法

p<->

q=p->next;

p->next = q->next;

q->next->prior = p;

free(q);

判斷 p 指標沿著迴圈鍊錶走到表尾的條件是 p->next == head

第二章 線性表

定義 線性表簡稱表,是n n 0 個具有相同型別的資料元素的有限序列,線性表中資料元素的個數稱為線性表的長度。長度等於0時稱空表,乙個非空表通常記作 l a1,a2,an 線性表的性質 1.有限性 元素個數有限 2.相同性 元素型別相同 3.順序性 除首位元素外,相鄰元素都有前驅和後繼 2.1.2線...

第二章線性表

2 1線性表的邏輯結構 1 線性表是n 0個具有相同型別的資料元素的有限序列。空表是長度等於零的線性表。2 特性 有限性 相同性 順序型。2 2線性表的順序儲存結構及實現 1 c 中陣列的下標是從0開始的,而線性表中元素的序號是從1開始的。線性表中第i個元素儲存在陣列中下標為i 1的位置。2 順序表...

第二章 線性表

第二章 線性表 順序表和煉表的比較 1 基於空間的比較 1 儲存分配的方式 順序表的儲存空間是一次性分配的,鍊錶的儲存卡空間是多次分配的。2 儲存密度 儲存密度 結點域值所佔的儲存量 結點結構所佔的儲存總量 順序表的儲存密度 1,鍊錶的儲存密度 1 因為結點中有指標域 2 基於時間的比較 1 訪問方...