線性表練習題超詳細解答

2021-10-04 09:54:31 字數 1215 閱讀 5964

天才亦是眾生,眾生皆懷其才。

鍊錶練習:

1有乙個帶頭結點的單鏈表l,設計乙個演算法使其元素遞增有序。

演算法思想:用直接插入排序的方法,將鍊錶分成兩部分,每次取後部分乙個元素插入前部分正確的位置上。

void sort(linklist &l)

p->next=pre->next;//待插元素歸位

pre->next=p;//待插前驅指向它

p=r;//拿出下乙個要插入的元素

}}

2 將帶頭結點的單鏈表逆置。

演算法思想:

法一:頭插法按鍊錶遍歷次序再插入一遍

linklist reverse(linklist &a)

return a;

}

法二:把鍊錶所有指標反向。

linklist reverse(linklist &a)

a->next=p; //處理最後乙個結點。

return a;

}

3 找到兩個鍊錶的公共結點

思路:鍊錶的公共結點,也就是兩個指標指向同乙個結點,由於每個結點都只有乙個指標域,從第乙個公共結點之後兩個鍊錶就相當於乙個鍊錶。而公共結點之前的鍊錶長短不一,需要找到兩個表長的差值再同步遍歷比較。

linklist findcommon(linklist a,linklist b)

else

while(dist--)//令長的和短的對齊,開始遍歷

longlist=longlist->next;

while(longlist!=null)//此時兩個鍊錶剩餘長度是相等的

}return null;

}

4將乙個鍊錶a拆分成兩個鍊錶a和b,分別儲存a中第奇數序號個元素和第偶數序號元素。

linklist discreat(linklist &a)

else//奇數插入a鍊錶

p=p->next;

}return b;//返回b鍊錶

}

5在單鏈表內刪除給定範圍內的數。

void dele(linklist &a,int a,int b)

else//不符合條件繼續向下遍歷

}}

線性表練習題

題目 1 有序鍊錶的合併 將2個遞增的有序鍊錶合併為 乙個鍊錶的有序鍊錶 要求結果鍊錶仍然使 用兩個鍊錶的儲存空間,不不另外佔 用其他的儲存空間.表中不不允許有重複的資料。演算法思想 1 假設待合併的鍊錶為la和lb,合併後的新錶使用頭指標lc lc的表頭結點設為la的表頭結點 指向.pa 和 pb...

線性表練習題2

題目要求 長度為n的順序表l,編寫乙個時間複雜度為o n 空間複雜度為o 1 的演算法,該演算法刪除線性表中所有值為x的資料元素。演算法分析 設定兩個計數器,乙個為i,記錄掃瞄過的元素的個數 乙個為j,記錄掃瞄過的非x的元素的個數。從1 n對所有的元素進行掃瞄,如果該元素不是x,則i j 並令i對應...

線性表演算法題庫 線性表習題

鍊錶。若指標p指向某結點時,能夠根據該指標找到其直接後繼,能夠順後繼指標鏈找到p結點後的結點。但是由於不知道其頭指標,所以無法訪問到p指標指向的結點的直接前趨。因此無法刪去該結點。2.雙鏈表。由於這樣的鍊錶提供雙向指標,根據p結點的前趨指標和後繼指標可以查詢到其直接前趨和直接後繼,從而可以刪除該結點...