已知長度為n的線性表A採用順序儲存結構,請寫一時間複雜度為O(n)、空間複雜度為O(1)的演算法,該演算法刪除線性表中所有值為item的數據元素。
void Delete(ElemType A[ ],int n)
∥A是有n个元素的一维数组,本算法删除A中所有值为item的元素。
{i=1;j=n;∥设置数组低、高端指针(下标)。
while(i<j)
{while(i<j && A[i]!=item)i++; ∥若值不为item,左移指针。
if(i<j)while(i<j && A[j]==item)j--;∥若右端元素为item,指针左移
if(i<j)A[i++]=A[j--];}
改寫之後運行不出來,下面是改寫後的
package 线性表;
public class Work_10 {
public Work_10(){
int[] arr={2,34,4,4,5};
int item=4;
delete(arr,item,arr.length-1);
for(int a:arr){
System.out.print(a+" ");
}
}
public static void delete(int[] array,int item,int n){
int i=0,j=n;
while(i<j){
while(i<j&&array[i]!=item) i++;
if(i<j) while(i<j&&array[j]==item) j--;
if(i<j){
array[i++]=array[j--];
}
}
}
public static void main(String[] args) {
new Work_10();
}
}
#不知道該怎麼改?
求大佬解釋
要想刪除,先搜索,後刪除,給你個搜索的,剩下的自己思考下寫個變種就可以了。
哦,多出來是因為你輸出的個數錯了,刪除的過程沒問題。
刪除前,你的陣列內容是
2,34,4,4,5
,共 5 個元素。要刪除的內容為 4,也就是說刪除後只剩下 3 個元素,分別是
2,34,5
所以你的結果輸出只需要輸出數組的前 3 個,後面那兩個是作廢了的元素。