林臻臻 2022-04-18 13:25 采纳率: 50%
浏览 59
已结题

C语言顺序表插入函数无法调用

/完成顺序表的插入和删除操作
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
#define M 100
#define ERROR 0
#define OK 1

//定义一个复杂节点的顺序表

typedef struct
{
int elem[M]; //顺序表的元素
int length; //顺序表当前长度

}SqList; //表的结构的定义
int InitList(SqList &L);
int CreatList(SqList &L, int n);
int Listin(SqList &L,int i, int e);
int ListDelete(SqList &L,int i);

int main()
{
SqList L1; //生成一个顺序表L1
InitList(L1);//对顺序表L1进行初始化
int j;
printf("原顺序表:\n");
CreatList(L1,50);

int e;
e=101; 
int i=1;

printf("\n插入后:\n");    
Listin(L1,i,e);
printf("\n%d\n",L1.elem[0]);



printf("\n删除后:\n");
ListDelete(L1,6);


printf("\n不断测试!!!");  

}

//传一个参数,并返回一个值
int InitList(SqList &L)
//初始化并构造一个空的顺序表
{
memset(L.elem,0,sizeof(L)); //初始化数据为0
L.length=0; //空表长度为零
return OK;
}

int CreatList(SqList &L,int n) //创建顺序表函数,并初始化前n个数据
{
if(n<0||n>M) //判断n值是否合法
return ERROR;
int i;
for(i=0;i<n;i++) //初始化数据
{

    L.elem[i]=i;
    printf("%5d",L.elem[i]);
    L.length++; 
}
return OK;

}
int Listin( SqList &L, int i, int e)//在顺序表的第i个位置前插入一个新的元素e
{
int j;

if(i<1||i>L.length+1)
{
   printf("位置无效!\n");
   return ERROR;          //判断i值是否合法
}

if(L.length>=M)
   printf("当前存储空间已满!\n");
   return ERROR; //当前存储空间已满

for(j=L.length;j>=i;j--)
    L.elem[j]=L.elem[j-1]; //将元素插入的第i个元素及之后的位置后移一个单位
   
L.elem[i-1]=e; //将新元素放入第i个位置
L.length++;    //表长增加1

printf("\n%d\n",L.length); 

for(j=0;j<L.length;j++) 
{
    printf("%5d ",L.elem[j]);
}

return OK; 
    

}
int ListDelete(SqList &L, int i)//删除顺序表中的第i个数据元素
{
if((i<1)||(i>L.length))
{
printf("位置无效!\n");
return ERROR; //判断i值是否合法
}
int j;
for(j=i;j<=L.length-1;j++)
{
L.elem[j-1]=L.elem[j]; //被删除的元素往后移一个单位
}
L.length--; //顺序表的长度减1

for(int n=0;n<L.length;n++)
{
    printf("%5d",L.elem[n]);
}
return OK;

}

为什么Listin无法调用

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-04-18 14:39
    关注

    Listin()函数里,if(L.length>=M)
    printf("当前存储空间已满!\n");
    return ERROR; //当前存储空间已满
    少了 {}

    int Listin(SqList& L, int i, int e)//在顺序表的第i个位置前插入一个新的元素e
    {
        int j;
    
        if (i<1 || i>L.length + 1)
        {
            printf("位置无效!\n");
            return ERROR;          //判断i值是否合法
        }
    
        if (L.length >= M){ //修改
            printf("当前存储空间已满!\n");
            return ERROR; //当前存储空间已满
        }//修改
    
        for (j = L.length; j >= i; j--)
            L.elem[j] = L.elem[j - 1]; //将元素插入的第i个元素及之后的位置后移一个单位
    
        L.elem[i - 1] = e; //将新元素放入第i个位置
        L.length++;    //表长增加1
    
        printf("\n%d\n", L.length);
    
        for (j = 0; j < L.length; j++)
        {
            printf("%5d ", L.elem[j]);
        }
        return OK;
    
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月26日
  • 已采纳回答 4月18日
  • 创建了问题 4月18日

悬赏问题

  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程