本题要求实现递增顺序表的有序插入函数。L是一个递增的有序顺序表,函数Status ListInsert_SortedSq(SqList &L, ElemType e)用于向顺序表中按递增的顺序插入一个数据。
比如:原数据有:2 5,要插入一个元素3,那么插入后顺序表为2 3 5。
要考虑扩容的问题。
输入样例:
5
2 3 9 8 4
输出样例:
2 3 4 8 9
…
自定义函数部分:
//思路:判断顺序表是否为空,如果为空,则把该数据放在首位,表长加一。如果不为空,则先检查顺序表是否已经满了,满的话进行扩容操作,然后对数据进行比较,按顺序插入,表长加一。
//注意:起初顺序表为空,无法比较。插入时,可能是最大的,需要将其放在“末尾”加一的位置。顺序表表可能会满,满了要进行扩容。
Status ListInsert_SortedSq(SqList &L, ElemType e)
{
if(L.length==0)
//判断顺序表是否为空。如果为空,则把该数据放在首位,表长加一。。
{
*L.elem=e;
L.length++;
}
else
{
//如过不为空,则先检查顺序表是否已经满了。
while(L.length==L.listsize)
//满的话进行扩容操作。
{
L.elem=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));
if(!L.elem)
{
exit(OVERFLOW);
}
L.listsize+=LISTINCREMENT;
}
//对数据进行比较 ,按顺序插入,表长加一。
int i;
for(i=0;i<L.length;i++)
{
if(e<*(L.elem+i))
{
for(int j=L.length-1;j>=i;j--)
{
*(L.elem+j+1)=*(L.elem+j);
}
*(L.elem+i)=e;
break;
}
}
if(i>=L.length)
{
*(L.elem+L.length)=e;
}
L.length++;
}
}