單鏈表的應用舉例

2021-06-19 06:17:00 字數 1017 閱讀 2767

例2.5 已知單鏈表h,寫一演算法將其倒置。即實現如圖2.22的操作。(a)為倒置前,(b)為倒置後。

演算法思路:依次取原鍊錶中的每個結點,將其作為第乙個結點插入到新鍊錶中去,指標p用來指向當前結點,p為空時結束。

演算法如下:

void reverse (linklist h)

}演算法2.15。該演算法只是對鍊錶中順序掃瞄一邊即完成了倒置,所以時間效能為o(n)。

例2.6 已知單鏈表l,寫一演算法,刪除其重複結點,即實現如圖2.23的操作。(a)為刪除前,(b)為刪除後。

演算法思路:用指標p 指向第乙個資料結點,從它的後繼結點開始到表的結束,找與其值相同的結點並刪除之;p 指向下乙個;依此類推,p 指向最後結點時演算法結束。

演算法如下:

void pur_linklist(linklist h)

/*if*/

else q=q->next;

} /*while(q->next)*/

p=p->next; /*p指向下乙個,繼續*/

} /*while(p->next)*/

}演算法2.16。該演算法的時間效能為o(n2)。

例2.7 設有兩個單鏈表a、b,其中元素遞增有序,編寫演算法將a、b歸併成乙個按元素值遞減(允許有相同值)有序的鍊錶c,要求用a、b中的原結點形成,不能重新申請結點。

演算法思路:利用a、b兩表有序的特點,依次進行比較,將當前值較小者摘下,插入到c表的頭部,得到的c表則為遞減有序的。

演算法如下:

linklist merge(linklist a,linklist b)

/*設a、b均為帶頭結點的單鏈表*/

else

/*從原ab表上摘下較小者*/

s->next=c->next; /*插入到c表的頭部*/

c->next=s;

} /*while */

if (p==null) p=q;

while (p) /* 將剩餘的結點乙個個摘下,插入到c表的頭部*/

}演算法2.17。該演算法的時間效能為o(m+n)。

第四周 單鏈表的應用舉例

1 建立標頭檔案 ifndef linklist h included define linklist h included typedef int elemtype typedef struct lnode 定義單鏈表結點型別 linklist void createlistf linklist ...

單鏈表的應用

就地逆置 頭插法 有乙個線性表採用帶頭節點的單鏈表儲存,採用就地演算法將其就地逆置。思路 使用p指標掃瞄原單鏈表,現將頭節點的next置為空,然後將其他節點採用頭插法插入。就地逆置單鏈表,就地 的意思是輔助空間為o 1 public void reverse linklist l 將乙個線性表拆成兩...

單鏈表的應用

前言 上一節通過學習單鏈表,知道單鏈表的是隨機訪問結構,要獲取元素的元素必須從頭指標出發順序查詢,因此也稱為順序訪問的訪問結構,使用單鏈表可以克服陣列鍊錶需要預先知道資料大小的缺點,實現靈活的動態記憶體管理。這裡我們用c語言結合單鏈表來實現乙個可以實現增刪改查的學生管理系統。include incl...