【发布时间】:2021-08-18 18:49:23
【问题描述】:
================================================ ===============
编辑:对不起,我好像没有解释清楚
我的程序所做的是open file for reading => load list from the file => operations chosen by user will be applies to list (not file)(add-search-display-reset)\ => import change to file(如果有的话)
如果用户选择仅添加员工并退出 will it be better 以将添加的节点附加到文件末尾,则关闭并释放列表 or 可以打开文件以读取并覆盖开始时的所有节点
这最后一个选项将为我节省大量代码行,但它会在执行时为用户节省时间和精力吗?
================================================ ===============
我正在处理一个(c 语言)学校项目,我们必须同时使用 lists 和 files 来:
- 显示员工列表
- 添加员工
- 搜索员工
- 重置列表
- 保存并退出
所以我正在寻找最好的方法,据我所知,好的代码是确保程序尽可能使用 less memory 并尽可能使用 fast 的代码。
我要问的是
打开包含员工信息的文件并将其加载到列表中,并通过add或reset修改列表后,会不会更好:
- 为“w”打开文件并用列表填充它。
- 或打开它以“a+”从最后一名员工添加。
请注意,最后一种方式我必须记住 initial_number_of_lines(又名节点)并查找“初始最后一个节点”以开始加载。
注意:employee变量是first_namelast_name和salary; VERIFY(file) 返回 1 我打开的文件如果没有返回 0;
void load_file(list *list, char *filename)
{
if (current_number_of_lines != initial_number_of_lines || list_reset == 1)
{
if (current_number_of_lines > initial_number_of_lines && list_reset == 0)
{
FILE *file = fopen(filename, "a+");
if (VERIFY(file) == 1)
{
for (int i = 0; i < initial_number_of_lines; i++)
{
list = list->next;
}
while (list != NULL)
{
fprintf(file, "%s\t%s\t%lf\n", list->emp.Fname, list->emp.Lname, list->emp.salary);
list = list->next;
}
}
fclose(file);
}
else if (list_reset == 1)
{
FILE *file = fopen(filename, "w");
while (list != NULL)
{
fprintf(file, "%s\t%s\t%lf\n", list->emp.Fname, list->emp.Lname, list->emp.salary);
list = list->next;
}
fclose(file);
}
else
printf("Error\n");
}
freeList(list);
}
【问题讨论】:
-
如果删除元素,则必须重写文件。
-
对我来说奇怪的是,当代码写入文件时,函数名称是load_file。
-
编辑了我的答案以根据您对问题的更改给出提示。请再次阅读我的回答。
标签: c list file memory complexity-theory