姜肆爷 2021-09-13 16:46 采纳率: 76%
浏览 24
已结题

数据结构与算法 链式表的操作集

我的代码一直显示段错误,麻烦各位帮我看看是哪里出错了

img

img

Position Find( List L, ElementType X ){
    Position ptrl = L;
    while(ptrl != NULL && ptrl->Data != X){
        ptrl = ptrl->Next;
    }
    if( ptrl->Data == X){
        return ptrl;
    }
    else{
        return ERROR;
    }
}

List Insert( List L, ElementType X, Position P ){
    Position ptrl = L;
    List s = (List)malloc(sizeof(struct LNode));
    s->Data = X;
    if( P == L){
        s->Next = P;
        L = s;
        return L;
    }

    else if(  P == NULL){
        printf("Wrong Position for Insertion");
        return ERROR;
    }
    else{
        if( ptrl->Next!=P){
            ptrl = ptrl->Next;
        }
        else{
            ptrl->Next = s;
            s->Next = P;
            return L;
        }
    }
}


List Delete( List L, Position P ){
    Position ptrl = L;
    if( P == L){
        if( L != NULL){
            L = ptrl->Next;
        }
        else{
            return ERROR;
        }
        free( P);
        return L;
    }
    else if( P == NULL){
        return ERROR;
    }
    else if( ptrl != NULL && ptrl->Next != P){
        ptrl = ptrl->Next;
    }
    if( ptrl->Next == P){
        ptrl->Next = P->Next;
        free(P);
        return L;
    }
}

img

  • 写回答

1条回答 默认 最新

  • qfl_sdu 2021-09-13 17:05
    关注

    大体修改如下:

    
    Position Find( List L, ElementType X ){
        Position ptrl = L;
        while(ptrl != NULL && ptrl->Data != X){
            ptrl = ptrl->Next;
        }
        if( ptrl->Data != NULL && ptrl->Data == X){ //修改1
            return ptrl;
        }
        else{
            return ERROR;
        }
    }
    List Insert( List L, ElementType X, Position P ){
        Position ptrl = L;
        List s = (List)malloc(sizeof(struct LNode));
        s->Data = X;
        if( P == L){
            s->Next = P;
            L = s;
            return L;
        }
        else if(  P == NULL){
            printf("Wrong Position for Insertion");
            return ERROR;
        }
        else{
            while( ptrl->Next!=P){ //修改2
                ptrl = ptrl->Next;
            }
             //修改3
                ptrl->Next = s;
                s->Next = P;
                return L;
            
        }
    }
    
    List Delete( List L, Position P ){
        Position ptrl = L;
        if( P == L){
            if( L != NULL){
                L = ptrl->Next;
            }
            else{
                return ERROR;
            }
            free( P);
            return L;
        }else if( P == NULL){
            return ERROR;
        }else
        {
            while(ptrl->Next != NULL && ptrl->Next != P)
                ptrl = ptrl->Next;
            if( ptrl->Next != NULL && ptrl->Next == P)
            {
                ptrl->Next = P->Next;
                free(P);
                return L;
            }
        }
        
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月21日
  • 已采纳回答 9月13日
  • 创建了问题 9月13日

悬赏问题

  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值