/*
* 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可能會遷移記憶體,很多時候陣列...