學過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...