線性表 順序儲存習題P18 1 1 1 4

2021-09-26 05:45:21 字數 1231 閱讀 7544

1.1.從順序表中刪除具有最小值的元素(假設唯一)並由函式返回被刪除的元素的值,空出的位置由最後乙個元素填補,若順序表為空則顯示出錯資訊並退出執行 。

bool del_min(sqlist &l, elemtype &value) 

} l.data[pos] = l.data[l.length - 1]; //空出的位置由最後乙個元素填補

l.length--;

return true;

}

1.2.設計乙個高效的演算法,將順序表的所有元素逆置,要求演算法的空間複雜度為o(1)

演算法思想:掃瞄順序表l的前半部分元素,對於元素l.data[i],將其餘後半部分對應元素l.data[l.length-i-1]進行交換。

void reverse(sqlist &l) 

}

1.3長度為n的順序表l,編寫乙個時間複雜度為o(n),空間複雜度為o(1)的演算法,該演算法刪除線性表中所有值為x的資料元素

//解法一:用k標記不等於x的元素,將不等於x的元素向前放到k的位置上,修改l的長度

void del_x_1(sqlist &l, elemtype x)

} l.length = k; //順序表長度等於k

}

//解法二:用k記錄順序表中等於x的元素個數,邊掃瞄邊統計k,並將不等於k的元素向前移動k個位置。

void del_x_2(sqlist &l, elemtype x)

l.length = l.length - k; //順序表長度遞減

}

1.4. 從有序順序表中刪除其值在給定值s與t之間(要求s l.length || s >= t)

return false;

for (i = 0; i < l.length&&l.data[i] < s;i++); //尋找》=s的第乙個元素

if (i >= l.length) return false; //所有元素值都小於s則返回

for (j = i;j <= l.length&&l.data[j] <= t;j++); //尋找》t的第乙個元素

for (;j < l.length;i++,j++) //前移,填補被刪除元素位置

l.data[i] = l.data[j];

l.length = i + 1;

return true;

}

線性表 順序儲存習題P18 1 5 1 9

1.5.從順序表中刪除其值在給定值s與t之間,包含s和t,要求s l.length s t return false for i 0 i l.length i l.length k return true 1.6.從有序順序表中刪除所有其值重複的元素,使表中所有元素的值均不同 為有序順序表,所以重複...

線性表順序儲存

線性表順序儲存結構的建立 插入結點 刪除結點 就地逆置。include stdio.h include malloc.h typedef struct slist,list void init list 線性表初始化 void insert list s,int p 線性表插入 void delet...

線性表順序儲存

時間複雜度效率 o 1 o logn o n o nlogn o n 2 o n 3 o 2 n o n o n n 線性表順序儲存 線性表 順序儲存 include include define maxsize 1024 typedef int elementtype typedef struct...