c语言简单程序,有一段线性表插入的函数,请高手详细解析,十分感谢

status Insertlist(Sqlist &L,int i,Elemtype e){
Elemtype *p; //在这里定义了一个*p的指针,为什么不是结构体
int j;
if(L.length==L.listsize)
printf("内存分配空间已不够,请重新分配:\n");
p=L.elem;
L.elem=(Elemtype *)realloc(p,(LISTSIZE+L.listsize)*sizeof(Elemtype));
//这段代码求realloc 后面的意思,最好从内存处理上解
if(!p){
printf("分配空间失败");
exit(0);
}
L.elem=p;
L.length++;
L.listsize=L.listsize+LISTSIZE_INCE;
if(i<1||i>L.length){ //这里以前遇到过好多次,i怎么可能又下于1又大于L.length,如果i大于L.length的话那不就直接可以判定为错误了吗
printf("插入位置输入不正确,请重新操作:\n");
return 0;
}
else{
for(j=L.length-1;j>=i;j--)
L.elem[j+1]=L.elem[j];
L.elem[i]=e;
return 1;
}
return 1;
}

这是数据结构中标准的线性表插入程序,但是它不是真正的c语言,而是类c哦。
status Insertlist(Sqlist &L,int i,Elemtype e){
Elemtype *p; //在这里定义了一个*p的指针,目的是找到链表中每个结点的首地址就可以了,不用找一个结点的所用地址啊
int j;
if(L.length==L.listsize) //L.listsize是代表的表的上限值,是事先设定好的
printf("内存分配空间已不够,请重新分配:\n");
p=L.elem;//这条语句应该写在下一条语句的后面,也就是分配后的地址给到临时指针变量p中
L.elem=(Elemtype *)realloc(p,(LISTSIZE+L.listsize)*sizeof(Elemtype));
//这条语句是想一下子分配足够大的线性表空间,realloc在C中不认可的,实现时还要用malloc,这里只是设计实现的,而分配成功后L.elem只是得到分配单元的首地址,不成功则是空值。
if(!p){
printf("分配空间失败");
exit(0);
}
L.elem=p;//这条语句应该没用吧
L.length++;//这条语句应该放在成功插入的后面,也就是return 1;语句之前才对
L.listsize=L.listsize+LISTSIZE_INCE;
if(i<1||i>L.length){ //这里用到的是运算符||,代表是“或”,也就是说i<1代表输入时误操作造成,而i>L.length代表输入的位置超出表中数据的个数,位置找不到。
printf("插入位置输入不正确,请重新操作:\n");
return 0;//代表插入失败
}
else{
for(j=L.length-1;j>=i;j--)//从i到最后表尾顺次下移,腾出i的位置
L.elem[j+1]=L.elem[j];
L.elem[i]=e;//将数据插入到i的位置中
return 1;//代表插入成功
}
return 1;
}追问

你说的很多地方不对,抱歉,不过还是十分感谢

温馨提示:答案为网友推荐,仅供参考
相似回答