栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言实现vector动态数组

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言实现vector动态数组

C语言实现vector动态数组
  • 用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);
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/353106.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号