設線性表a=(a1, a2,…,am),b=(b1, b2,…,bn),試寫乙個按下列規則合併a、b為線性表c的演算法,使得:
c= (a1, b1,…,am, bm, bm+1, …,bn) 當m≤n時;
或者c= (a1, b1,…,an, bn, an+1, …,am) 當m>n時。
線性表a、b、c均以單鏈表作為儲存結構,且c表利用a表和b表中的結點空間構成。注意:單鏈表的長度值m和n均未顯式儲存。
函式的原型如下:
void lnk_merge(linklist a, linklist b, linklist c)
struct _lnklist;
typedef struct _lnklist node;
typedef struct _lnklist *linklist;
提供**
#include #include #include "list.h" // 請不要刪除,否則檢查不通過
void lnk_merge(linklist a, linklist b, linklist c)
參考**
/*
鍊錶 合併
設線性表a=(a1, a2,…,am),b=(b1, b2,…,bn),試寫乙個按下列規則合併a、b為線性表c的演算法,使得:
c= (a1, b1,…,am, bm, bm+1, …,bn) 當m≤n時;
或者c= (a1, b1,…,an, bn, an+1, …,am) 當m>n時。
線性表a、b、c均以單鏈表作為儲存結構,且c表利用a表和b表中的結點空間構成。注意:單鏈表的長度值m和n均未顯式儲存。
函式的原型如下:
void lnk_merge(linklist a, linklist b, linklist c)
即將a和b合併為c,其中 c 已經被初始化為空單鏈表
*//*
分析:三個鍊錶都要改為帶頭結點的鍊錶
*/#define _crt_secure_no_warnings
#include #include //#include "list.h" // 請不要刪除,否則檢查不通過
#define elemtype int
struct _lnklist ;
typedef struct _lnklist node;
typedef struct _lnklist* linklist;
void lnk_merge(linklist a, linklist b, linklist c)
else
if (tmpb == null)
else
}}linklist creatlist()
void pushbyend(linklist l, int n)
l->next = node;
node->data = n;
node->next = null;
}void print(linklist l)
printf("%d ", l->data);
printf("\n");
}int main()
print(a);
printf("請輸入從大到小的b鍊錶,按回車輸入下乙個數字,按ctrl+z結束輸入:>\n");
linklist b = creatlist();
if (b == null) return;
while (scanf("%d", &n) != eof)
print(b);
linklist c = creatlist();
lnk_merge(a, b, c);
print(c);
return 0;
}
手繪過程 資料結構 有序鍊錶合併(C語言版)
有序鍊錶合併 兩個有序的鍊錶,要求將其合併為乙個鍊錶,並且該鍊錶保持有序!這裡所講的是鍊錶公升序!首先,我們要構造兩張按照公升序排列好的鍊錶。構造鍊錶 我們的方法有尾插,頭插,大家可以click鏈結來檢視 這裡我們的實驗資料,以及思路如圖所示!實驗資料 鍊錶1 1,3,5,7 鍊錶2 1,2,4 5...
資料結構之合併鍊錶
題目 輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則 分析 鍊錶1的頭結點小於鍊錶2的頭結點,那麼鍊錶1的頭結點將是合併後鍊錶的頭結點,如果鍊錶2的頭結點小於鍊錶1的頭結點那麼鍊錶2的頭結點將是合併後剩餘節點的頭結點,當我們把兩個鍊錶中值較小的頭結點鏈結到...
資料結構(C語言) 單向鍊錶
c語言的單向鍊錶,就是在乙個將一些資料放在乙個結構體裡,然後在結構體裡加 struct next 的成員,用於指向下一結點。引用時,建立乙個臨時的結構體變數進行引用。如原結構體變數為 struct p 則 可建立 struct temp,然後 for temp p temp next null te...