顺序表、线性表练习

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+;
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]).data[k++] =A.data[i++];
	else
		C.data[k++]=B.data[j++];while(i<A.length)
	//还剩一个没有比较完的顺序表.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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值