題目描述:
長度為n的順序表l,編寫乙個時間複雜度為o(n)、空間複雜度為o(1)的演算法,該演算法刪除線性表中所有值為x的資料元素。演算法思想:
解法1.查詢到乙個元素值等於x的時候就覆蓋掉它,從前往後開始移動元素
解法2.一趟迴圈。重新往線性表裡填元素。
如果當前元素不等於x,就往線性表裡填入這個元素後i++。
如果當前元素等於x,i就只++。
這個時候就需要有乙個變數new_index來記錄當前新的線性表中的下標。
如果當前元素不等於x,填入這個元素後new_index就+1
如果當前元素等於x,new_index不變化。
解法3:如果當前元素不等於x,那麼元素就往前移動k個位置。
如果當前元素等於x,那麼k++。
k是當前等於x的元素的個數。l.length-=k
k就相當於記錄下現在有多少個等於x的元素,等遇到不等於x的元素的時候,該元素就相應地向前移動k個位置。
比如,設x=2,在【1,2,2,3】中,先置k=0。
【1,2,2,3】,a[0]=1,不等於2,往前移動0個位置,a[1]=2,a[2]=2,k此時為2
a[2]=3,不等於2,所以往前移動2個位置
核心**:
int del_x_1(sqlist &l,int x)
sqlist;
/*演算法思想:
查詢到乙個元素值等於x的時候就覆蓋掉它,從前往後開始移動元素
*/int del_x_1(sqlist &l,int x)
//兩個for迴圈。時間複雜度為n平方
}}/*
演算法思想:
一趟迴圈。重新往線性表裡填元素。
如果當前元素不等於x,就往線性表裡填入這個元素後i++。
如果當前元素等於x,i就只++。
這個時候就需要有乙個變數new_index來記錄當前新的線性表中的下標。
如果當前元素不等於x,填入這個元素後new_index就+1
如果當前元素等於x,new_index不變化。
*/int del_x_2(sqlist &l,int x)
l.length=new_index;
return 0;}/*
演算法思想:
如果當前元素不等於x,那麼元素就往前移動k個位置。
如果當前元素等於x,那麼k++。
k是當前等於x的元素的個數。l.length-=k
k就相當於記錄下現在有多少個等於x的元素,等遇到不等於x的元素的時候,該元素就相應地向前移動k個位置。
比如,設x=2,在【1,2,2,3】中,先置k=0。
【1,2,2,3】,a[0]=1,不等於2,往前移動0個位置,a[1]=2,a[2]=2,k此時為2
a[2]=3,不等於2,所以往前移動2個位置
*/int del_x_3(sqlist &l,int x)
else
// if(l.data[i]==x)
// k++;
// else
// l.data[i-k]==l.data[i];
/*【2,1,2,3】
k=0.
i=0,a[0]=2=x,k=1;
i=1,a[1]=1!=x,a[0]=a[1]【1,1,2,3】
i=2,a[2]=2=x,k=2;
i=3,a[3]=3!=x,a[i-k]=a[1]=a[3];*/}
l.length=l.length-k;
return 0;
}int initsqlist(sqlist &l)
int assignvalue(sqlist &l,int len)
return 0;
}int printflist(sqlist &l)
}int main()
鍊錶課後複習題 王道
目錄 1.設計乙個遞迴演算法,刪除不帶頭結點的單鏈表l中所有值為x的結點。2.刪除帶頭結點的單鏈表l中所有值為x的結點。3.在帶頭結點的單鏈表l中從尾到頭反向輸出每個結點的值 4.帶頭結點單鏈表l中刪除乙個最小值結點的比較高效的演算法,假設最小值結點唯一 5.將帶頭結點的鍊錶就地逆置 明日繼續更 以...
王道資料結構線性表課後習題
1.1.從順序表中刪除具有最小值的元素 假設唯一 並由函式返回被刪除的元素的值,空出的位置由最後乙個元素填補,若順序表為空則顯示出錯資訊並退出執行 bool del min sqlist l,elemtype value l.data pos l.data l.length 1 空出的位置由最後乙個...
2019考王道資料結構順序表習題
個人粗糙整理,由於不斷除錯,略顯粗糙,請見諒。include include define maxsize 50 typedef int elemtype typedef struct 定義順序表的儲存型別 sqlist bool del min sqlist q,elemtype e q.leng...