时光之中 2022-03-18 18:33 采纳率: 100%
浏览 55
已结题

C语言顺序表提问-程序不报错但无输出结果

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

程序不输出啊

问题相关代码,请勿粘贴截图
#include <stdio.h>

typedef int ElemType;
//定义顺序表
struct List{
    ElemType *list;
    int Size;
    int MaxSize;
};
void Delete(int i,struct List *L);  //定义线性表的删除
void Insert(ElemType X,int i,struct List *L);   //定义线性表的插入
void print(struct List L);     //定义线性表中数据的显示
int Find(ElemType X,struct List L);//定义线性表数据的定位和查找
//初始化顺序表
void ListInitiate(struct List *L){
    L->Size = 0;                //定义初始化元素个数
}
//删除元素
void Delete(int i,struct List *L){
    int j;
    if(L->Size <= 0){
        printf("删除失败!\n");
    }else if(i < 0 || i > L->Size-1){
        printf("参数i错误!\n");
    }else {
        for(j = i+1;j <= L->Size-1;j++)
            L->list[j-1] = L->list[j];
        L->Size--;
    }
}
//插入元素
void Insert(ElemType X,int i,struct List *L){
    int j;
    if(L->Size >= sizeof(L->list)){
        printf("顺序表已满!\n");
    }else if(i < 0 || i > L->Size){
        printf("参数i不合法!\n");
    }else {
        for(j = L->Size;j > i;j--)
            L->list[j] = L->list[j-1];
        L->list[i] = X;
        L->Size++;
    }
}
//显示数据
void print(struct List L){
    int i = 0;
     printf("此时的顺序表为:");
    for(i = 0;i < L.Size;i++)
        printf("%d",L.list[i]);
    printf("\n");
}
//查找数据
int Find(ElemType X,struct List L){
    int temp;
    while(temp <= sizeof(L.list) || L.list[temp] != X)
        temp++;
    if(sizeof(L.list) < temp){
        printf("未找到该数据!");
        return -1;
    }else
        return temp;
}
void main(){
    int i;
    struct List L;  //定义顺序表
    ListInitiate(&L);   //初始化顺序表
    for(i = 0;i < 10;i++){
        Insert(i+1,i,&L);   //插入函数
    }
    printf("查找值为8的下标是:%d\n",Find(8,L)); //查找函数
    print(L);   //显示函数
    Delete(5,&L);   //删除函数
    print(L);   //显示函数
}

运行结果及报错内容

中间就断了

我的解答思路和尝试过的方法
我想要达到的结果

输出7
01 2 3 4 5 6 7 8 9
01 2 3 4 6 7 8

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-03-19 14:24
    关注

    修改处见注释,供参考:

    #include <stdio.h>
    #define MaxSize 10  //修改
    typedef int ElemType;
    //定义顺序表
    struct List{
        ElemType *list;
        int Size;
        //int MaxSize;   //修改
    };
    void ListInitiate(struct List *L);
    void Delete(int i,struct List *L);  //定义线性表的删除
    void Insert(ElemType X,int i,struct List *L);   //定义线性表的插入
    void print(struct List L);     //定义线性表中数据的显示
    int  Find(ElemType X,struct List L);//定义线性表数据的定位和查找
    //初始化顺序表
    void ListInitiate(struct List *L){
        L->list = (ElemType*)malloc(sizeof(ElemType)*MaxSize); //修改
        L->Size = 0;                //定义初始化元素个数
    }
    //删除元素
    void Delete(int i,struct List *L){
        int j;
        if(L->Size <= 0){
            printf("删除失败!\n");       //修改
        }else if(i <= 0 || i > L->Size){ // }else if(i < 0 || i > L->Size-1){
            printf("参数i错误!\n");
        }else {
            for(j = i;j < L->Size;j++)
                L->list[j-1] = L->list[j];
            L->Size--;
        }
    }
    //插入元素
    void Insert(ElemType X,int i,struct List *L){
        int j;
        if(L->Size == MaxSize){  //if(L->Size >= sizeof(L->list)){
            printf("顺序表已满!\n");
        }else if(i < 0 || i > L->Size){
            printf("参数i不合法!\n");
        }else {
            for(j = L->Size;j > i;j--)
                L->list[j] = L->list[j-1];
            L->list[i] = X;
            L->Size++;
        }
    }
    //显示数据
    void print(struct List L){
        int i = 0;
         printf("此时的顺序表为:");
        for(i = 0;i < L.Size;i++)
            printf("%d ",L.list[i]);
        printf("\n");
    }
    //查找数据
    int Find(ElemType X,struct List L){
        int temp = 0;
        while(temp < L.Size && L.list[temp] != X)  //修改
        // while(temp <= sizeof(L.list) || L.list[temp] != X)
            temp++;
        if(L.Size <= temp){ //if(sizeof(L.list) < temp){ //修改
            printf("未找到该数据!");
            return -1;
        }else
            return temp+1;   //修改
    }
    void main(){
        int i;
        struct List L;  //定义顺序表
        ListInitiate(&L);   //初始化顺序表
        for(i = 0;i < 10;i++){
            Insert(i+1,i,&L);   //插入函数
        }
        printf("查找值为8的下标是:%d\n",Find(8,L)); //查找函数
        print(L);   //显示函数
    
        Delete(5,&L);   //删除函数
        print(L);   //显示函数
    
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月28日
  • 已采纳回答 3月20日
  • 创建了问题 3月18日

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来