C 使用链表删除节点,或者使用数组对字符串进行小计算,看看是否可以跳过元素,这样更有效吗?

C 使用链表删除节点,或者使用数组对字符串进行小计算,看看是否可以跳过元素,这样更有效吗?,c,algorithm,data-structures,language-agnostic,C,Algorithm,Data Structures,Language Agnostic,我正在用C写一个程序来读取文件。文件的每一行都是一个字符串,将对其进行计算。对特定字符串的计算结果可能意味着文件中后面的字符串不需要对其进行任何计算。此外,如果字符串的倒序按字母顺序排在(当前的、未倒序的)字符串之前,则不需要检查它 我的问题是,在找到不需要检查的特定字符串或使用数组并检查字符串的最后几个字符后,是否最好将每个字符串放在链表中并删除每个节点,如果它按字母顺序排在前一个元素中的字符串之后,则跳过它?无论采用哪种方法,列表或数组只需迭代一次。经验法则是,如果您处理的是小对象(

我正在用C写一个程序来读取文件。文件的每一行都是一个字符串,将对其进行计算。对特定字符串的计算结果可能意味着文件中后面的字符串不需要对其进行任何计算。此外,如果字符串的倒序按字母顺序排在(当前的、未倒序的)字符串之前,则不需要检查它


我的问题是,在找到不需要检查的特定字符串或使用数组并检查字符串的最后几个字符后,是否最好将每个字符串放在链表中并删除每个节点,如果它按字母顺序排在前一个元素中的字符串之后,则跳过它?无论采用哪种方法,列表或数组只需迭代一次。

经验法则是,如果您处理的是小对象(<32字节),std::vector在大多数常规操作中都优于链表

<>但是对于较大的对象,(比如,1K字节),通常需要考虑列表。

有一篇文章详细介绍了你可以查看的比较,链接在这里


如果没有关于您的需求的详细信息,就很难告诉您哪一个更适合您的需求

数组很容易访问,特别是当您要以非顺序方式进行访问时,但是如果您需要对其执行删除操作,或者如果您没有很好的元素最终数量近似值,则很难维护数组

如果您计划按顺序访问列表,则列表是好的,但如果您需要在其元素之间跳转,则列表是糟糕的。此外,如果您已经在要删除的节点中,则可以在固定时间内对其进行删除


我不太明白您打算如何访问它们,因为您说其中任何一个都只需迭代一次,但如果是这样的话,那么任何一个结构都会给您带来类似的性能,因为您没有真正利用它们的关键优势。

很难理解您要做什么,但是听起来您应该创建一个记录数组,每个记录都包含一个字符串和一个布尔标志来指示是否应该处理它

从文件加载数组时,将每个记录的标志设置为true

使用一个指针扫描数组一次,只处理标记仍然为true的记录中的字符串

对于处理的每个记录,使用第二个指针从第一个指针+1扫描到数组末尾,标识不需要处理的字符串(根据当前字符串),并将其标志设置为false


-Al.

你能举个具体的例子说明你在说什么吗?也许是用一些(伪)代码?你在字符串上做什么“计算”?我很难从这个抽象的描述中理解你在做什么。