寫在前邊的話寫**好比寫詩,資料結構就好比唐詩三百首,熟讀並默寫這是基本功能,所以要閒的沒事可以在紙上多寫
線性表的定義和基本操作
線性表的實現
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 1001、順序表的結構定義
typedef structsqlist;簡寫
int a[maxsize];2、單鏈表結點定義int n;
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 訪問方...