关于线性表(顺序表)插入的一个小小问题
程序代码:
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补充:
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?