#include<stdio.h> #include<malloc.h> typedef struct{ int elem[20]; int length; }SqList; int DeleteK(SqList a,int i,int k) { //从顺序存储结构的线性表a中删除第i个元素起的k个元素 //注意i的编号从0开始 int j; if(i<0||i>a->length-1||k<0||k>a->length-i) return 0; for(j=0;j<=k;j++) a->elem[j+i]=a->elem[j+i+k]; a->length=a->length-k; return 1; }
#include<stdio.h>
#include<malloc.h>
typedef struct{
int elem[20];
int length;
}SqList;
int DeleteK(SqList a,int i,int k)
{
//从顺序存储结构的线性表a中删除第i个元素起的k个元素
//注意i的编号从0开始
int j;
if(i<0||i>a->length-1||k<0||k>a->length-i) return 0;
for(j=0;j<=k;j++)
a->elem[j+i]=a->elem[j+i+k];
a->length=a->length-k;
return 1;
}
int main()
{
SqList p;
int m;
for(m=0;m<20;++m)
p->elem[m]=m;
p->length=20;
DeleteK(p,3,4);
for(m=0;m<p->length;++m)
printf("%d",p->elem[m]);
return 0;
}
从顺序存储结构的线性表a中删除第i个元素起的k个元素。为什么我的代码有问题?参数传递有问题,不要用引用
答案:2 悬赏:80
解决时间 2021-02-22 10:16
- 提问者网友:妖精ξ也會哭
- 2021-02-21 12:46
最佳答案
- 二级知识专家网友:承载所有颓废
- 2021-02-21 14:14
你的代码有问题
SqLIst a定义的不是指针
a->length不能这么用 你把所有的->都替换成点 例如a->length 换成 a.length
DeleteK这个函数貌似有问题
我自己写了个
int DeleteK(SqList &a, int i, int k)
{
//从顺序存储结构的线性表a中删除第i个元素起的k个元素
//注意i的编号从0开始
int j,l;
if (i < 0 || i > a.length - 1 || k < 0 || k > a.length - i) return 0;
for(j=0;j<k;j++)
{
for (l=i;l<a.length-1;l++)
{
a.elem[l]=a.elem[l+1];
}
a.length--;
}
return 1;
}
SqLIst a定义的不是指针
a->length不能这么用 你把所有的->都替换成点 例如a->length 换成 a.length
DeleteK这个函数貌似有问题
我自己写了个
int DeleteK(SqList &a, int i, int k)
{
//从顺序存储结构的线性表a中删除第i个元素起的k个元素
//注意i的编号从0开始
int j,l;
if (i < 0 || i > a.length - 1 || k < 0 || k > a.length - i) return 0;
for(j=0;j<k;j++)
{
for (l=i;l<a.length-1;l++)
{
a.elem[l]=a.elem[l+1];
}
a.length--;
}
return 1;
}
全部回答
- 1楼网友:茫然不知崩溃
- 2021-02-21 14:20
你好!
a->elem[j+i]=a->elem[j+i+k]; 这句,a->elem[j+i+k]; 到最后很可能溢出,超过你数组的范围就会报错,这样写不对,应该把后面的所有值一一移动到前面的空缺处
希望对你有所帮助,望采纳。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