迴圈鍊錶及線性表的應用

2022-06-10 01:18:48 字數 2269 閱讀 6895

迴圈鍊錶的應用之約瑟夫環問題以及線性表總結之順序表與鍊錶的比較

1.1問題說明

問題描述:編號為1,2,···,n的n個人圍坐在一圓桌旁,每人持有乙個正整數的密碼。從第乙個人開始報數,報到乙個預先約定的正整數m時,停止報數,報m的人退席,下乙個人又重新從1開始報數,依此重複,直至所有的人都退席。編一程式輸出他們退席的編號序列。例如,設m=20,n=7,7個人的密碼依次是3,1,7,2,4,8,4,則退席的人的編號依次為6,1,7,5,3,2,4。

基本要求:用不帶表頭結點的迴圈單鏈表表示圍成圓圈的n個人;要求建立此迴圈單鏈表;某人離席相當於刪除乙個結點,要正確設定程式中迴圈終止的條件和刪除結點時指標的修改變化。

1.2**實現

#include

#include

#define null 0

typedef int elemtype;

typedef struct lnodelnode,*linklist;

//建立乙個不帶頭節點的迴圈單向鍊錶

void createcircularlist(linklist &l, int n)else{

q = p;

p = p->next;

count++;

outnum[num] = p->sequence;

printf("退出的編號順序是:");

for(int i = 0; i < n; i++){

printf("%d ", outnum[i]);

printf("\n");

//例項:設m=20,n=7,7個人的密碼依次是3,1,7,2,4,8,4,

//則退席的人的編號依次為6,1,7,5,3,2,4。

void main(){

linklist l;

createcircularlist(l, 7);

printcircularlist(l);

josephring(l, 20, 7);

2.線性表總結之順序表與鍊錶的比較

線性表有兩種儲存結構:順序表和煉表,通過對它們的討論可知它們各有優缺點。

順序儲存有三個優點:

(1) 方法簡單,各種高階語言中都有陣列,容易實現。

(2) 不用為表示結點間的邏輯關係而增加額外的儲存開銷。

(3) 順序表具有按元素序號隨機訪問的特點。

但它也有兩個缺點:

(1) 在順序表中做插入刪除操作時,平均移動大約表中一半的元素,因此對n較大的順序表效率低。

(2) 需要預先分配足夠大的儲存空間,估計過大,可能會導致順序表後部大量閒置;預先分配過小,又會造成溢位。

鍊錶的優缺點恰好與順序表相反。

在實際中怎樣選取儲存結構呢?通常有以下幾點考慮:

1.基於儲存的考慮

順序表的儲存空間是靜態分配的,在程式執行之前必須明確規定它的儲存規模,也就是說事先對「maxsize(n0)"要有合適的設定,過大造成浪費,過小造成溢位。可見對線性表的長度或儲存規模難以估計時,不宜採用順序表;鍊錶不用事先估計儲存規模,但鍊錶的儲存密度較低,儲存密度是指乙個結點中資料元素所佔的儲存單元和整個結點所佔的儲存單元之比。顯然鏈式儲存結構的儲存密度是小於1的。

2.基於運算的考慮

在順序表中按序號訪問ai的時間效能時o(1),而鍊錶中按序號訪問的時間效能o(n),所以如果經常做的運算是按序號訪問資料元素,顯然順序表優於鍊錶;而在順序表中做插入、刪除時平均移動表中一半的元素,當資料元素的資訊量較大且表較長時,這一點是不應忽視的;在鍊錶中作插入、刪除,雖然也要找插入位置,但操作主要是比較操作,從這個角度考慮顯然後者優於前者。

3.基於環境的考慮

順序表容易實現,任何高階語言中都有陣列型別,鍊錶的操作是基於指標的,相對來講前者簡單些,也是使用者考慮的乙個因素。

總之,兩中儲存結構各有長短,選擇那一種由實際問題中的主要因素決定。通常「較穩定」的線性表選擇順序儲存,而頻繁做插入刪除的即動態性較強的線性表宜選擇鏈式儲存。

小結線性表是一種最基本,最常用的資料結構。線性表有兩種儲存結構----順序表和煉表,以及在這兩種儲存結構上實現的基本運算。

順序表是用陣列實現的,鍊錶是用指標或游標實現的。用指標來實現的鍊錶,因為它的結點是動態分配的,故稱之為動態鍊錶;用游標模擬指標實現的鍊錶,由於其結點空間是靜態分配的,所以稱之為靜態鍊錶。這兩種鍊錶又可按鏈結形式的不同,區分為單鏈表,雙鏈表和迴圈鍊錶。

在實際應用中,對線性表採用哪種儲存結構,要視實際問題的要求而定,主要考慮求解演算法的時間複雜度和空間複雜度。因此,建議熟練掌握在順序表和煉表上實現的各種基本運算及其時間,空間特性。

最後分享些迴圈鍊錶及線性表的應用方面的資料

迴圈鍊錶及線性表的應用

Linux迴圈鍊錶及線性表的應用

1.1問題說明 問題描述 編號為1,2,n的n個人圍坐在一圓桌旁,每人持有乙個正整數的密碼。從第乙個人開始報數,報到乙個預先約定的正整數m時,停止報數,報m的人退席,下乙個人又重新從1開始報數,依此重複,直至所有的人都退席。編一程式輸出他們退席的編號序列。例如,設m 20,n 7,7個人的密碼依次是...

線性表 迴圈鍊錶

迴圈鍊錶的定義 將單鏈表中最後乙個資料元素的next指標指向第乙個元素,即把鍊錶的兩頭連線,形成了乙個環狀鍊錶,稱為迴圈鍊錶 在迴圈鍊錶中可以定義乙個 當前 指標,稱為游標,通過游標來遍歷鍊錶中所有元素 迴圈鍊錶和動態鍊錶相比,唯一的不同就是迴圈鍊錶首尾相連,其他都完全一樣 可以用兩次列印迴圈鍊錶,...

線性表 迴圈鍊錶

迴圈鍊錶解決的是如何從當前的乙個結點出發,訪問到鍊錶的全部結點。在單鏈表中,有了頭結點,可以用o 1 的時間訪問第乙個結點,但對於最後乙個結點訪問需要o n 時間,就是相當於將單鏈表全部掃瞄一遍。對於迴圈列表不用頭指標,而是用指向終端結點的尾指標來表示迴圈鍊錶,也就是最後乙個結點就是尾指標作為返回,...