◆2.11② 设顺序表L中的数据元素递增有序。
试写一算法,将x插入到L的适当位置上,并保
持该表的有序性。
要求实现下列函数:
void InsertOrderList(SqList &L, ElemType
x)
顺序表类型定义如下:
typedef struct {
ElemType
*elem;
int length;
int listsize;
} SqList;
void InsertOrderList(SqList
&L, ElemType x)
// 在有序的顺序表 L 中保序插入数据元素 x
{
int
i=0,j; if(x>=L.elem[L.length-1])
L.elem[L.length]=x;//如果x大于表最后一个元素
,则直接插到最后面
else{ while(L.elem[i]<=x)
i++; //找到x的插入位置
for(j=L.length-1;j>=i;j--) L.elem[j+1]=L.elem[j] ;
L.elem[i]=x;
}
L.length++; //表长加1
}
◆2.12③ 设A=(a1,…,am)和B=(b1,…,bn)均为有序顺序表,
A'和B'分别为A和B中除去最大共同前缀后的子表(例如,
A=(x,y,y,z,x,z),B=(x,y,y,z,y,x,x,z),则两者中最大
的共同前缀为(x,y,y,z), 在两表中除去最大共同前缀后
的子表分别为A'=(x,z)和B'=(y,x,x,z))。若A'=B'=空表,
则A=B;若A'=空表,而B'≠ 空表,或者两者均不为空表,
且A'的首元小于B'的首元,则AB。试写一个比
较A和B大小的算法。(注意:在算法中,不要破坏原表A
和B,也不一定先求得A'和B'才进行比较)。
要求实现下列函数:
char Compare(SqList A, SqList B);
顺序表类型定义如下:
typedef struct {
ElemType
*elem;
int length;
int listsize;
} SqList;
char Compare(SqList A, SqList B)
{ int pa=A.length,pb=B.length,i=1,j=1;
if(A.elem[0]>B.elem[0]) return
'>'; //直接先由第一个元素判断谁大
if(A.elem[0]
'
else //如果第一个元素相同,则分以下情况
{ if(pa==pb)
{
while(i<=pa-1&&j<=pb-1)
{ if(A.elem[i]>B.elem[j]) return
'>'; //相对应的元素逐个比较
if(A.elem[i]
'
if(A.elem[i]==B.elem[j]) {i++;j++;} //直到末尾都相等,则输出“=”
}
return '=';
}
if(pa
{ while(i<=pa-1&&j<=pb-1)
{ if(A.elem[i]>B.elem[j]) return
'>';
if(A.elem[i]
'
if(A.elem[i]==B.elem[j])
{i++;j++;} //元素依然相同,i达到A表表长的限制,跳出
} //则 B表大于A表
return '
}
if(pa>pb)
{ while(i<=pa-1&&j<=pb-1)
{ if(A.elem[i]>B.elem[j]) return
'>';