可变长数组
来源:互联网 发布:苹果5s怎么能用4g网络 编辑:程序博客网 时间:2024/05/16 18:09
最近项目中需要目录遍历,把遍历到的文件/文件夹保存到数据结构中,其他模块根据索引找对对应的文件名和路径。可变长数组相比链表的好处是省去了查找环节,提高效率。
#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;}
0 0
- 可变长的数组
- 可变长数组
- 可变长数组
- JavaScript可变长数组
- Lisp语言:可变长数组
- Lisp语言:可变长数组
- C++可变长数组测试
- Problem E: 可变长数组
- Problem E: 可变长数组
- C实现可变长数组
- 07:可变长数组、多维数组
- C99可变长数组VLA详解
- 结构体中的 可变长数组
- Linux c 的可变长数组
- vector 可变长数组 hdu 3823
- C99可变长数组VLA详解
- 运算重载实现可变长数组
- C++ 可变长数组类的实现
- 敬请期待……
- 采用JDK并发包提供的Lock, Condition等类的相关方法控制多线程.
- 2.6 ListView Item多布局的实现
- 敬请期待……
- centos 7 安装caffe(CPU版)
- 可变长数组
- 敬请期待……
- Failed to load JavaHL Library解决方法
- 敬请期待……
- HTTP请求和响应
- RedHat下配置静态Ip问题
- ITK 编译配置
- 欢迎使用CSDN-markdown编辑器
- 适用于 Web 开发者的 Atom 编辑器插件