動態陣列C語言實現

2022-05-22 10:54:11 字數 3407 閱讀 8080

/*

* dynamicarray.h

* * created on: 2023年7月22日

* author: jarvis

*/#ifndef src_dynamicarray_h_

#define src_dynamicarray_h_

//動態增長記憶體 策略 將資料放到堆上

//動態陣列 如果5個元素 申請記憶體 拷貝資料 釋放記憶體

// 容量 capacity 表示我的這塊記憶體空間一共可以存放多少個元素

// size 記錄當前陣列中具體的元素個數

//定義動態陣列的結構體

typedef struct dynamicarray dynamic_array;

//操作函式

//初始化

dynamic_array *init_array();

//插入

void pushback_array(dynamic_array *arr, int value);

//根據位置刪除

void removebypos_array(dynamic_array *arr, int pos);

//根據值刪除

void removebyvalue_array(dynamic_array *arr, int value);

//查詢

int find_array(dynamic_array *arr, int value);

//列印

void print_array(dynamic_array *arr);

//釋放動態陣列的記憶體

void freespace_array(dynamic_array *arr);

//清空陣列

void clear_array(dynamic_array *arr);

//獲得動態陣列的容量

int capacity_array(dynamic_array *arr);

//獲得動態陣列當前元素的個數

int size_array(dynamic_array *arr);

//根據位置獲得某個位置的元素

int at_array(dynamic_array *arr, int pos);

#endif /* src_dynamicarray_h_ */

/*

* dynamicarray.c

* * created on: 2023年7月22日

* author: administrator

*/#include #include "dynamicarray.h"

dynamic_array *init_array()

//插入

void pushback_array(dynamic_array *arr, int value)

//判斷控制項是否足夠

if(arr->size == arr->capacity)

//插入新元素

arr->paddr[arr->size] = value;

arr->size++;

}//根據位置刪除

void removebypos_array(dynamic_array *arr, int pos)

if(pos < 0 || pos >= arr->size)

//刪除元素

for(int i = pos; i < arr->size - 1; i++)

arr->size--;

}//根據值刪除

void removebyvalue_array(dynamic_array *arr, int value)

//找到值的位置

int pos = -1;

for(int i = 0; i< arr->size; i++)

} //根據位置 刪除值

removebypos_array(arr, pos);

}//查詢

int find_array(dynamic_array *arr, int value)

//找到值的位置

int pos = -1;

for(int i = 0; i< arr->size; i++)

} return pos;

}//列印

void print_array(dynamic_array *arr)

printf("\n");

}//釋放動態陣列的記憶體

void freespace_array(dynamic_array *arr)

if(arr->paddr != null)

free(arr);

}//清空陣列

void clear_array(dynamic_array *arr)

arr->size = 0;

}//獲得動態陣列的容量

int capacity_array(dynamic_array *arr)

return arr->capacity;

}//獲得動態陣列當前元素的個數

int size_array(dynamic_array *arr)

return arr->size;

}//根據位置獲得某個位置的元素

int at_array(dynamic_array *arr, int pos)

/*

* mian.c

* * created on: 2023年7月22日

* author: administrator

*/#include "dynamicarray.h"

#include #include #include void test01()

//列印

printf("插入10個元素後 \n");

print_array(arr);

//插入元素

for(int i = 0; i < 30; i++)

//列印

printf("重新插入30個元素後 \n");

print_array(arr);

//刪除

removebypos_array(arr, 0);

removebyvalue_array(arr, 5);

// printf("刪除兩個元素後 \n");

print_array(arr);

//查詢

int pos = find_array(arr, 30);

printf("位置 5查詢到 pos: %d value: %d \n",pos, at_array(arr, pos));

//銷毀

freespace_array(arr);

}int main()

C語言實現動態陣列

include include 要使用malloc是要包含此標頭檔案 include 要使用memset是要包含此標頭檔案 intmain for i 0 i 列印陣列 free p 釋放記憶體,malloc和free一定要記得成組使用,不然會導致程式吃記憶體 getchar 讓程式停頓,觀察輸出 ...

C語言實現 vector 動態陣列

ifndef cvector h define cvector h include include include define min len 256 define cvefailed 1 define cvesuccess 0 define cvepushback 1 define cvepop...

C C 語言實現動態陣列

這裡說的動態陣列是可以根據需要動態增長占用記憶體的陣列,比如程式初始分配了100個元素,可是執行了一段時間後區區100個空間不能滿足了,現在需要400個,怎麼辦呢 那肯定需要再額外分配300個。c語言有realloc 函式來解決空間擴充的問題,但是不要忘了realloc可能會遷移記憶體,很多時候陣列...