c语言中,有多少具有删除功能的函数或语句?多写几个?比如,deline();

如题所述

void Insert_list(Sqlist &L,int pos,ElemType e)//在POS处插入e
{
int i;
if(pos < 1 || pos > L.length+1)
printf("The num is out!");

L.elem = (ElemType *)realloc(L.elem,(++L.length)*sizeof(ElemType));
//问题很绕主要就出在length你刚开始就加了1

if(pos == L.length)
L.elem[L.length-1] = e;
else
{
i = L.length - 2;
while(i != pos - 2) {
L.elem[i+1] = L.elem[i];
i--;
}
L.elem[++i] = e;
}
}

如果修改如下,是不是更容易理解:
void Insert_list(Sqlist &L,int pos,ElemType e)//在POS处插入e
{
int i;
if(pos < 1 || pos > L.length+1)
printf("The num is out!");

L.elem = (ElemType *)realloc(L.elem,(L.length + 1)*sizeof(ElemType));

if(pos == L.length + 1) //如果为之前的长度+1
L.elem[L.length] = e; //那么直接插在最后
else
{
i = L.length - 1; //否则从之前的最后一个元素开始遍历,也就是之前的长度-1的位置开始
while(i != pos - 2) { //找到pos-2的位置,其实是找pos-1的位置,即插入位置,但是为了移动元素,必须到pos-2,因为pos-1处的元素也需要向后移动,如果是到pos-1的话,那么pos-1处的元素将丢失
L.elem[i+1] = L.elem[i];
i--;
}
L.elem[++i] = e;//最终在pos-1处插入元素
}
L.length++;//最后再让长度加1
}

这样写似乎比较容易理解,先增加长度会使问题复杂化
测试前提:showList中i<L.length而不是L.length+1
测试样例
int main()
{
Sqlist L;
Init_list(L);
Insert_list(L,1,1);
Insert_list(L,1,2);
Insert_list(L,2,3);
Insert_list(L,4,4);
Insert_list(L,3,5);
Show_list(L);
}
测试结果
2 3 5 1 4 ,没有问题
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-11-24
delete本回答被网友采纳
相似回答