我有一个使用列表的问题

洛伦佐·费雷蒂(Lorenzo Ferretti)

我对此代码有疑问。我尝试使用gdb和Valgrind进行调试,但是没有任何效果...

该代码的目标是创建一个列表,仅当列表的一部分中不存在具有相同字符串的现有节点时,才添加每个字符串。

这是代码:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

struct node {
    char *word; 
    struct node *next; 
}; 

void print_list(struct node *head) {
    while ((head) != NULL) {
        printf(" %s -> ", head->word); 
        head = (head->next);    
    }
}

// insert a new node in head
void add_n(struct node **head, char *str) {
    struct node *new; 
    new = malloc(sizeof(struct node)); 
    if (new == NULL) {
        printf("Not enough memory\n");
        exit(EXIT_FAILURE);
    }
    new->word = str; 
    new->next = NULL; 
    if ((*head) == NULL){
        (*head) = new;      
    }
    while ((*head)->next != NULL) {
        head = &(*head)->next;
    }
    (*head)->next = new;
}

// check if str is present in the list 
int find_string(struct node **head, char *str) {
    int found = 0; 
    while ((*head) != NULL) {
        int i = strcmp(str, (*head)->word);     //i=0 are the same 
        if (i == 0) {
            found = 1; 
            return found;       
        }
        head = &((*head)->next); 
    }
    return found; 
}

// insert a new string in the list only if is new
void insert(struct node **head, char *str) {
    if (find_string(head, str) == 0) {
        add_n(head, str);
    }
}

void rem_ent(struct node **head, struct node *ent) {
    while ((*head) != ent) {
        head = &((*head)->next);
    }
    (*head) = ent->next; 
    
    free(ent); 
}

void fini_list(struct node **head) {
    while ((*head) != NULL) {
        rem_ent(head, *head); 
        head = &((*head)->next);    
    }
}

int main() {
    struct node *head = NULL; 

    insert(&head, "electric");
    print_list(head); 

    insert(&head, "calcolatori");
    print_list(head);

    insert(&head, "prova pratica");
    print_list(head);

    insert(&head, "calcolatori");
    print_list(head);
    fini_list(&head);
    //printf("lunghezza media = %f\n", avg_word_lenght(head)); 
    return 0; 
}

也许错误可能是愚蠢的,但是我花了很多时间进行调试而没有成功。

来自莫斯科的弗拉德

该函数fini_list由于冗余语句而调用未定义的行为

head=&((*head)->next);  

因为函数rem_ent已经设置了指针的新值head

void rem_ent(struct node** head, struct node * ent){
    while((*head) != ent){
        head= &((*head)->next);
        }
    (*head)= ent->next; 
    
    free(ent); 
}

删除语句

void fini_list(struct node** head){
    while((*head) != NULL){
        rem_ent(head, *head); 
        }
}

也可以add_n通过以下方式更改功能

// insert a new node in head
void add_n(struct node ** head, char* str){
    struct node * new; 
    new = malloc(sizeof(struct node)); 
    if (new == NULL) {
        printf("Not enough memory\n");
        exit(EXIT_FAILURE);
        }
        new->word= str; 
        new->next = NULL; 
        if ((*head)==NULL){
            (*head)=new;    
        }
        else
        {
            while((*head)->next != NULL){
                head = &(*head)->next;}
            (*head)->next = new;
        }
}

下次将代码格式化为可读的方式。

通常,您应该为将存储在列表节点中的字符串动态分配内存。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我有画一个交叉使用JavaFX的问题

来自分类Dev

我有一个问题。

来自分类Dev

我有一个问题。如何遍历for并将数据添加到列表中?

来自分类Dev

我刚刚开始学习使用C ++的链接列表。我正在尝试使用矢量创建一个链表。为什么此代码有问题?

来自分类Dev

使用LINQ,我有一个列表列表,如何选择每个列表中存在的所有对象?

来自分类Dev

当我使用UDF操作一个列时,它有问题

来自分类Dev

在React-Native中,我有一个问题列表,我需要每页呈现2个问题。实现它的最佳方法是什么?

来自分类Dev

我有一个关于AttributeError的问题

来自分类Dev

我有一个非静态方法的问题

来自分类Dev

我的练习中有一个问题

来自分类Dev

