![]() |
#2
寒风中的细雨2012-10-12 08:54
|

Status ListInsert_Sq(SqList &sqlist, int i, ElemType e)
{
int *newbase;
if(!(sqlist)||i<0||i>sqlist.length+1) return ERROR;
if(sqlist.length>=sqlist.listsize)
{
newbase=(ElemType*)realloc(sqlist.elem,(sqlist.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)
exit(OVERFLOW);
sqlist.elem=newbase;
sqlist.listsize+=LISTINCREMENT;
}//if
for(int j=sqlist.elem[sqlist.length-1]; j>=sqlist.elem[i-1]; j--)
sqlist.elem[j+1]=sqlist.elem[j];
sqlist.elem[j]=e;
sqlist.length+=1;
return OK;
}//ListInsert_Sq
补充:{
int *newbase;
if(!(sqlist)||i<0||i>sqlist.length+1) return ERROR;
if(sqlist.length>=sqlist.listsize)
{
newbase=(ElemType*)realloc(sqlist.elem,(sqlist.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)
exit(OVERFLOW);
sqlist.elem=newbase;
sqlist.listsize+=LISTINCREMENT;
}//if
for(int j=sqlist.elem[sqlist.length-1]; j>=sqlist.elem[i-1]; j--)
sqlist.elem[j+1]=sqlist.elem[j];
sqlist.elem[j]=e;
sqlist.length+=1;
return OK;
}//ListInsert_Sq
typedef int Status;
typedef int ElemType;
typedef struct
{
ElemType *elem;
int length, listsize;
}SqList;
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define OK 1
#define OVERFLOW -2
这是教材上的算法转化成的C语言编码,我只是想不明白为什么要有第二个if判断。
理由如下:
sqlist的成员中,listsize恒>=length,其中length初始化为0,只有在添加数据或插入数据时会增大。而添加或插入数据等操作是在listsize满足条件时才进行的,这些操作完成后length才会增大(或减小),即length必定不会大于listsize。
我想问:有没有情况使得length>listsize?