#define maxsize 100
//定義整型變數maxsize為100
1.順序表的結構體定義
typedef
struct
sqlist;
2.單鏈表的結點定義
typedef
struct lnodelnode;
2.雙鏈表結點定義
typedef
struct dlnodedlnode;
ps:結點是記憶體中一片由使用者分配的儲存空間,只有乙個位址來表示它的存在,沒有顯式的名稱,因此我們會在分配鍊錶結點空間的時候,同時定義乙個指標,來儲存這片空間的位址(這個過程通俗地講叫指標指向結點),並且常用這個指標的名稱來作為結點的名稱。
例如下邊這句**:
lnode *a=
(lnode *
)malloc
(sizoof
(lnode)
);
使用者分配了一片lnode型空間,也就是構造了乙個lnode型的結點,這時候定義乙個名字為a的指標來指向這個結點,同時我們把a也當作這個結點的名字。注意,這裡a命名了兩個東西:乙個是結點,另乙個是指向這個結點的指標。
(1)初始化順序表的演算法
只需要將length設定為0,**如下:
void
initlist
(sqlist &l)
(2)求指定位置元素的演算法
用e返回l中p位置上的元素,**如下:
int
getelem
(sqlist l,
int p,
int&e)
(3)按元素值查詢演算法
int
finde
(sqlist l,
int e)
}return-1
;}
(4)插入資料元素的演算法
順序表l的第p個位置上插入新的元素e,如果p的輸入不正確則返回0,代表插入失敗;如果p的輸入正確,則將順序表第p個元素以及以後元素右乙個位置,騰出乙個空位置插入新元素,順序表的長度增加1,插入操作成功,返回1
int
inserte
(sqlist &l,
int p,
int e)
(5)刪除指定位置的元素
int
deleteelem
(sqlist &l,
int p,
int&e)
(1)建立鍊錶
①尾插法建立
//假設有n個元素儲存在陣列a中,用尾插法建立鍊錶c
void
createlistr
(lnode *
&c,int a,
int n)
r->next=
null
;}
②頭插法建立鍊錶
//假設有n個元素儲存在陣列a中,用頭插法建立鍊錶c
void
createlistf
(lnode *
&c,int a,
int n)
}
(2)刪除結點
要將單鏈表的第i個結點刪除,必須先在單鏈表中找到第i-1個結點,再刪除其後繼結點。如果要刪除結點p則完整的刪除操作應該是:
q=p-
>next;
p->next=p-
>next-
>next;
free
(q);
1.採用尾插法建立雙鏈表
void
createdlistr
(dlnode *
&l,int a,
int n)
r->next=
null
;}
2.查詢結點的演算法
在雙鏈表中查詢第乙個值為x的結點,從第乙個結點開始,邊掃瞄邊比較,若找到這樣的結點,則返回結點指標,否則返回null,演算法**如下:
dlnode*
findnode
(dlnode *c,
int x)
return p;
}
3.插入結點的演算法
假設在雙鏈表中p所指的結點之後插入乙個結點s,其操作語句如下;
s-
>next=p-
>next;
s->prior=p;
p->next=s;
s->next-
>prior=s;
//假如p所指向最後乙個結點,則本行可去掉
4.刪除結點的演算法
q=p-
>next;
p->next=q-
>next;
q->next-
>prior=p;
free
(q);
2 2線性表的結構體定義和基本操作
define maxsize 100 這裡定義乙個整型常量maxsize,值為1001 順序表的結構體定義 typedef structsqlist 順序表型別的定義乙個順序表包括乙個儲存表中元素的陣列data和乙個指示元素個數的變數length。如下圖2 9所示 ps 在考試中用得最多的順序表的定...
線性表的基本定義和操作
目錄 線性表的順序表示 線性表是具有相同資料型別的n n geq 0 個資料元素的有限序列 其中n為表長,當n 0 n 0n 0時,該線性表是乙個空表。若用l ll命名線性表,則其一般表示如下 l a1,a 2,an l a 1,a 2 cdot cdot cdot a n l a1 a2 an 其...
線性表的定義和基本操作
目錄 一 定義 二 特點 三 線性表的主要操作 線性表具有 相同的資料型別 n n 0 個資料元素的 有限序列,n 為表長,當 n 0表示空表 一般表示為 l a 1,a,2 an 第乙個元素a1是第乙個元素表頭元素,an是最後乙個元素表尾元素,除第乙個元素外其他元素都有乙個前驅,除最後乙個元素外,...