顺序表插入问题讨论
# include<stdio.h># include<stdlib.h>
# define ListInitSize 100
# define Increment 10
typedef struct
{
int * elem;
int length;
int ListSize;
}SqList;
SqList InitSq(SqList L)
{
L.elem=(int *)malloc(ListInitSize*sizeof(int));
if(!L.elem) exit(0);
else
{
L.length=0;
L.ListSize=ListInitSize;
return L ;
}
}
int InsertSq(SqList L,int i,int e)
{//在顺序表L的第i个位置前插入元素e
int *p,*q;
if(i<1||i>L.length+1) return 0;//插入位置错误
if(L.length>=L.ListSize)
{
L.elem=(int *)realloc(L.elem,(L.ListSize+Increment)*sizeof(int));
if(!L.elem) exit(0);
else
L.ListSize +=Increment;
}
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);p>=q;--p)
*(p+1)=*p;//插入位置之后的元素右移
*q=e;
++L.length;
}
void main()
{
int i;
SqList L;
L=InitSq(L);
for(i=1;i<=5;i++)
{
L.elem[i-1]=i;
++L.length;
}
for(i=0;i<L.length;i++)
printf("%2d",L.elem[i]);
printf("\n");
InsertSq(L,1,6);
InsertSq(L,3,7);
InsertSq(L,8,8);
for(i=0;i<L.length;i++)
printf("%2d",L.elem[i]);
}
为什么运行结果是 1 2 3 4 5
6 1 7 2 3
而不是1 2 3 4 5
6 1 7 2 3 4 5 8