使用JavaScript實現線性表的常見功能

目錄

 

假設有兩個線性表LA和LB分別表示兩個集合A和B,現要求一個新集合A=AUB

刪除線性表L中重複的元素

順序表插入算法

順序表刪除算法

逆置線性表


假設有兩個線性表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。

 

以上就是線性表常見的需求了,後續有什麼有趣的需求解決了也會補充上來,這幾天着手看看把鏈表也給實現了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章