尝试禁用鼠标加速,我有一个问题

来自分类Dev

我有一个关于 Teradata 查询实现的问题

来自分类Dev

您好,我有一个列表视图,其中包含要使用onitemclick方法打开另一个列表的元素列表

来自分类Dev

将多个ComboBox绑定到一个列表-问题:当我选择一个项目时,所有组合框都会更改

来自分类Dev

我有一个Scala列表,如何获得TraversableOnce?

来自分类Dev

当我用另一个列表替换一个列表时,出现问题

来自分类Dev

我有一个要点列表,想确定它们是否形成一个圆

来自分类Dev

需要一个可迭代的,我有一个字典列表

来自分类Dev

我有一个项目列表,我想使用react native导航将导航传递给它

来自分类Dev

我的json中有一个字典列表,我想在angularjs中使用它

来自分类Dev

我有一个嵌套的各种详细信息列表,并希望使用angularJs一个接一个地显示每个细节。我的代码将有助于理解我的查询

来自分类Dev

标签活动折旧后如何在Android中使用标签?使用片段,我有一个问题

来自分类Dev

在使用dd时有一个小问题

来自分类Dev

我有一个文件列表,如何使用bash打开每个文件的内容并将其复制到一个新文件中?

来自分类Dev

我在制作一个在列表中读取“ vector id”的函数时遇到问题

来自分类Dev

我有一个警报对话框,并使用setSingleChoiceItems设置所选项目,但想从顶部显示列表

来自分类Dev

使用Mojolicious :: Lite(perl)-我想将所有PARAMS的列表放入一个简单的@ARRAY中

来自分类Dev

这是一个关于python中列表的问题。我们可以连接两个列表吗

来自分类Dev

我有一个论点问题,我不知道为什么吗?

Related 相关文章

  1. 1

    我有画一个交叉使用JavaFX的问题

  2. 2

    我有一个问题。

  3. 3

    我有一个问题。如何遍历for并将数据添加到列表中?

  4. 4

    我刚刚开始学习使用C ++的链接列表。我正在尝试使用矢量创建一个链表。为什么此代码有问题?

  5. 5

    使用LINQ,我有一个列表列表,如何选择每个列表中存在的所有对象?

  6. 6

    当我使用UDF操作一个列时,它有问题

  7. 7

    在React-Native中,我有一个问题列表,我需要每页呈现2个问题。实现它的最佳方法是什么?

  8. 8

    我有一个关于AttributeError的问题

  9. 9

    我有一个非静态方法的问题

  10. 10

    我的练习中有一个问题

  11. 11

    尝试禁用鼠标加速,我有一个问题

  12. 12

    我有一个关于 Teradata 查询实现的问题

  13. 13

    您好,我有一个列表视图,其中包含要使用onitemclick方法打开另一个列表的元素列表

  14. 14

    将多个ComboBox绑定到一个列表-问题:当我选择一个项目时,所有组合框都会更改

  15. 15

    我有一个Scala列表,如何获得TraversableOnce?

  16. 16

    当我用另一个列表替换一个列表时,出现问题

  17. 17

    我有一个要点列表,想确定它们是否形成一个圆

  18. 18

    需要一个可迭代的,我有一个字典列表

  19. 19

    我有一个项目列表,我想使用react native导航将导航传递给它

  20. 20

    我的json中有一个字典列表,我想在angularjs中使用它

  21. 21

    我有一个嵌套的各种详细信息列表,并希望使用angularJs一个接一个地显示每个细节。我的代码将有助于理解我的查询

  22. 22

    标签活动折旧后如何在Android中使用标签?使用片段,我有一个问题

  23. 23

    在使用dd时有一个小问题

  24. 24

    我有一个文件列表,如何使用bash打开每个文件的内容并将其复制到一个新文件中?

  25. 25

    我在制作一个在列表中读取“ vector id”的函数时遇到问题

  26. 26

    我有一个警报对话框,并使用setSingleChoiceItems设置所选项目,但想从顶部显示列表

  27. 27

    使用Mojolicious :: Lite(perl)-我想将所有PARAMS的列表放入一个简单的@ARRAY中

  28. 28

    这是一个关于python中列表的问题。我们可以连接两个列表吗

  29. 29

    我有一个论点问题,我不知道为什么吗?

热门标签

归档