小淮阿鱼 2021-09-12 14:16 采纳率: 100%
浏览 138
已结题

关于线性表中顺序表的插入操作的问题

在线性表中的插入操作中,我在第3个位置上插入元素20,总是显示“插入位置出错!输入插入的参数错误!” 但是我不知道为什么

这一段代码是打在主函数里边的

printf("请输入要插入的位置:");
scanf("%d,&i");
printf("请输入要插入的元素值:");
scanf("%d",&x);
if(InsElem(&L,i,x))
{
printf("已成功在第%d的位置上插入%d,插入后的线性表为:\n",i,x);
DispList(&L);
}
else
{
printf("输入插入的参数错误!");
}

下面这两段函数是对应的调用函数
int InsElem(SeqList *L,int i,DataType x)
{
int j;
if(L->Length>=MAXLEN)
{
printf("顺序表已满!");
return -1;
}
if(i<1||i>L->Length+1)
{
printf("插入位置出错!");
return 0;
}
if(i==L->Length+1)
{
L->data[i-1]=x;
L->Length++;
return 1;
}
for(j=L->Length-1;j>=i-1;j--)
{
L->data[j+1]=L->data[j];
L->data[i-1]=x;
L->Length++;
return 1;
}
}

void DispList(SeqList *L)
{
int i;
for(i=0;iLength;i++)
{
printf("%5d ",L->data[i]);
}
}

期待解答~

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2021-09-12 14:37
    关注

    第3个位置上插入元素20,总是显示“插入位置出错!输入插入的参数错误!” ,说明代码执行到 int InsElem(SeqList *L,int i,DataType x)函数里
    if(i<1||i>L->Length+1)
    {
    printf("插入位置出错!");
    return 0;
    }
    这段了,函数传参过来是 i=3,那就是满足了if(i>L->Lengh+1),所以原来表的Length是否只有1个节点,就执行printf("插入位置出错!");
    return 0; ,这里就返回主函数了。另int InsElem(SeqList *L,int i,DataType x)函数里移动顺序表的循环也有问题的,代码修改如下,修改处见注释,供参考:

    int InsElem(SeqList *L,int i,DataType x)
    {
         int j;
         if(L->Length>=MAXLEN)
         {
            printf("顺序表已满!");
            return -1;
         }
         if(i<1||i>L->Length+1)
         {
            printf("插入位置出错!");
            return 0;
         }
         if(i==L->Length+1)
         {
            L->data[i-1]=x;
            L->Length++;
            return 1;
         }
         for(j=L->Length-1;j>=i-1;j--)
         {
            L->data[j+1]=L->data[j];
         }
         L->data[i-1]=x;
         L->Length++;
         return 1;
    
         //}
    }
    
    void DispList(SeqList *L)
    {
         int i;
         for(i=0;i < Length;i++)
         {
            printf("%5d ",L->data[i]);
         }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月20日
  • 已采纳回答 9月12日
  • 创建了问题 9月12日

悬赏问题

  • ¥15 给我一个openharmony跑通webrtc实现视频会议的简单demo项目,sdk为12
  • ¥15 vb6.0使用jmail接收smtp邮件并另存附件到D盘
  • ¥30 vb net 使用 sendMessage 如何输入鼠标坐标
  • ¥15 关于freesurfer使用freeview可视化的问题
  • ¥100 谁能在荣耀自带系统MagicOS版本下,隐藏手机桌面图标?
  • ¥15 求SC-LIWC词典!
  • ¥20 有关esp8266连接阿里云
  • ¥15 C# 调用Bartender打印机打印
  • ¥15 我这个代码哪里有问题 acm 平台上显示错误 90%,我自己运行好像没什么问题
  • ¥50 C#编程中使用printDocument类实现文字排版打印问题