慕衍> 2022-03-14 22:02 采纳率: 87.5%
浏览 32
已结题

学习了链表,但是输出数据总是奇怪,是输出错了还是哪错了呀


//main.c
#include<stdio.h>
#include"linklist.h"
int main()
{
    LinkList *a=create(5);
    puts_(a);
    return 0;
}

//linklist.h
typedef struct student{
    int score;
    struct student* next;
}LinkList;
LinkList *create(int n);
void change(LinkList *list,int n);
void delete(LinkList *list,int n);
void insert(LinkList *list,int n);
void puts_(const LinkList *list);

//linklist.c
#include"linklist.h"
#ifndef _LINKLIST_H_
#define _LINKLIST_H_
/*typedef struct student{
    int score;
    struct student* next;
}LinkList;*/
LinkList *create(int n){
    LinkList *head,*node,*end;
    head=(LinkList*)malloc(sizeof(LinkList));
    end=head;
    int i;
    for(i=0;i<n;i++){
    node=(LinkList*)malloc(sizeof(LinkList));
    printf("请输入数据:\n");
    scanf("%d",node->score);
    end->next=node;
    end=node;
    }
    end->next=0;
    return head;
}

void change(LinkList *list,int n){
    LinkList *t=list;
    int i=0;
    while(i<n&&t!=0){
        t=t->next;
        i++;
    }
    if(t!=0){
        printf("请输入修改后的值:\n");
        scanf("%d",&t->score); 
    }else
        puts("节点不存在");
}

void delete(LinkList *list,int n){
    LinkList *t,*in;
    int i=0;
    t=list;
    while(t!=0&&i<n){
        in=t;
        t=t->next;
        i++;
    }
    if(t!=0){
        in->next=t->next;
        free(t);
    }else{
        puts("节点不存在");
    }
}

void insert(LinkList *list,int n){
    LinkList *t,*in;
    int i=0;
    t=list;
    while(t!=0&&i<n){
        t=t->next;
        i++;
    }
    if(t!=0){
        in=(LinkList*)malloc(sizeof(LinkList));
        puts("要插入的值");
        scanf("%d",&in->score);
        in->next=t->next;
        t->next=in;
    }else{
        puts("节点不存在");
    }
}

void puts_(const LinkList *list){
    LinkList *t=list;
    while(t!=0){
        t=t->next;
        printf("%-3d",t->score);
    }
}
#endif

img

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-03-14 23:03
    关注

    修改处见注释,供参考:

    //main.c
    #include<stdio.h>
    #include"linklist.h"
    int main()
    {
        LinkList *a=create(5);
        puts_(a);
        return 0;
    }
    
    //linklist.h
    typedef struct student{
        int score;
        struct student* next;
    }LinkList;
    LinkList *create(int n);
    void change(LinkList *list,int n);
    void Delete(LinkList *list,int n);//delete 是关键字,所以 d 改大写 Delete
    void insert(LinkList *list,int n);
    void puts_(const LinkList *list);
     
    //linklist.c
    #include"linklist.h"
    #ifndef _LINKLIST_H_
    #define _LINKLIST_H_
    /*typedef struct student{
        int score;
        struct student* next;
    }LinkList;*/
    LinkList *create(int n){
        LinkList *head,*node,*end;
        head=(LinkList*)malloc(sizeof(LinkList));
        head->next = NULL;  //修改
        end=head;
        int i;
        for(i=0;i<n;i++){
        node=(LinkList*)malloc(sizeof(LinkList));
        node->next = NULL;  //修改
        printf("请输入数据:\n");
        scanf("%d",&node->score); //scanf("%d",node->score);修改
        end->next=node;
        end=node;
        }
        end->next=0;
        return head;
    }
     
    void change(LinkList *list,int n){
        LinkList *t=list;
        int i=0;
        while(i<n&&t!=0){
            t=t->next;
            i++;
        }
        if(t!=0){
            printf("请输入修改后的值:\n");
            scanf("%d",&t->score); 
        }else
            puts("节点不存在");
    }
     
    void Delete(LinkList *list,int n){//delete 是关键字,所以 d 改大写 Delete
        LinkList *t,*in;
        int i=0;
        t=list;
        while(t!=0&&i<n){
            in=t;
            t=t->next;
            i++;
        }
        if(t!=0){
            in->next=t->next;
            free(t);
        }else{
            puts("节点不存在");
        }
    }
     
    void insert(LinkList *list,int n){
        LinkList *t,*in;
        int i=0;
        t=list;
        while(t!=0&&i<n){
            t=t->next;
            i++;
        }
        if(t!=0){
            in=(LinkList*)malloc(sizeof(LinkList));
            puts("要插入的值");
            scanf("%d",&in->score);
            in->next=t->next;
            t->next=in;
        }else{
            puts("节点不存在");
        }
    }
     
    void puts_(const LinkList *list){
        const LinkList *t=list;
        while(t->next!=0){//while(t!=0) 修改
            t=t->next;
            printf("%-3d",t->score);
        }
    }
    #endif
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月23日
  • 已采纳回答 3月15日
  • 创建了问题 3月14日

悬赏问题

  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法