1.从有序顺序表中删除其值在给定值s与t之间(要求s<t)的所有元素
如果s或t不合理或者顺序表为空则显示出错信息并退出运行。
bool Del_s_t2(SqList &L,ElemType s,ElemType t){
//删除有序顺序表工中值在给定值s与t之间的所有元素
int i,j;
if(s>=t|IL.length==0 )
return false;
for(i=0;i<L.length&&L.data[i]<s;i++);//寻找值≥s的第一个元素
if(i>=L.length)
return false;//1所有元素值均小于s,则返回
for(j=i;j<L.length&&L.data[j]<=t;j++);//寻找值>t的第一个元素
for(;j<L.length;i++,j++)
L.data[i]=L.data[j];//前移,填补被删元素位置
L.length=i+1;
return true;
}
2.从顺序表中删除其值在给定值s与t之间(包含s和t,要求s<t)的所有元素,如果s或t不合理或者顺序表为空则显示出错信息并退出运行。
bool Del_s_t(SqList &L,ElemType s,ElemType t){
//删除顺序表L中值在给定值s与t之间(要求s<t)的所有元素
int i, k=0;
if(L.length==01|s>=t)//线性表为空或s、t不合法,返回
return false;
for(i=0 ;i<L.length;i++){
if(L.data[i] >=s& &L.data[i]<=t)
k++;
else
L.data[i-k]=L.data[i];//当前元素前移k个位置
}
L.length-=k; //长度减小
return true;
}
3.删除有序顺序表中的相同的元素,使剩下的元素各不相同
bool Del_same(Sqllist &L){
if(L.length==0)
return false;
for(int i=0,j=1;j<=L.length;j++)
if(L.data[i]!=L.data[j])//比较是否有相同元素
L.data[++i]=L.data[j];
L.length=i+1;//顺序表长度
return true;
}
4.将两个有序顺序表合并成一个新的有序顺序表,并由函数返回结果顺序表。
代码如下:
bool Merge (SeqList A, SeqList B, SeqList &C){
//合并有序顺序表A与B成为一个新的有序顺序表C
if(A.length+B.length>C.maxSize)//大于顺序表的最大长度
return false;
int i=0, j=0, k=0;
while(i<A.length&&j<B.length){
//循环,两两比较,小
者存入结果表
if(A.data[i]<=B.data[j])
C.data[k++] =A.data[i++];
else
C.data[k++]=B.data[j++];
}
while(i<A.length)
//还剩一个没有比较完的顺序表
C.data[k++]=A.data[i++];
while(j<B.length)
C.data[k++]=B.data[j++];c.length=k+1;
return true;
}
5.已知在一维数组A[m+n]中依次存放着两个线性表(a1,a2,a3,...,am)和(b1,b2,b3,…,bn)。试编写一个函数,将数组中两个顺序表的位置互换,即将(b1,b2,b3,…,bn)放在( a1,a2,a3,...,am)的前面。
typedef int DataType;
void Reverse (DataType A[],int left,int right,int arraySize){
//逆转(aleft,aleft+1,aleft+2…, aright)为(aright,aright-1, …, aleft)
if(left>=right||right>=arraySize)
return;
int mid= (left+right)/2;
for(int i=0; i<=mid-left;i++){
DataType temp=A[left+i];
A[ left+i]=A[right-i];
A[right-i]=temp;
}
}
void Exchange (DataType A[],int m,int n,int arraySize){
/*数组 A[m+n]中,从0到m-1存放顺序表(al,a2,a3, …, am),从m到m+n-1存放顺序表(b1,b2,b3,…-, bn),算法将这两个表的位置互换*/
Reverse (A, 0, m+n-1,arraysize);
Reverse(A,0, n-1,arraysize);
Reverse(A, n, m+n-1,arraysize);
}