設計演算法將乙個帶頭結點的單鏈表a分解為兩個具有相同結構的鍊錶b和c,其中b表的結點為a表中值小於零的結點,
而c表中的結點為a表中值大於零的結點。(鍊錶a中的元素為非零整數,要求b、c表利用a表的結點。)
鍊錶b使用鍊錶a的頭結點,鍊錶c申請乙個新的頭結點。
對鍊錶a進行遍歷的同時進行拆解,可以使用前插法或者後插法。
/*
設計演算法將乙個帶頭結點的單鏈表a分解為兩個具有相同結構的鍊錶b和c,其中b表的結點為a表中值小於零的結點,
而c表中的結點為a表中值大於零的結點。(鍊錶a中的元素為非零整數,要求b、c表利用a表的結點。)
*/#include
using
namespace std;
typedef
struct lnode lnode,
*linklist;
void
createlist
(linklist &l)
}void
printlist
(linklist l)
cout << endl;
}void
splitlist
(linklist &la, linklist &lb, linklist &lc)
else
if(pa-
>data >0)
pa = q;}}
intmain()
資料結構 演算法設計題 鍊錶字尾共同空間
採用帶頭結點的單鏈表儲存單詞,當兩個單詞有相同的字尾時,則可以共享相同的字尾儲存空間。例如,loading 和 being 的儲存空間影像如圖。設str1和str2分別指向兩個單詞所在鍊錶的頭結點,鍊錶結點結構為 data,next 請設計乙個時間上盡可能高效的演算法,找出由str1和str2所指的...
資料結構 演算法設計題 合併有序鍊錶2
將兩個非遞減的有序鍊錶合併成乙個非遞增的有序鍊錶。要求鍊錶仍使用原來兩個鍊錶的儲存空間,不另外使用其他的儲存空間,表中執行有重複的元素。與合併有序鍊錶1類似的思路,通過更改結點的指標域來重新建立元素之間的線性關係,得到新鍊錶。有兩個關鍵點 合併的鍊錶與原鍊錶順序相反,利用前插法建立鍊錶,形成遞減序列...
資料結構 演算法設計題 刪除連續序列鍊錶元素
設計乙個演算法,刪除遞增有序鍊錶中值大於mink且小於maxk的所有元素。找到小於等於mink的結點和大於等於maxk的結點,進行連線即可。設計乙個演算法,刪除遞增有序鍊錶中值大於mink且小於maxk的所有元素。include using namespace std typedef struct ...