最近去頭條面試遇到的的一個(gè)問(wèn)題:如何實(shí)現(xiàn)一個(gè)NSMutableArray
當(dāng)初回答用棧實(shí)現(xiàn)拴疤,但是不知道如何動(dòng)態(tài)擴(kuò)展椨啦浚空間的大小。
參考了C語(yǔ)言動(dòng)態(tài)數(shù)組的實(shí)現(xiàn)方式呐矾,總算有了答案苔埋。
那么我們先來(lái)看一下C語(yǔ)言是怎么實(shí)現(xiàn)動(dòng)態(tài)數(shù)組的
#include <stdio.h>
#include <stdlib.h>
int main(){
int arrLength; // 數(shù)組長(zhǎng)度
int *array; // 數(shù)組指針
int i; // 數(shù)組下標(biāo)
printf("輸入數(shù)組長(zhǎng)度:");
scanf("%d", & arrLength);
// 根據(jù)輸入長(zhǎng)度,在堆中分配長(zhǎng)度為arrLength的內(nèi)存空間
array = (int*)malloc( arrLength*sizeof(int) );
if(!array){
printf("創(chuàng)建數(shù)組失斞逊浮组橄!\n");
exit(1);
}
// 向內(nèi)存中寫(xiě)入數(shù)據(jù)
for(i=0; i< arrLength; i++){
array[i] = i+1;
}
// 循環(huán)輸出數(shù)組元素
for(i=0; i< arrLength; i++){
printf("%d ", array[i]);
}
// 需要我們手動(dòng)釋放申請(qǐng)的堆空間
free(array);
return 0;
}
插入元素偽代碼:
先判斷數(shù)組長(zhǎng)度是否足夠
若足夠,則根據(jù)下標(biāo)新增(如array[3] = "A")
若不足罚随,則通過(guò)malloc重新申請(qǐng)堆空間B玉工,把舊的數(shù)組A元素copy到B中,再插入新元素到B中淘菩,并且free(A)
刪除元素偽代碼:
array[3] = NULL
二維數(shù)組實(shí)現(xiàn):
// 分配一個(gè)arrLength行遵班,3列的二維數(shù)組
array = (int*)malloc( arrLength*sizeof(int) );
for (i=0; i< arrLength; i++)
a[i] = (int *)malloc(sizeof(int)*3);