Bey-Hey 2022-03-22 21:50 采纳率: 85%
浏览 33
已结题

线性表基本运算实现不知哪里错了

求解答,为啥运行不得

```c++
 //定义头文件
#include<stdio.h>
#include<malloc.h>
//定义全局变量
#define MaxSize 50
//定义元素类型
typedef char ElmeType
//定义顺序表的结构体
typedef struct
{
    ElemType data[MaxSize];
    int length;
}SqList;
//初始化线性表
void LnitList(SqList *&L)
{
   //动态分配空间
    L=(SqList*)malloc(sizeof(Sqlist));
    //线性表(顺序表)的长度为0
    L->Length=0;
}

//创建顺序表
void CreateList(SqList *&L,ElemType a[],int n)
{
    int i;
//分配存放线性表的空间
    L=(Sqlist*)malloc(sizeof(Sqlist));
//把a数组中的元素依次放置到线性表的data[]
    for(i=0;i<n;i++)
        L->data[i]=a[i];
//设置线性表的长度
    L->length=n;
}
//输出顺序表
void DispList(SqList *L)
{
//判断线性表是否为空
    if(ListEmpty(L))
        return;
    //依次输出线性表的内容
    for(int i=0;i<L->length;i++)
        printf("%d",L->data[i]);
    printf("\n");
}
//求线性表的长度
int ListLength(SqList *L)
{
    return(L->length);
}

//求线性表第i个数据元素值,并存放在变量e中
int GetElem(SqList  *L,int i,ElemType &e)
{
//判断i是否合理
    if(i<1||i>L->length)
        return false;
//把元素赋值给e
    e=L->data[i-1];
    return ture;
}

//按元素值查找,若查找不成功,返回0,否则返回该元素的逻辑位序
int LocateElem(SqList *L, ElemType e)
{
    int i=0;
   //扫描数组元素,i++
    while(i<L->length->dada[i]!=e)
        i++;
//若i>L->length,则查找不成功,返回0,否则返回该元素的逻辑位序
    if(i>=L->length)
        return 0;
    else
        return i+1;
}
//main函数
void main()
{
    Sqlist*L;
    ElemType a[10];
    int i,n=10;
    printf("请输入10个字符:\n");
    for(i=0;i<10;i++)
        scanf("%c",&a[i]);
    //调用InitList()初始化线性表
    Lnitlist(L);
//调用CreateList()建立线性表
    CreateList(L,a,n);
    //调用DispList()输出线性表
    DispList(L);
//调用ListLength ()求线性表的长度
    ListLength(L);
//调用GetElem ()找线性表第i个元素
    GetElem(L,i,e);
//调用LocateElem ()查找线性表中是否存在所给元素
    LocateElem(L,e);
}




```

  • 写回答

1条回答 默认 最新

  • 魔法自动机 2022-03-23 10:52
    关注

    我对你代码不能运行的地方都标记了注释,主要两个问题:前后变量不一致、使用变量函数没有先声明。

    #define MaxSize 50
    typedef char ElemType;//你写成了ElmeType
    typedef struct
    {
        ElemType data[MaxSize];
        int length;
    }SqList;
    //先把ListLength函数都声明一遍
    //因为DispList要调用,但是没办法调用后声明的ListLength,所以这里先声明
    int ListLength(SqList *L);
    void LnitList(SqList *&L)
    {
        L = (SqList*)malloc(sizeof(SqList));//SqList大小写
        L->length = 0;//length大小写
    }
    void CreateList(SqList *&L, ElemType a[], int n)
    {
        int i;
        L = (SqList*)malloc(sizeof(SqList));//SqList大小写
        for (i = 0; i < n; i++)
            L->data[i] = a[i];
        L->length = n;
    }
    void DispList(SqList *L)
    {
        if (ListLength(L)==0)//你都没写ListEmpty(L)函数
            return;
        for (int i = 0; i < L->length; i++)
            printf("%d", L->data[i]);
        printf("\n");
    }
    int ListLength(SqList *L)
    {
        return(L->length);
    }
    int GetElem(SqList  *L, int i, ElemType &e)
    {
        if (i<1 || i>L->length)
            return false;
        e = L->data[i - 1];
        return true;//不是ture
    }
    int LocateElem(SqList *L, ElemType e)
    {
        int i = 0;
        while (i < L->length&&L->data[i] != e)//不是L->length->data[i]
            i++;
        if (i >= L->length)
            return 0;
        else
            return i + 1;
    }
    void main()
    {
        SqList*L;//SqList大小写
        ElemType a[10];
        int i, n = 10;
        printf("请输入10个字符:\n");
        for (i = 0; i < 10; i++)
            scanf("%c", &a[i]);
        LnitList(L);
        CreateList(L, a, n);
        DispList(L);
        ListLength(L);
        ElemType e;//先声明才能用e
        GetElem(L, i, e);
        LocateElem(L, e);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月5日
  • 已采纳回答 3月28日
  • 创建了问题 3月22日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装