【问题标题】:for loop in C: return each processed elementC中的for循环:返回每个已处理的元素
【发布时间】:2015-06-19 18:08:51
【问题描述】:

我有一个链表,我想编写一个函数来遍历每个节点,并返回适当的元素。像这样的:

struct list* returnElements(struct list *head){
     for (; head != NULL ; head=head->next){
         if (head->field1 == "something")
             return head;
     }

然后调用 returnElements 的函数会以某种方式捕获每个返回的节点,并对其进行处理。

这有可能吗?

【问题讨论】:

  • 此函数将在第一个有效元素上结束,您可能希望将每个有效元素存储在列表或堆栈等中,然后返回
  • returnElements 中你可以构造一个新列表,并返回这个列表。您不能通过单独的返回返回多个元素。
  • 您希望在每次运行returnElements 时返回多个(指向)节点?是的,这是可能的。
  • 您可以从函数返回节点指针的集合。你想要什么类型的集合取决于你,可以简单地是一个数组类型的结构,甚至是另一个列表。
  • 您在搜索Implementing linked list with iterator interface吗?它引用了C Iterators 的实现。

标签: c for-loop


【解决方案1】:

我认为没有这个函数会更容易,所以在调用returnElements的函数内部我会创建一个新变量并将其设置为类型struct list*,然后在函数中遍历该列表,如果你找到一个你需要使用的节点,然后用它做一些事情,所以做这样的事情:

struct list *temp = head;
for(; temp != NULL; temp = temp->next) {
    if(strcmp(temp->field1, "something") == 0) {
        //DO WHATEVER YOU WANT WITH THIS NODE
    }
}

【讨论】:

  • 如果他(或她)想立即进行更改,这很好,但如果他们正在缓存节点以供以后访问,这可能不是最好的方法。
  • @hellyale 确实如此,在这种情况下它可能不是最好的方法。他可以创建一个新的链表,其中包含他想要使用的所有节点,因此在 if 语句中添加将附加他想要的每个节点到新列表的语句。但我读到这个问题的方式是他想马上做点什么
  • @JackV 我正在立即处理节点。我只是想在我的链接列表模块中保留与链接列表相关的所有功能,然后有几个与模块链接的测试文件。
【解决方案2】:
/*you can change the argument type*/
void getElementInNode(void *list){
    /*here you can store the content of the node to a global collection
    or whatever you want here*/
}
struct list* returnElements(struct list* head){
    extern void getElementInNode(void *p);
    struct list* list;

    list = head;
    if (list == NULL){ printf("Empty\n"); }
    while (list != NULL) {
        if (list->field1 == "something"){
            getElementInNode(list);
        }
        list = list->next;
    }
}

【讨论】:

    猜你喜欢
    • 2021-04-01
    • 1970-01-01
    • 2014-02-05
    • 2021-08-24
    • 1970-01-01
    • 2017-03-31
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多