數據結構中有關順序表的問題:為何判斷插入位置是否合法時if語句中用length+1,而移動元素的for語句中只用length?


bool ListInsert(SqList &L,int i, ElemType e){
    if(i<1||i>L.length+1)    //判斷i的范圍是否有效
        return false;
    if(L.length>=MaxSize)    //當前存儲空間已滿,不能插入
        return false;
    for(int j=L.length;j>=i;j--)    //將第i個元素及之后的元素后移
        L.data[j] = L.data[j-1];
    L.data[i-1] = e;
    L.length++;
    return true;
}

 

 

(有關順序表)

第一個問題回答:

  1.首先明確length的含義?

  ——length表示當前表中擁有元素的個數,也就是順序表的表長

  2.為什么if語句中用length+1

  ——要判斷當前插入的 i 的位置是否合法,也就是必須存在可以包含 i  這個位置的表長(在確定數組長度是可以包含的之后,是表長不是數組長度),在其中很容易理解(因為數數是從1開始,順序表中的也是從 1 開始數數)所以不能輸入 i 小於 1。如果我們不是限定為  i>L.length+1 而是限定為  i>L.length+2 ,此時我們就會發現(當給表中添加一個新的元素后的表的長度只增加 1 ,而我們規定判別i>L.length+2,就會導致表中在1到 i>L.length+2 中出現一個斷空,從而違背了順序表的定義(一組地址連續的存儲單元邏輯上相鄰的兩個元素的物理位置上也相鄰),而如果我們是規定i>L.length時我們就會將最后一個元素丟失。

 

 

第二個問題回答:

  在for循環中時,此時我們就要考慮數組下標和位序的關系了。雖然for循環中定義 j=L.length,但是它映射到數組時候對應為數量的L.length+1(注:數組的開始下標為0)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM