可变长数组

最近项目中需要目录遍历,把遍历到的文件/文件夹保存到数据结构中,其他模块根据索引找对对应的文件名和路径。可变长数组相比链表的好处是省去了查找环节,提高效率。


#define PATH_LEN 256
#define NAME_LEN 128
#define STEP_LEN 1024//每次增加1024个指针数组
 
typedef struct 
{
    char file_path[PATH_LEN];
    char file_name[NAME_LEN];
}FileInfo;
 
typedef struct 
{
    FileInfo **file_info;
    unsigned int file_num;
    unsigned int file_max_num;
}FileNode;
 
 
 
static int file_node_new(FileNode *node)
{
    node->file_info = (FileInfo **)malloc(sizeof(FileInfo *)*STEP_LEN);
    node->file_num = 0;
    node->file_max_num = STEP_LEN;
 
    return 0;
}
 
static int file_node_add(FileNode *node, char *name, char *path)
{
    FileInfo **tmp = NULL;
    FileInfo *tmp2 = NULL;
    unsigned int num = 0;
 
    if(node->file_num >= node->file_max_num)
    {
        tmp = (FileInfo **)malloc(sizeof(FileInfo *)*(STEP_LEN + node->file_max_num));
        memcpy(tmp, (node->file_info),sizeof(FileInfo *)*(node->file_num));
        free(node->file_info);node->file_info=NULL;
        node->file_info = tmp;
        node->file_max_num = node->file_max_num + STEP_LEN;
    }
    tmp2 = (FileInfo *)malloc(sizeof(FileInfo));
    if(NULL == tmp2){return -1;}
 
    strcpy(tmp2->file_name,name);
    strcpy(tmp2->file_path,path);
     
    num = node->file_num;
    (node->file_info)[num] = tmp2;
    node->file_num++;
     
    return 0;
}
 
static int file_node_delete(FileNode *node)
{
    int i = 0;
    for(i=0; i<node->file_num; i++)
    {
        if(NULL != (node->file_info)[i])
        {
            free((node->file_info)[i]);
            (node->file_info)[i] = NULL;
        }
    }
 
    free(node->file_info);node->file_info = NULL;
 
    return 0;
}




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值