- 用C++ vector有感,想去用C语言实现下,正好巩固下C语言
贴代码,后续可能会补上插图讲解,这里先贴上代码。
TXWH_Vector.c
//
// Created by Txwh on 2021/10/26.
//
//使用函数传递指针时注意事项:
//https://blog.csdn.net/qq_36373500/article/details/55194451
#include "TXWH_Vector.h"
//供外部使用的部分数据
struct array_int_data{
int * ptr;
int array_length;
}vector_list;
int * temp_ptr;
//创建数组
int * create_int_array(int size, int init_num){
//malloc分配内存
int * ptr = (int *)malloc(size* sizeof(int));
if (ptr != NULL){
vector_list.ptr = ptr;
vector_list.array_length = size;
ptr = vector_list.ptr;
for (int i = 0; i < size; ++i) {
*(vector_list.ptr + i) = init_num;
}
return ptr;
}else{
return NULL;
}
}
//通过下标更改数组的值
int change_int_value(int * ptr, int index, int value){
//指针加法
*(ptr + index) = value;
return value;
}
//在数组中插入元素
int * insert_int_array(int * ptr, int insert_index, int insert_value){
//分配内存
temp_ptr = (int *) malloc((vector_list.array_length + 1) * sizeof(int));
vector_list.ptr = ptr;
//进行数组复制并且插入
for (int i = 0; i < vector_list.array_length + 1 ; ++i) {
if (i == insert_index){
*(temp_ptr + i) = insert_value;
}else if(i > insert_index){
*(temp_ptr + i) = *(vector_list.ptr + i - 1);
}else{
*(temp_ptr + i) = *(vector_list.ptr + i);
}
}
if (temp_ptr != NULL){
free(vector_list.ptr);
vector_list.ptr = temp_ptr;
vector_list.array_length = vector_list.array_length + 1;
return vector_list.ptr;
}else{
return NULL;
}
}
//删除某确定下标的元素
int * delete_index_int_array(int * ptr, int delete_index){
//超出下限返回NULL
if (delete_index > vector_list.array_length - 1){
return NULL;
}
vector_list.ptr = ptr;
//新分配内存
temp_ptr = (int *) malloc((vector_list.array_length-1)* sizeof(int));
//对数组进行复制并且删除部分元素
for (int i = 0; i < vector_list.array_length - 1; ++i) {
if (i >= delete_index){
*(temp_ptr + i) = *(vector_list.ptr + i + 1);
}else{
*(temp_ptr + i) = *(vector_list.ptr + i);
}
}
if (temp_ptr != NULL){
free(vector_list.ptr);
vector_list.ptr = temp_ptr;
vector_list.array_length = vector_list.array_length - 1;
return vector_list.ptr;
} else{
return NULL;
}
}
//删除数组
void delete_int_array(int * ptr){
free(vector_list.ptr);
}
main.c(测试样例)
#include#include "TXWH_Vector.c" #define NUM 10 int main(){ int * test_array = create_int_array(NUM,1); printf("create_ptr: 0x%pn", test_array); //改变下标的值 change_int_value(test_array, 3, 5); for (int i = 0; i < vector_list.array_length; ++i) { printf("%d ", *(test_array + i)); } printf("n"); printf("change_ptr: 0x%pn", test_array); //插入元素 test_array = insert_int_array(test_array, 5, 8); for (int i = 0; i < vector_list.array_length; ++i) { printf("%d ", *(test_array + i)); } printf("n"); printf("insert_prt: 0x%pn", test_array); //删除元素 test_array = delete_index_int_array(test_array, 7); for (int i = 0; i < vector_list.array_length; ++i) { printf("%d ", *(test_array + i)); } printf("n"); printf("delete_index_ptr: 0x%pn", test_array); //删除数组 delete_int_array(test_array); }



