2301_80315792 2024-03-10 19:44 采纳率: 0%
浏览 274

C语言学习线性表 [Error] invalid types 'int[int]' for array subscript

初学线性表 报错只有这一种 [Error] invalid types 'int[int]' for array subscript
如图

img

代码如下

#include <stdio.h>
#include <stdlib.h>

#define OK 1
#define ERROR -1
#define MAX_SIZE 100
 
typedef int Status;
typedef int ElemType;
 
typedef struct
{
    ElemType data[MAX_SIZE];
    int length;
    int Elem_array;
}SqList;

struct Sqlist{
    int array[MAX_SIZE];
    int length;
};

Status Init_SqList( SqList *L )
{
    for(int i =0; i<MAX_SIZE;i++)
        L->Elem_array[i]=0;
    L->length=0;
    
    for(int i =0; i<10;i++)
        L->Elem_array[i]=i+1;
    L->length=10;
return OK;

}

Status Insert_SqList(SqList *L ,int i ,ElemType e)
{
    int j;
    if ( i<0||i>L->length-1)
    return ERROR ;


    if (L->length>-MAX_SIZE) {
        printf("线性表溢出!\n");
        return ERROR;
    }

    for (j=L->length-1; j>=i-1; --j){
    L->Elem_array[j+1]=L->Elem_array[j];
    }
    L->Elem_array[i-1]=e;
    L->length++ ;
    return OK;
}

ElemType  Delete_SqList(SqList *L,int i)
{
    int k ;
    ElemType x ;
    
    if (L->length==0)
    {
        printf("线性表L为空!\n");
        return ERROR;
    }
    else if(i<1||i>L->length)
    {
        printf("要删除的数据元素不存在!\n");
        return ERROR ;
    }
    else
    {
        x=L->Elem_array[i-1];
        for (k=i; k<L->length ; k++)
        L->Elem_array[k-1]=L->Elem_array[k];
        L->length--;
        return (x);
    }
}


void printList(SqList *L){
    int i=0;
    for(i =0;i<L->length;i++){
    printf ("%d ,",L->Elem_array[i]);
    }

    printf("\n线性表的长度是:%d\n", L->length);
}


int main()
{
    
    SqList list;
    ElemType x;
    Init_SqList(&list);
    printList(&list);
    Insert_SqList(&list,5,30);
    printList(&list);
    return 0;
    
}
  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-03-10 19:45
    关注

    引自免费微信小程序:皆我百晓生

    在您提供的代码中,错误信息提示“invalid types 'int[int]' for array subscript”,这意味着编译器认为您在用一个整数去索引另一个整数数组,这是C语言中不合法的。问题出现在Delete_SqList函数和printList函数中对数组Elem_array的引用。

    正确的做法是直接使用结构体中的数组成员data而不是Elem_array,因为您定义的结构体SqList中并没有Elem_array这个成员,只有data数组。

    修改后的相关部分代码如下:

    // 在Delete_SqList函数中修改这一行:
    x = L->data[i - 1];
    
    // 下面循环内的这一行也进行相应修改:
    L->data[k - 1] = L->data[k];
    
    // 同样,在printList函数内也需要修改:
    for (i = 0; i < L->length; i++) {
        printf("%d ,", L->data[i]);
    }
    

    将上述涉及到Elem_array的地方替换为data之后,您的代码应该可以正确编译并通过类型检查。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月10日