(部分基于之前的代码)
1.设顺序表va中的数据元素递增有序。
试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性。
int InsertSort(PDSeqList pl,ELEM_TYPE val)
{
if(pl == NULL)
{
return false;
}
int index = 0;
for(int i = 0; i < pl->cursize; ++i)
{
if(pl->elem[i] > val)
{
index = i;
break;
}
}
//InsertPos(pl,index,val);
if(IsFull(pl))
{
resize(pl);
}
for(int i = pl->cursize -1; i >= index; i--)
{
pl->elem[i+1] = pl->elem[i];
}
pl->elem[index] = val;
pl->cursize++;
return true;
}
2.试写一算法,实现顺序表的就地逆置,即利用原表的存储空间将线性表 逆置为
void Reverse(PDSeqList pl)
{
if(pl == NULL)
{
return ;
}
for(int i = 0; i < pl->cursize/2; i++)
{
int tmp = pl->elem[i];
pl->elem[i] = pl->elem[pl->cursize - 1 - i];
pl->elem[pl->cursize - 1 - i] = tmp;
}
}
3.两个顺序表递增有序,执行 C=AUB,算法时间复杂度要求为O(n+m)
(A,B这两个顺序表只允许遍历一遍);
void Merge(PDSeqList pa,PDSeqList pb,PDSeqList pc)
{
if(pa == NULL || pb == NULL || pc == NULL)
{
return 0;
}
int indexa = 0;
int indexb = 0;
int indexc = 0;
while(indexa < pa->cursize && indexb < pb->cursize)
{
if(pa->elem[indexa] <= pb->elem[indexb])
{
InsertPos(pc,indexc++,pa->elem[indexa]);
indexa++;
}else
{
InsertPos(pc,indexc++,pb->elem[indexb]);
indexb++;
}
}
if(indexa == pa->cursize)
{
for(int i = indexb, i < pb->cursize; ++i)
{
InsertPos(pc,indexc++,pb->elem[i]);
}
}
if(indexb == pb->cursize)
{
for(int i = indexa, i < pa->cursize; ++i)
{
InsertPos(pc,indexc++,pa->elem[i]);
}
}
}