題目要求:
長度為n的順序表l,編寫乙個時間複雜度為o(n)、空間複雜度為o(1)的演算法,該演算法刪除線性表中所有值為x的資料元素。
演算法分析:
設定兩個計數器,乙個為i,記錄掃瞄過的元素的個數;乙個為j,記錄掃瞄過的非x的元素的個數。從1~n對所有的元素進行掃瞄,如果該元素不是x,則i++,j++並令i對應的元素賦給j;如果該元素是x,i++,j不變,並將i對應的元素賦給j。
程式**:
#includeusing namespace std;typedef int elemtype;
struct sqlist
; //關鍵函式
void fun(sqlist &l,int x)
{ int i = 0;
int j = 0;
for(i=0;i
執行結果:
線性表練習題
題目 1 有序鍊錶的合併 將2個遞增的有序鍊錶合併為 乙個鍊錶的有序鍊錶 要求結果鍊錶仍然使 用兩個鍊錶的儲存空間,不不另外佔 用其他的儲存空間.表中不不允許有重複的資料。演算法思想 1 假設待合併的鍊錶為la和lb,合併後的新錶使用頭指標lc lc的表頭結點設為la的表頭結點 指向.pa 和 pb...
線性表練習題超詳細解答
天才亦是眾生,眾生皆懷其才。鍊錶練習 1有乙個帶頭結點的單鏈表l,設計乙個演算法使其元素遞增有序。演算法思想 用直接插入排序的方法,將鍊錶分成兩部分,每次取後部分乙個元素插入前部分正確的位置上。void sort linklist l p next pre next 待插元素歸位 pre next ...
線性表演算法題庫 線性表習題
鍊錶。若指標p指向某結點時,能夠根據該指標找到其直接後繼,能夠順後繼指標鏈找到p結點後的結點。但是由於不知道其頭指標,所以無法訪問到p指標指向的結點的直接前趨。因此無法刪去該結點。2.雙鏈表。由於這樣的鍊錶提供雙向指標,根據p結點的前趨指標和後繼指標可以查詢到其直接前趨和直接後繼,從而可以刪除該結點...