struct list

{int data[10];

int length;

}中的length 為什麼能決定表的長度,比如初始化的時候令length等於0,而不是對data數組進行操作。表述的十分爛真的不好意思,但是百度了很久都沒有找到關於這點的解釋,我認為的length應該是一個計數器而不決定表長


謝邀,可以理解為計數器,初始化時,將長度length置為0,而在插入操作中,每插入一個結點,都要先檢查是否超過了如題中所限制的10個最大存儲限制,如果沒有超過,則將元素存入順序表,計數器length++;如果超過了,則返回一個錯誤標記。相反地,刪除結點時,先檢查表長——即length值,如果大於0,則刪除相應結點,並且length--;如果length==0,則返回錯誤標記,表示空表無法刪除。

我在github上有一份順序表的動態分配數組實例,可以直接拿來運行,有注釋,希望可以幫助你理解。順序表的動態分配數組版本


length是用來告訴程序和程序員,這個表有多長的。如果length長度大於數組的長度,則容易發生越界;如果length長度小於數組的長度,則會浪費內存空間。在定義表時,就要注意數組的長度應該與length是相等的。它只是一個標誌而已。打個比方,遊戲攻略可以指導玩家玩遊戲,但更改遊戲攻略是不會改變遊戲內容的。

這只是數據結構入門時需要使用的結構。在實際運用中,std::array和std::vector更好用。

謝邀。

那就是一個存儲單元。它決定不了什麼,是你決定的。你向其中存什麼,那就有什麼。


瀉藥,來的有點久了從演算法的角度來看,O(1)實現不比O(N)好嗎
length是一個邏輯上概念,代表表中應該有多少個元素,程序員在進行順序表的時候自己操作length。10是物理上的概念,代表最多能裝10個。

我猜你理解的表長度是10,這個10的長度表述的是其容量(capacity),也就是當前分配的內存最多只能存儲10個int,可以搜一下「動態數組」了解更多你想知道的知識點。通常用length或者size表徵當前的表中存儲的數據的有效個數,也就是你說的計數器,實際是一個意思。另外,因為c語言struct沒有封裝,實際上這個length應該作為一個私有數據,不應該暴露出來,否則被外部改動了就滿足不了length表徵計數這一不變式了。


推薦閱讀:
相关文章