Joanofarc_alter 2022-09-04 15:07 采纳率: 92.9%
浏览 23
已结题

删除顺序表范围元素失败

问题遇到的现象和发生背景

删除顺序表范围元素失败

问题相关代码,请勿粘贴截图
#include <stdio.h>
#include <stdlib.h>
#define initSize 3
typedef int DataType;
typedef struct SeqList{
    DataType *data;
    int length;
    int size;

}SeqList;
void initSeqList(SeqList * L){
    L->data=(DataType*)malloc(sizeof(DataType)*initSize);
    if(L->data==NULL){
        printf("初始化顺序表失败");
        return;
    }
    L->length=0;
    L->size=initSize;
}
void addElement(SeqList *L,DataType ele){
    if(L->length>=L->size){
        DataType *p=L->data;
        int newSize=L->size*2;
        L->data=(DataType*)malloc(sizeof(DataType)*newSize);
        for(int i=0;i<L->length;i++){
            L->data[i]=p[i];
        }
        L->size=newSize;
        free(p);

    }
    //这里使用length作为存入元素的索引刚好是上一个元素之后的位置
    L->data[L->length]=ele;
    L->length++;



}
void dataDelete(SeqList *L,DataType data){

    for(int i=0;i<L->length;i++){
        if(L->data[i]==data){
                //i是需要删除元素的索引
               for(int j=i;j<L->length-1;j++){
                        L->data[j]=L->data[j+1];
               }
                L->length--;
        return ;

        }
    }

    printf("顺序表中无该元素\n");






}
void rangeDelete(SeqList *L,int inputMin,int inputMax){
    if(L->data==NULL){
     printf("顺序表为空删除失败\n");
     return ;
    }
    int max=L->data[0];
    int min=L->data[0];
    //找到顺序表中的最大值和最小值
    for(int i=0;i<L->length;i++){
        int tempEle=L->data[i];
        if(tempEle>max){
            max=tempEle;
        }
        if(tempEle<min){
            min=tempEle;
        }
    }

    //此判断语句容易漏写条件
    if(inputMin<min||inputMin>max||inputMax<min||inputMax>max){
        printf("输入的范围有误删除失败\n");
        return;
    }
    //用于统计在范围内的元素有多少个
    int count=1;
    //用于存储最小值
    DataType *minEleArr=(DataType*)malloc(sizeof(DataType)*(L->length));

    for(int i=0;i<L->length;i++){
        int tempEle=L->data[i];
        if(tempEle>=inputMin&&tempEle<=inputMax){
        //发现在输入范围内的数据进行删除

        minEleArr[count-1]=tempEle;
        printf("%d ",tempEle);

        count++;



        }
    }
    printf("\n");
    /* for(int i=0;i<count;i++){
        dataDelete(&L,(DataType)minEleArr[i]);
    }*/
    for(int i=0;i<count-1;i++){
       dataDelete(&L,minEleArr[i]);
    }

}
void ergodic(SeqList *L){
    printf("[");

    for(int i=0;i<L->length;i++)
    if(i!=L->length-1){
        printf("%d, ",L->data[i]);
    }else{
        printf("%d]",L->data[i]);
    }
    printf("\n");






}




int main()
{
    SeqList L;
    initSeqList(&L);

    addElement(&L,11);
    addElement(&L,12);
    addElement(&L,9);
    addElement(&L,15);
    addElement(&L,3);
    ergodic(&L);
    rangeDelete(&L,10,15);
    ergodic(&L);





    return 0;
}


运行结果及报错内容

img

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-09-04 20:02
    关注

    问题在第108行:dataDelete(&L,minEleArr[i]); 应修改为:dataDelete(L,minEleArr[i]); 调用函数dataDelete()时,第一个形参里多了 '&' 符号。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

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

悬赏问题

  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路