柑橘糖 2022-09-23 19:16 采纳率: 50%
浏览 64
已结题

顺序表的增删改查 出现好多报错

#include<stdio.h>
#include<stdlib.h>
#define LISTSIZE
#define OK 1
#define ERROR 0
typedef struct{
int *elem;
int length;
int LiseSize;
}SqList;
void fuzhi(SqList *L)
{
int length;
printf("请给顺序表赋值:\n");
printf("你想要输入几个数据:\n");
scanf("%d",&length);
printf("请输入元素:\n");
for(int i=0;i<length;i++)
scanf("%d",&L->elem[i]);
L->length=length;
}
void InsertList(SqList *L,int i,int elem)
{
int k;
if((i<1)||(i>L->length+2))
{
printf("插入位置i值不合法");
return(ERROR);
}
if(L->length>=MAX-1)
{
printf("表已满,无法插入");
return(ERROR);
}
for(k=L->length;k>=i-1;k--)
L->elem[i-1]=e;
L->length++;
return(OK);
}
void DeleteList(SqList *L,int i)
{
for(int k=i;k<=L->length;k++)
L->elem[k-1]=L->elem[k];
L->length--;
}
void AlterElement(SqList *L,int elem,int i)
{
L->elem[i-1]=elem;
}
int SearchElement(SqList L,int elem)
{
int location;
for(int i=0;ilength;i++)
if(L->elem[i]==elem)
{
location=i+1;
return location;
}
return -1;
}
void PrintList(SqList L)
{
printf("操作完后的顺序表为:\n");
for(int i=0;ilength;i++)
printf("%d",L->elem[i]);
}
int main()
{
SqList L;
L.elem = (int
)malloc(LISTSIZE
sizeof(int));
L.LiseSize = LISTSIZE;
fuzhi(&L);
printf(&L);
printf("输入你要插入的数字位置和要插入的数据值:\n");
int insert_a,insert_b;
scanf("%d%d",&insert_a,&insert_b);
InsertList(&L,insert_a-1,insert_b);
printList(&L);
int delete;
printf("输入你要删除的数据位置:\n");
scanf("%d%",&delete);
Delete(&L,delete-1);
printf(&L);
int Alter_a,Alter_b;
scanf("%d%d",&Alter_a,&Alter_b);
AlterElement(&L,Alter_a,Alter_b);
printf(&L);
int saerch;
printf("输入你要查找的数据位置:\n");
scanf("%d",&search);
int index=SearchElement(&L,search);
if(index + 1)
printf("您要查找的数据位置为%d个\n",index);
else
printf("抱歉,您要查找的数据不存在\n");
}

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2022-09-23 19:34
    关注

    把代码贴出来才可以帮上忙。
    都已修改调试完善,修改处见注释位置,供参考:

    #include<stdio.h>
    #include<stdlib.h>
    #define LISTSIZE 50//修改
    #define OK 1
    #define ERROR 0
    typedef struct{
        int *elem;
        int length;
        int LiseSize;
    }SqList;
    void fuzhi(SqList *L)
    {
        int length;
        printf("请给顺序表赋值:\n");
        printf("你想要输入几个数据:");
        scanf("%d",&length);
        if (length > L->LiseSize){  //修改
           printf("待输入元素个数大于表长度,无法赋值!\n");
           return;
        }
        printf("请输入元素:\n");
        for(int i=0;i<length;i++)
            scanf("%d",&L->elem[i]);
        L->length=length;
    }
    void InsertList(SqList *L,int i,int elem)
    {
        int k;
        if((i < 1)||(i > L->length))//if((i<1)||(i>L->length+2))
        {
            printf("插入位置i值不合法\n");
            return;//(ERROR);
        }
        if(L->length >= L->LiseSize)//if(L->length>=MAX-1)
        {
            printf("表已满,无法插入\n");
            return;//(ERROR);
        }
        for(k=L->length;k > i - 1; k--)
            L->elem[k] = L->elem[k-1];//修改
        L->elem[i-1]=elem; //L->elem[i-1]=e;
        L->length++;
        return;//(OK);
    }
    void DeleteList(SqList *L,int i)
    {
        if((i < 1)||(i > L->length))//修改
        {
            printf("删除位置i值不合法\n");
            return;
        }
        if(L->length <= 0) //修改
        {
            printf("表已空,无法删除\n");
            return;
        }
        for(int k = i - 1;k < L->length - 1; k++)//修改
            L->elem[k]=L->elem[k+1];             //修改
        L->length--;
    }
    void AlterElement(SqList *L,int elem,int i)
    {
        if((i < 1)||(i > L->length))//修改
        {
            printf("修改位置i值不合法\n");
            return;
        }
        L->elem[i-1]=elem;
    }
    int SearchElement(SqList* L,int elem)
    {
                             //int location;修改
        for(int i=0;i < L->length;i++)
            if(L->elem[i] == elem)
                             //location=i+1;修改
                return i+1;  //location; 修改
        return -1;
    }
    void PrintList(SqList* L)
    {
        printf("操作完后的顺序表为:\n");
        for(int i=0;i < L->length;i++)
            printf("%d ",L->elem[i]);
        printf("\n");
    }
    int main()
    {
        SqList L;
        L.elem = (int*)malloc(LISTSIZE*sizeof(int));
        L.LiseSize = LISTSIZE;
        L.length = 0;         //修改
        fuzhi(&L);
        PrintList(&L);        //printf(&L);
    
        printf("输入你要插入的数字位置和要插入的数据值:");
        int insert_a,insert_b;
        scanf("%d%d",&insert_a,&insert_b);
        InsertList(&L,insert_a,insert_b);
        //InsertList(&L,insert_a-1,insert_b);
        PrintList(&L);       //printList(&L);
    
        int Del;             //delete;
        printf("输入你要删除的数据位置:");
        scanf("%d",&Del);    //scanf("%d%",&delete);
        DeleteList(&L,Del);  // Delete(&L,delete-1);
        PrintList(&L);       // printf(&L);
    
        int Alter_a,Alter_b;
        printf("输入你要修改的目标值和数据位置:");//修改
        scanf("%d%d",&Alter_a,&Alter_b);
        AlterElement(&L,Alter_a,Alter_b);
        PrintList(&L);      //printf(&L);修改
    
        int search;  //saerch;
        printf("输入你要查找的数据值:");
        scanf("%d",&search);
        int index = SearchElement(&L,search);
        if(index > 0)  //if(index + 1)
            printf("您要查找的数据位置为%d个\n",index);
        else
            printf("抱歉,您要查找的数据不存在\n");
    
        return 0;
    }
    
    
    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月26日
  • 赞助了问题酬金10元 9月24日
  • 修改了问题 9月24日
  • 修改了问题 9月24日
  • 展开全部

悬赏问题

  • ¥15 openpcdet自制数据集评估bev精度和3d精度相同
  • ¥15 excel 上下按钮 显示行
  • ¥20 云卓h12pro 数传问题
  • ¥20 请问有人知道怎么用工艺库里面的sdb文件通过virtuoso导出来library里面每个cell的symbol吗?
  • ¥20 海思 nnie 编译 报错
  • ¥50 决策面并仿真,要求有仿真结果图
  • ¥15 关于路由器的路由协议配置
  • ¥15 springboot接入微信支付SDK
  • ¥50 大区域的遥感影像匹配 怎么做啊
  • ¥15 求解答:pytorch跑yolov8神经网络受挫