慕衍> 2022-03-24 17:13 采纳率: 87.5%
浏览 25
已结题

试着写了一个顺序表,为什么会出现这种情况,以及还有哪些问题

img


//main.c
#include<stdio.h>
#include<stdlib.h>
#include"list .h"
/*
void CreateList(SqList *L,int n);    //创建顺序表
void InitList(SqList *L);    //初始化顺序表
void InsertList(SqList *L, int index, elem e);    //在index处插入
void ListDelete(SqList *L, int index);    //删除index处元素
int LocteElem(SqList *L, elem e);    //查找数据e在顺序表里的位置
void GetElem(SqList* L, int index);   //输出index处的值
typedef struct data {
    int expn;//指数
    double coef;//系数
}elem;
typedef struct {

}SqList;    elem* data;//数据
    int length;//表长
*/
int main()
{
    SqList* k=NULL;
    CreateList(k, 5);
    return 0;
}


//list.h
#define MAXSIZE 100
typedef struct data {
    int expn;//指数
    double coef;//系数
}elem;
typedef struct {
    elem* data;//数据
    int length;//表长
}SqList;
void CreateList(SqList *L,int n);    //创建顺序表
void InitList(SqList *L);    //初始化顺序表
void InsertList(SqList *L, int index, elem e);    //在index处插入
void ListDelete(SqList *L, int index);    //删除index处元素
int LocteElem(SqList *L, elem e);    //查找数据e在顺序表里的位置
void GetElem(SqList* L, int index);   //输出index处的值


//list.c
#include<stdlib.h>
#include<stdio.h>
#include"list .h"
#ifndef _LIST_H_
#define _LIST_H_
/*
typedef struct data {
    int expn;//指数
    double coef;//系数
}elem;
typedef struct {
    elem* data;//数据
    int length;//表长
}SqList;
*/
void CreateList(SqList* L, int n) {
        L = (elem*)malloc(MAXSIZE * sizeof(elem));
        for (int i = 0; i < n; i++) {
            printf("请按先后输入指数和系数:\n");
            scanf("%d %lf",L->data[i].expn,L->data[i].coef);
            L->length++;
        }
}
void InitList(SqList* L) {
    L = (elem*)malloc(MAXSIZE * sizeof(elem));
    L->length = 0;
}
void InsertList(SqList* L, int index, elem e) {
    if (index > (L->length + 1) || index < 1||L->length==MAXSIZE) {
        printf("ERROR\n");
    }
    else {
        for (int i = L->length - 1; i > index - 1; i--) {
            L->data[i + 1] = L->data[i];
        }
        L->data[index - 1] = e;
        L->length++;
    }
}
void ListDelete(SqList* L, int index) {
    if (index > L->length || index < 1) {
        printf("ERROR\n");
    }
    else {
        for (int i = index-1; i < L->length - 1; i++) {
            L->data[i] = L->data[i + 1];
        }
        L->length--;
    }
}
int LocteElem(SqList* L, elem e) {
    int isPrime = 0;
    for (int i = 0; i < L->length - 1; i++) {
        if (e.expn == L->data[i].expn&&e.coef==L->data[i].coef) {
            printf("该元素位于第%d位\n", i + 1);
            isPrime = 1;
            break;
        }
    }
    if (!isPrime) {
        printf("表中无元素\n");
    }
}
void GetElem(SqList* L, int index) {
    if (index<1 || index>L->length) {
        printf("ERROR\n");
    }
    else {
        printf("指数为%d  系数为%lf\n", L->data[index - 1].expn, L->data[index - 1].coef);
    }
}
#endif
  • 写回答

