rsZheng4916 2021-11-30 21:42 采纳率: 60%
浏览 39
已结题

单链表建立和输出的问题,求解决

#include"stdio.h"
#include"stdlib.h"
#include"stdbool.h"

typedef int ElemType;
typedef struct LNode{
    ElemType data;
    struct LNode *next;
}LinkList;

void CreateListH(LinkList *L,ElemType a[],int n){
    LinkList *s;
    int i;
    L = (LinkList*)malloc(sizeof(LinkList));
    L->next = NULL;
    for(i = 0;i < n;i++){
        s = (LinkList*)malloc(sizeof(LinkList));
        s->data = a[i];
        s->next = L->next;
        L->next = s;
    }
}

void CreateListR(LinkList *L,ElemType a[],int n){
    LinkList *s,*r;
    int i;
    L = (LinkList*)malloc(sizeof(LinkList));
    r = L;
    // 分配新结点并用尾插法链接
    for(i = 0;i < n;i++){
        s = (LinkList*)malloc(sizeof(LinkList));
        s->data = a[i];
        r->next = s;
        r = s;
    }
    r->next = NULL;
}

void InitList(LinkList *L){
    L = (LinkList*)malloc(sizeof(LinkList));
    L->next = NULL;
}

void DestroyList(LinkList *L){
    // pre指向L,即头结点;p指向头结点的下一个结点,即首元结点
    LinkList *pre = L,*p = L->next;
    // 类似放鞭炮,前面响完后面响
    while (p != NULL){
        free(pre);
        pre = p;
        p = p->next;
    }
    free(pre);
}

bool EmptyList(LinkList *L){
    // TRUE:空 FALSE:非空
    return(L->next == NULL);
}

int ListLength(LinkList *L){
    int n = 0;
    LinkList *p = L;

    while(p->next != NULL){
        n++;
        p = p->next;
    }
    return (n);
}

void DisplayList(LinkList *L){
    LinkList *p = L->next;

    while (p != NULL){
        printf("%d ",p->data);
        p = p->next;
    }
    printf("\n");
}

int GetElem(LinkList *L,int i,ElemType e){
    int j = 0;
    LinkList *p = L;

    while (j<i && p!=NULL){
        j++;
        p = p->next;
    }
    if(p == NULL){
        return 0;
        // return false;
    }else{
        e = p->data;
        printf("Get %d's elem is:%d",i,e);
        return e;
        // return true;
    }
}

int main(){
    LinkList *L;
    int a[] = {1,3,5,7,9};
    CreateListH(L,a,3);
    DisplayList(L);
}

img


图片是断电调试提示的错误,请懂的兄弟帮我解答一下。

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2021-11-30 22:58
    关注

    修改见注释,供参考:

    #include"stdio.h"
    #include"stdlib.h"
    #include"stdbool.h"
    typedef int ElemType;
    typedef struct LNode{
        ElemType data;
        struct LNode *next;
    }LinkList;
    void CreateListH(LinkList **L,ElemType a[],int n){//修改
        LinkList *s;
        int i;
        (*L) = (LinkList*)malloc(sizeof(LinkList));
        (*L)->next = NULL;
        for(i = 0;i < n;i++){
            s = (LinkList*)malloc(sizeof(LinkList));
            s->data = a[i];
            s->next = (*L)->next;
            (*L)->next = s;
        }
    }
    void CreateListR(LinkList **L,ElemType a[],int n){//修改
        LinkList *s,*r;
        int i;
        (*L) = (LinkList*)malloc(sizeof(LinkList));
        r = (*L);
        // 分配新结点并用尾插法链接
        for(i = 0;i < n;i++){
            s = (LinkList*)malloc(sizeof(LinkList));
            s->data = a[i];
            r->next = s;
            r = s;
        }
        r->next = NULL;
    }
    void InitList(LinkList **L){           //修改
        (*L) = (LinkList*)malloc(sizeof(LinkList));
        (*L)->next = NULL;
    }
    void DestroyList(LinkList *L){
        // pre指向L,即头结点;p指向头结点的下一个结点,即首元结点
        LinkList *pre = L,*p = L->next;
        // 类似放鞭炮,前面响完后面响
        while (p != NULL){
            free(pre);
            pre = p;
            p = p->next;
        }
        free(pre);
    }
    bool EmptyList(LinkList *L){
        // TRUE:空 FALSE:非空
        return(L->next == NULL);
    }
    int ListLength(LinkList *L){
        int n = 0;
        LinkList *p = L;
        while(p->next != NULL){
            n++;
            p = p->next;
        }
        return (n);
    }
    void DisplayList(LinkList *L){
        LinkList *p = L->next;
        while (p != NULL){
            printf("%d ",p->data);
            p = p->next;
        }
        printf("\n");
    }
    int GetElem(LinkList *L,int i,ElemType e){
        int j = 0;
        LinkList *p = L;
        while (j<i && p!=NULL){
            j++;
            p = p->next;
        }
        if(p == NULL){
            return 0;
            // return false;
        }else{
            e = p->data;
            printf("Get %d's elem is:%d",i,e);
            return e;
            // return true;
        }
    }
    int main()
    {
        LinkList *L,*R;
        int a[] = {1,3,5,7,9};
        CreateListH(&L,a,5); //CreateListH(L,a,3);
        DisplayList(L);
        printf("L-length:%d\n",ListLength(L));
    
        CreateListR(&R,a,3);
        DisplayList(R);
        printf("R-length:%d\n",ListLength(R));
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月10日
  • 已采纳回答 12月2日
  • 创建了问题 11月30日

悬赏问题

  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥200 关于#c++#的问题,请各位专家解答!网站的邀请码
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号