天才亦是眾生,眾生皆懷其才。鍊錶練習:
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結點的前趨指標和後繼指標可以查詢到其直接前趨和直接後繼,從而可以刪除該結點...