3条回答 默认 最新

  • 关注

    修改后运行结果:

    img

    main.c代码:

    #include "list.h"
    #include <stdio.h>
    int main()
    {
        SqList k ;
        int pos;
        elem e;
        InitList(&k); //这里先初始化链表
        CreateList(&k, 5);
        ShowList(&k);
        //插入
        printf("请输入需要插入的位置和数据:");
        scanf("%d %d %lf", &pos, &e.expn, &e.coef);
        InsertList(&k, pos, e);
        printf("插入后链表:\n");
        ShowList(&k);
        //删除
        printf("请输入需要删除的位置:");
        scanf("%d", &pos);
        ListDelete(&k, pos);
        printf("删除后链表:\n");
        ShowList(&k);
    
    
        return 0;
    }
    
    
    

    list.h代码:

    #define _CRT_SECURE_NO_WARNINGS 1
    
    #ifndef _LIST_H_
    #define _LIST_H_
    
    
    #define MAXSIZE 100
    typedef struct data {
        int expn;//指数
        double coef;//系数
    }elem;
    typedef struct {
        elem* data;//数据
        int length;//表长
    }SqList;
    void CreateList(SqList* L, int n);    //创建顺序表
    void InitList(SqList* L);    //初始化顺序表
    void InsertList(SqList* L, int index, elem e);    //在index处插入
    void ListDelete(SqList* L, int index);    //删除index处元素
    int LocteElem(SqList* L, elem e);    //查找数据e在顺序表里的位置
    void GetElem(SqList* L, int index);   //输出index处的值
    
    void ShowList(SqList* L); //显示链表
    
    #endif
    
    

    list.c代码:

    #include "list.h"
    #include <stdio.h>
    #include <stdlib.h>
    void CreateList(SqList* L, int n) {
        //L = (elem*)malloc(MAXSIZE * sizeof(elem)); //修改  已经有InitList函数了,这里就不需要再申请内存了
        for (int i = 0; i < n; i++) {
            printf("请按先后输入指数和系数:\n");
            scanf("%d %lf", &L->data[i].expn, &L->data[i].coef); //修改  读数据需要用地址
            //L->length++; 
        }
        L->length = n; //再这里直接赋值就可以了
    }
    void InitList(SqList* L) {
        L->data = (elem*)malloc(MAXSIZE * sizeof(elem));// 修改 L = (elem*)malloc(MAXSIZE * sizeof(elem));
        L->length = 0;
    }
    void InsertList(SqList* L, int index, elem e) {
        if (index > (L->length + 1) || index < 1 || L->length == MAXSIZE) {
            printf("ERROR\n");
        }
        else {
            for (int i = L->length - 1; i >= index - 1; i--) //修改  这里是i >= index -1,否则 index-1位置处的数据无法后移
                L->data[i + 1] = L->data[i];
        }
        L->data[index - 1] = e;
        L->length++;
    }
    
    
    void ListDelete(SqList* L, int index) {
        if (index > L->length || index < 1) {
            printf("ERROR\n");
        }
        else {
            for (int i = index - 1; i < L->length - 1; i++) {
                L->data[i] = L->data[i + 1];
            }
            L->length--;
        }
    }
    int LocteElem(SqList* L, elem e) {
        int isPrime = 0;
        for (int i = 0; i < L->length - 1; i++) {
            if (e.expn == L->data[i].expn && e.coef == L->data[i].coef) {
                printf("该元素位于第%d位\n", i + 1);
                isPrime = 1;
                break;
            }
        }
        if (!isPrime) {
            printf("表中无元素\n");
        }
        return isPrime;
    }
    void GetElem(SqList* L, int index) {
        if (index<1 || index>L->length) {
            printf("ERROR\n");
        }
        else {
            printf("指数为%d  系数为%lf\n", L->data[index - 1].expn, L->data[index - 1].coef);
        }
    }
    
    void ShowList(SqList* L)
    {
        int i;
        for (i = 0; i < L->length; i++)
        {
            printf("(%d,%lf) ", L->data[i].expn ,L->data[i].coef);
        }
        printf("\n");
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月2日
  • 已采纳回答 3月25日
  • 创建了问题 3月24日

悬赏问题

  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 Revit2020下载问题
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大