mysql 線性表 資料結構(二)線性表 鍊錶

2021-10-20 22:33:10 字數 3198 閱讀 8248

通常情況下,鏈結可分為單鏈表、雙向鍊錶和迴圈鍊錶三種常用型別。

一、單鏈表基本操作的實現

使用鏈式儲存結構來實現的線性表稱為鍊錶。首元結點、頭結點、頭指標、空指標。

1.單鏈表的型別定義

typedef struct lnode//結點型別

lelemtype data;//資料域

struct lnode * next;//指標域

} lnode, * linklist;

2.初始化操作initlinklist(&l)

status initlinklist(linklist &l)

return j;//返回計數器

4.取元素操作getelem(linklist l,int i,lelemtype &e)

status getelem(linklist l,int i,lelemtype &e)

lnode*p=l;int j=0;while(jnext)//不為i結點,且不為最後乙個

p=p->next;//向後查詢

j++;

}if(j==i)//若找到

e=p->data;//由e返回其值

returnok;

}else return error;//若沒找到,返回error

5.按值查詢locateelem(l,e)

linklist locateelem(linklist l,lelemtype e)

lnode*p=l->next;//p指向第乙個結點

while(p&&!equal(p->data,e))//若不等於e

p=p->next;//向後查詢

if(p) return p;//找到

else return null;//沒找到

6.插入操作listinsert(&l,i,e)

status listinsert(linklist &l,inti,lelemtype e)

if(j==i-1)//在j後插入新結點

q=(lnode *)malloc(sizeof(lnode));//生成新結點

if(!q) returnoverflow;

q->data=e;

q->next=p->next;

p->next=q;returnok;

}else returnerror;

7.刪除操作listdelete(&l,i,&e)

status listdelete(linklist &l,int i,lelemtype &e)

lnode*p=l,*q;int j=0;while(jnext)

p=p->next;

j++;

}if(j==i-1&&p->next)//判斷i結點是否存在

q=p->next;

p->next=q->next;

e=q->data;//由e返回刪除元素的值

free(q);

}else returnerror;

8.頭插法建立單鏈表操作createlist(&l,n)

void createlist(linklist &l,intn)

dlnode,* dlinklist;

2.插入操作演算法

status listinsert(dlinklist &l,inti,lelemtype e)

dlnode*p=l,*q;int j=0;while(p->next&&j

p=p->next;

j++;

}if(j==i-1)

q=(dlnode *)malloc(sizeof(dlnode));if(!q) returnoverflow;

q->data=e;

q->next=p->next;

q->prior=p;if(p->next) p->next->prior=q;

p->next=q;returnok;

}else returnfalse;

3.刪除操作演算法

status listdelete(dlinklist &l,int i,lelemtype &e)

dlnode*p=l;int j=0;while(p->next&&j

p=p->next;

j++;

}if(j==i)

e=p->data;

p->prior->next=p->next;if(p->next) p->next->prior=p->prior;free(p);returnok;

}else returnflase;

三、迴圈鍊錶的認識和使用

首尾相接的鍊錶就是迴圈鍊錶,單鏈表和雙鏈表均可以構成迴圈鍊錶。

1.迴圈鍊錶 表尾結點的判定p->next=l;2.迴圈單鏈表合併演算法

void unioncirlist(linklist &r1,linklist &r2)

lnode*q=r2->next;

r2->next=r1->next;

r1->next=q->next;free(q);

四、鍊錶例項——約瑟夫環問題

1.問題描述:

設編號為1、2、3...、n的n個人圍坐一圈,約定從編號為k(1=

2.演算法描述:

1 #include

2 #include

3 typedef structpersonnode4 personnode,*personlist;8 //由n個人組成的約瑟夫環問題,從第k個人開始,數到m就出列

9 void josephus(int n,int m,intk)10 20 for(i=2;i<=n;i++)21 28 p=r->next;//p指向第1個人員結點

29 for(i=1;inext;//p指向第k個結點

33 }34 for(i=1;inext;//p指向出列結點

40 }41 printf("%d",p->num);//輸出人員編號

42 r->next=p->next;43 free(p);//刪除已出列的結點

44 p=r->next;//下一計數為1的結點

45 }46 printf("%d\n",r->num);//輸出最後出列人員編號

47 free(r);//刪除最後乙個結點

48 }49

50 intmain()51

輸出結果:

資料結構(二) 線性表

線性表是最簡單最常用的資料結構,是一種典型的線性儲存結構。定義 線性表是由n n 0 個資料元素 結點 a1 a 2 an 組成的有限序列。n為表的長度。當n 0,為 空表 n 0時,為 a1,a 2,an 邏輯特徵 非空的線性表只有乙個頭結點,也只有乙個終結點,頭結點只有乙個直接後繼結點,而沒有直...

資料結構實驗二 線性表

一 實驗目的 鞏固線性表的資料結構,學會線性表的應用。1.回顧線性表的邏輯結構,線性表的物理儲存結構和常見操作。2.學習運用線性表的知識來解決實際問題。3.進一步鞏固程式除錯方法。4.進一步鞏固模板程式設計。二 實驗內容 1.建立乙個n個學生成績的順序表,對錶進行插入 刪除 查詢等操作。分別輸出結果...

ZJU資料結構 二 線性表

線性表 由同型別資料元素構成有序序列的線性結構 表中元素個數稱為線性表的長度線性表沒有元素時,稱為空表表起始位置稱為表頭,表結束為止稱為表尾型別名稱 線性表 list 資料物件集 線性表是n 0 個元素構成的有序序列 a1,a2,an 操作集 線性表l list,整數i表示位置,元素x elemen...