设顺序表va中的数据元素递增有序。试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性。
int orderInsert ( PDSeqList Dseq, int key)
{
int i;
for ( i = 0 ; i < Dseq-> length; i++ )
{
if ( Dseq-> elem[ i] > key)
{
break ;
}
}
Insert ( Dseq, i, key) ;
return true;
}
设A和B都是顺序,判断A和B的大小
int Maxlist ( PDSeqList PseqA, PDSeqList PseqB)
{
int i = 0 ;
while ( i < PseqA-> length&& i < PseqB-> length&& PseqA-> elem[ i] == PseqB-> elem[ i] )
{
i++ ;
}
if ( PseqA-> length == PseqB-> length&& i == PseqA-> length)
{
return 0 ;
}
else if ( i == PseqA-> length)
{
return - 1 ;
}
else if ( i == PseqB-> length)
{
return 1 ;
}
return PseqA-> elem[ i] - PseqB-> elem[ i] ;
}
实现顺序表的就地逆置
void Reverse ( PDSeqList Pseq)
{
int tmp;
for ( int i = 0 , j = Pseq-> length - 1 ; i < j; i++ , j-- )
{
tmp = Pseq-> elem[ i] ;
Pseq-> elem[ i] = Pseq-> elem[ j] ;
Pseq-> elem[ j] = tmp;
}
}
已知A,B和C为三个递增有序的线性表,现要求对A表作如下操作:删去那些既在B表中出现又在c表中的元素
void deleteEqual ( PDSeqList psA, PDSeqList psB, PDSeqList psC)
{
int j = 0 ;
int k = 0 ;
bool flag = false;
for ( int i = 0 ; i < psA-> length; )
{
flag = false;
for ( ; j < psB-> length; j++ )
{
if ( psB-> elem[ j ] == psA-> elem[ i ] )
{
DeletePos ( psA, i) ;
flag = true;
break ;
}
else if ( psB-> elem[ j ] > psA-> elem[ i ] )
{
break ;
}
}
for ( ; k < psC-> length; k++ )
{
if ( psC-> elem[ k ] == psA-> elem[ i ] )
{
DeletePos ( psA, i) ;
flag = true;
break ;
}
else if ( psC-> elem[ k ] > psA-> elem[ i ] )
{
break ;
}
}
if ( ! flag)
{
i++ ;
}
}
}
假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并成一个按元素值递减有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原表(即A表和B表)的结点空间构造C表。
void AUB ( PDSeqList psC, PDSeqList psA, PDSeqList psB)
{
int i = 0 ;
int j = 0 ;
int k = 0 ;
while ( i < psA-> length&& j < psB-> length)
{
if ( psA-> elem[ i ] < psB-> elem[ j ] )
{
if ( k== 0 || psA-> elem[ i] > psC-> elem[ k- 1 ] )
Insert ( psC, k++ , psA-> elem[ i ] ) ;
i++ ;
}
else
{
if ( k == 0 || psB-> elem[ i ] > psC-> elem[ k - 1 ] )
Insert ( psC, k++ , psB-> elem[ j ] ) ;
j++ ;
}
}
while ( i < psA-> length)
{
if ( k == 0 || psA-> elem[ i ] > psC-> elem[ k - 1 ] )
Insert ( psC, k++ , psA-> elem[ i ] ) ;
i++ ;
}
while ( j < psB-> length)
{
if ( k == 0 || psB-> elem[ i ] > psC-> elem[ k - 1 ] )
Insert ( psC, k++ , psB-> elem[ j ] ) ;
j++ ;
}
}
下一篇链表(一)------单链表