c - 在链接列表中输入数据

标签 c linked-list

我需要将消息的每个字符插入到链接列表中,但我不明白哪里出错了

我分配正确,但在打印消息时出现错误

有人可以帮助我吗?

作为结构

struct mensagem{
    char msg;
    char chave;
};


struct elemento{
    struct mensagem dados;
    struct elemento *prox;
};
typedef struct elemento* Lista;
typedef struct elemento Elem;

功能 - 构建列表、插入元素和打印列表

Lista* cria_lista(){
    Lista* li = (Lista*) malloc(sizeof(Lista));
    if(li != NULL)
        *li = NULL;
    return li;
}
int insere_lista_final(Lista* li, struct mensagem al){
    if(li == NULL)
        return 0;
    Elem *no;
    no = (Elem*) malloc(sizeof(Elem));
    if(no == NULL)
        return 0;
    no->dados = al;
    no->prox = NULL;
    if((*li) == NULL){//lista vazia: insere início
        *li = no;
    }else{
        Elem *aux;
        aux = *li;
        while(aux->prox != NULL){
            aux = aux->prox;
        }
        aux->prox = no;
    }
    return 1;
}
void imprime_lista(Lista* li){
    if(li == NULL)
        return 0;
    Elem* no = *li;
    while(no != NULL){
        printf("%c1",no->dados.msg);

        no = no->prox;
    }
}

内部主函数

int main()
{
    int mod_exec=1,i=0;
    char c;
    struct mensagem al;
    Lista* li = cria_lista();
        while((c = getchar()) != '\n')
            {
                insere_lista_final(li,al);
                imprime_lista(li);
            }
    return 0 ;

}
typedef struct elemento* Lista;
typedef struct elemento Elem;

Lista* cria_lista(){
    Lista* li = (Lista*) malloc(sizeof(Lista));
    if(li != NULL)
        *li = NULL;
    return li;
}
int insere_lista_final(Lista* li, struct mensagem al){
    if(li == NULL)
        return 0;
    Elem *no;
    no = (Elem*) malloc(sizeof(Elem));
    if(no == NULL)
        return 0;
    no->dados = al;
    no->prox = NULL;
    if((*li) == NULL){//lista vazia: insere início
        *li = no;
    }else{
        Elem *aux;
        aux = *li;
        while(aux->prox != NULL){
            aux = aux->prox;
        }
        aux->prox = no;
    }
    return 1;
}
void imprime_lista(Lista* li){
    if(li == NULL)
        return 0;
    Elem* no = *li;
    while(no != NULL){
        printf("%c1",no->dados.msg);

        no = no->prox;
    }
}

内部主函数

int main()
{
    int mod_exec=1,i=0;
    char c;
    struct mensagem al;
    Lista* li = cria_lista();
        while((c = getchar()) != '\n')
            {
                insere_lista_final(li,al);
                imprime_lista(li);
            }
    return 0 ;

}

最佳答案

添加具有正确初始化变量的 main 函数并没有导致我出错:

int main(void)
{
    Lista *l = cria_lista();
    struct mensagem m1 = { .msg = 'a', .chave = 'b'};
    struct mensagem m2 = { .msg = 'c', .chave = 'd'};

    insere_lista_final(l,m1);
    insere_lista_final(l,m2);
    imprime_lista(l);

    return 0;
}

确保编译时触发警告标记。

关于c - 在链接列表中输入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57712137/

相关文章:

c - 是什么导致小型模块化 C 程序中出现此编译器错误?

c - 我有一个链表,我想删除重复的值

java - 迭代方法: Delete Linked List node using only one reference variable

c - 保留指向局部作用域变量的指针

c - 为什么输出总是-1?

c - 节点、类型定义、Null 的工作原理(C 编程语言)C 链表

c - C 字节读取器中的段错误(核心转储)

c - 反转链表

c - 变量的范围和生命周期

c - 使用C打印服务器IP地址