第4周:鏈表——4.1 可變數(shù)組

1.可變數(shù)組

C 語言數(shù)組大小固定,無法改變。

考慮用 C 語言實(shí)現(xiàn)一個可以變大小的 int 數(shù)組:可成長,能得到大小,能訪問元素。

可以實(shí)現(xiàn)一個函數(shù)庫,定義數(shù)組所需的函數(shù):創(chuàng)建,回收,大小,訪問元素,成長。

函數(shù)庫


2.定義可變數(shù)組

可變數(shù)組定義

習(xí)慣定義為 *Array ,Array 為指針。這時無法定義本地變量,不要定義指針類型??!


3.創(chuàng)建 Array (array_create(int size))

創(chuàng)建可變數(shù)組函數(shù),返回Array

為什么不返回指針?因?yàn)?a 是本地變量,返回指針的話在函數(shù)結(jié)束后本地變量消失,指針無效。

為什么不直接 malloc 結(jié)構(gòu)的 size ? 會使得使用困難。傳入指針返回指針有風(fēng)險。


4.回收 Array(array_free(Array *a))

回收可變數(shù)組,無返回值。


5.得到 Array 大小(array_size(const Array *a))

得到數(shù)組大小,返回 int

封裝得到數(shù)組大小的方法,保護(hù)內(nèi)部實(shí)現(xiàn)細(xì)節(jié),之后升級可以集中改動。


6.訪問元素(array_at(Array* a,int index))

訪問數(shù)組元素,返回指向數(shù)組元素的指針

可以通過 *array_at(&a,0)=10 做賦值,做左值把值寫到數(shù)組里,也可以做右值賦值給左值。

可用 array_get() 和 array_set() 兩個存取函數(shù)代替 array_at()

可用array_get得到數(shù)組中元素的值,array_set設(shè)置數(shù)組中元素的值


7.內(nèi)存塊?memory in block

const int BLOCK_SIZE = 20;

考慮index越界的情況

可自動增長,每次漲 BLOCK_SIZE 個單元。


8. Array 的成長(array_inflate(Array *a,int more_size))

成長more_size個單元,找一片新的空間復(fù)制原來的數(shù)組,刪除原數(shù)組。無返回值

分配新空間,復(fù)制原數(shù)組到新空間,可用memcpy替換。


9. main

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容