目錄
假設有兩個線性表LA和LB分別表示兩個集合A和B,現要求一個新集合A=AUB
假設有兩個線性表LA和LB分別表示兩個集合A和B,現要求一個新集合A=AUB
{
let A = [1,2,3,4,5,6,7,8];
let B = [2,3,4,2,5,7,9,54,9,10];
function union(A, B){
let LengthA = A.length;
let LengthB = B.length;
for (let i = 0; i < LengthB; i++) {
let j = 0;
while (A[j] != B[i]) {
if (j === LengthA - 1) {
A[LengthA] = B[i];
LengthA++;
}
j++;
}
}
return A
}
console.log(union(A,B));
}
tips:
1、聲明線性表的長度,便於控制、修改和理解代碼。
2、本算法採用簡單粗暴的雙重遍歷,每次for循環都從B線性表中取出一個元素B[i]並在while循環中與A線性表中的A[j]元素進行比較,若相同便將B[i]添加到A線性表的尾部,成爲A[LengthA],並且修改A線性表的長度值。循環結束後返回A線性表。
刪除線性表L中重複的元素
{
let L = [1,2,3,5432,5,6,3,23,4,12,6,43,234,1,23,5,5,64,2];
function purge(L) {
let Length = L.length;
let i = 0;
let j = 0;
while (i < Length) {
j = 0;
while (j < Length) {
if (L[i] == L[j]) {
for(j = j; j < Length; j++) {
L[j] = L[j + 1];
}
L.length--;
Length--;
}
j++;
}
i++;
}
return L;
}
console.log(purge(L))
}
tips:
1、按照慣例聲明數組長度,並聲明取值下標 i 與遍歷下標 j 隨後進行遍歷
2、每次從數組中取出數值 L[i] 並將數組下標 j 歸零後進入 j 遍歷函數,如有重複的數便進行 for 循環,刪掉當前 j 位置的重複數據,將後面的數據往前搬一格,再將數組長度減一,數組長度變量減一。
3、循環結束後返回新數組L
順序表插入算法
{
let L = [1,2,3,4,5,6,7,8,9,0];
function InsertList(L, index, i) {
let j = 0;
let Length = L.length;
if (index < 0 || index > Length - 1) {
console.log('index error');
return;
}
for (j = Length; j > index - 1; j--) {
L[j] = L[j - 1];
}
L[index] = i;
return(L)
}
console.log(InsertList(L, 5, 21));
}
tips:
1、照慣例聲明長度和下標。
2、插入算法這類標有特定位置的需要注意,得先判斷數值位置是否會導致數組越界,也就是下面這個if
if (index < 0 || index > Length - 1) {
console.log('index error');
return;
}
3、確認不會數組越界後,從數組末端後面再開闢一個空間,開始執行for循環,把數組的末位元素移到新建的元素格子上,再依次將前一個元素往後移動一位,直到插入目標位置處停下。
4、執行插入操作,並返回新數組。
順序表刪除算法
{
let L = [1,2,3,4,5,6,7,8,9,0];
function DeleteList(L, index) {
let Length = L.length;
if ( index < 0 || index > Length - 1) {
console.log('index error');
return;
}
for (let j = index; j < Length; j++) {
L[j] = L[j + 1];
}
L.length--;
return(L);
}
console.log(DeleteList(L,5));
}
tips:
1、按照慣例聲明數組長度。
2、判斷是否會數組越界。
3、刪除元素,移動元素,減少數組長度
4、返回新數組。
逆置線性表
{
let L = [1,2,3,4,5,6,7,8,9,0];
function Converts(L) {
let k = (L.length - 1) / 2;
let Length = L.length;
let x = 0;
for (let i = 0; i < k; i++) {
x = L[i];
L[i] = L[Length - i - 1];
L[Length - i - 1] = x;
}
return L;
}
console.log(Converts(L));
}
tips:
1、聲明數組長度,與數組中間位置K值,中間值x。
2、執行遍歷算法,首先把L[i]的值賦予中間值x,此時L[i]的值已經沒有意義,可以被替代,再將末尾的L[Length - i - 1]的值賦予L[i],最後把x的值賦予L[Length - i - 1],打完收工。
3、返回新數組L。
以上就是線性表常見的需求了,後續有什麼有趣的需求解決了也會補充上來,這幾天着手看看把鏈表也給實現了。