目录
2.王道代码题:【2010统考真题】设将n(n>1)个整数存放到一维数组R中。设计一个在时间和空间两方面都尽可能高效的算法。将R中保存的序列循环左移p(0
其他-王道数据结构算法题-顺序表题,如下
顺序表-删除所有值为x的数据元素+删除值在给定值s与t之间所有元素
扫描二维码关注公众号,回复:
14318405 查看本文章
![](/qrcode.jpg)
1.王道代码题:线性表(a1,a2,a3,...,an)中的元素递增有序且按顺序存储于计算机内。要求设计一个算法,完成用最少的时间在表中查找数值为x的元素,若找到,则将其与后继元素位置相互交换,若没有找到,则将其插入表中并使表中元素仍递增有序。
代码实现:
//折半查找
#include<iostream>
using namespace std;
int a[10]={1,2,3,4,5,6,7,8,9};
int n=9;
void findd(int a[],int x)
{
int left,right,mid;
left=0,right=n-1;
while(left<=right)
{
mid=(left+right)/2;
if(a[mid]==x) break;
else if(a[mid]>x) right=mid-1;
else left=mid+1;
}
if(a[mid]==x&&mid!=n-1)
{
int t=a[mid];
a[mid]=a[mid+1];
a[mid+1]=t;
}
if(right<left){
int i;
for(i=n-1;i>right;i--)
{
a[i+1]=a[i];
}
a[i+1]=x;
}
}
int main()
{
int i;
for(i=0;i<9;i++) cout<<a[i]<<" ";
cout<<endl;
findd(a,7);
for(i=0;i<9;i++) cout<<a[i]<<" ";
cout<<endl;
return 0;
}
找到,其与后继元素位置互换
int a[10]={1,2,3,4,5,7,8,9,10};
int main()
{
int i;
for(i=0;i<9;i++) cout<<a[i]<<" ";
cout<<endl;
findd(a,6);
for(i=0;i<10;i++) cout<<a[i]<<" ";
cout<<endl;
return 0;
}
没找到,则将其值插入表中 ,表仍然递增有序。
2.王道代码题:【2010统考真题】设将n(n>1)个整数存放到一维数组R中。设计一个在时间和空间两方面都尽可能高效的算法。将R中保存的序列循环左移p(0<p<n)个位置,即将R中的数据由(X0,X1,...,Xn-1)变换为(Xp,Xp+1,...,Xn-1,X0,X1,...,Xp-1)。
代码实现:
//循环左移
#include<iostream>
using namespace std;
int a[7]={1,2,3,4,5,6,7};
int n=7;
void reverse(int a[],int l,int r)
{
for(int i=l;i<=(l+r)/2;i++)
{
int t=a[i];
a[i]=a[(l+r)-i];
a[(l+r)-i]=t;
}
}
void prin(int a[])
{
for(int i=0;i<n;i++) cout<<a[i]<<" ";
cout<<endl;
}
void change(int a[],int left)
{
cout<<"全部逆置"<<endl;
reverse(a,0,n-1);
prin(a);
cout<<"前n-left个逆置"<<endl;
reverse(a,0,n-left-1);
prin(a);
cout<<"后left个逆置"<<endl;
reverse(a,n-left,n-1);
prin(a);
}
int main()
{
cout<<"一开始数组"<<endl;
prin(a);
change(a,3);
return 0;
}
循环左移3
循环左移6
int main()
{
cout<<"一开始数组"<<endl;
prin(a);
change(a,6);
return 0;
}