實現動態陣列

2021-10-10 05:59:07 字數 2202 閱讀 9125

學過c語言的都知道陣列的長度在定義陣列時時固定的,不能在程式執行時發生變化,那麼動態陣列是否和以上的定義相違背?

動態陣列的實現步驟:

1.先使用malloc函式申請乙個足夠大的位址空間,並返回乙個指標作為首位址

2.將原有陣列的元素按照順序複製到新的位址中

3.將帶加入的元素加入到新的位址中並且時放在原陣列的元素後面

4.使用free函式將原有的陣列的位址空間釋放

#ifndef __arratlist_h_

#define __arratlist_h_

typedef

struct array

array;

//定義乙個結構體來實現動態陣列,結構體的屬性有元素的個數,陣列的最大容量,和乙個指向int型別的指標

//全域性變數

array array;

//使用結構體時我們都需要建立乙個物件

//然後羅列出我們需要對動態陣列進行的操作

//初始化

intinit

(int capatity)

;//新增元素

intadd

(int num)

;//遍歷

void

foreach()

;//對應位置的索引

intindexofnum

(int num)

;//陣列的長度

intgetsize()

;//array[10000] = 1

#endif

//__arratlist_h_

//接下來用函式具體實現我們所需要的功能

```c

#include

"arraylist.h"

#include

#include

#include

//函式前置宣告

static

intincrease()

;static

intdecrease()

;array array;

intinit

(int capatity)

array.size =0;

return0;

}//初始化函式,使用函式時的引數即為動態陣列初始時的最大容量,

array.nums這個指標用來接malloc函式返回的指標,注意malloc函式的使用格式,malloc函式的返回值是乙個指標(int

*)表示它是乙個指向什麼型別資料的指標,右面括號是表示malloc函式申請的空間的大小,可以用sizeof(int)或者使用結構體物件都可以也可以是表示式比如這裡是int型別資料的大小乘以最大容量的個數;

在使用malloc函式時可以養成乙個檢測的好習慣,在malloc申請記憶體隻後立即判斷返回的指標是否為空指標,如果返回為空指標代表申請位址空間失敗

//新增元素

intadd

(int num)

}int index = array.size;

array.nums[index]

= num;

array.size++

;return0;

}//新增元素的函式首先要判斷元素的個數是否已經等於最大容量,如果個數等於了最大容量,列印出元素的個數和最大空間的個數和擴容的字樣

//然後呼叫擴容的increase函式進行擴容

//遍歷

void

foreach()

}//遍歷函式,列印出動態陣列的元素

static

intincrease()

//3.把原來的資料給複製到新的位址裡面

for(

int i =

0; i < array.size; i++

)//4.釋放原空間大小

free

(array.nums)

; array.nums =

null

;//5.改變新位址的指向

array.nums = temp;

return0;

}static

intdecrease()

//對應位置的索引

intindexofnum

(int num)

}return-1

;}//陣列的長度

intgetsize()

```最後下乙個main函式來呼叫我們的函式就可以檢測是否實現的動態陣列

動態陣列的實現

靜態陣列 編譯階段確定陣列的大小,執行階段不能改變陣列大小。缺點是事先無法準確確定陣列的大小,太小不滿足處理需要,太大浪費記憶體空間。動態陣列 執行階段,根據實際需要動態確定陣列的大小。在 c 語言中,可利用記憶體的申請和釋放庫函式,c語言培訓班 以及指向陣列的指標變數可當陣列名使用的特點,來實現動...

VC動態陣列實現

vc 動態陣列實現 陣列型別的變數有三個重要的限制 陣列長度固定不變,在編譯時必須知道其長度,陣列只在定義它的塊語句內存在.實際的程式往往不能忍受這樣的限制 它們需要在執行時 動態地分配陣列.雖然陣列長度是固定的,但動態分配的陣列不必在編譯時知道其長度,可以 通常也是 在執行時才確定陣列長度.與陣列...

java實現動態陣列

package array 建立動態陣列 public class array public array public int getsize public int getcapacity public boolean isempty 向所有元素的最後乙個元素新增 public void addla...