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)