顺序表中元素的移动
2018-02-11 23:00
183 查看
例一:设数据集合Date中有若干个整型数据;Date={10,20,30,40,50,60,70};
要求:将第一个数据移动至顺序表最后
a>覆盖式移动:通过Date
=Date[n+1]的方式将元素整体前移,最后给最够一个元素赋值为第一个数值的值,完成元素移动。void MoveArray(int Date[],int n)
{
int x,j;
x=Date[0];
for(j=0;j<n-1;j++)
Date[j]=Date[j+1];
Date[j]=x;
}b>交换式移动:通过设置中间变量,完成Date
与Date[n-1]数值交换,完成元素移动。void MoveArrary(int Date[],int n)
{
int x,j;
for(j=0;j<n-1;j++){
x=Date[j];
Date[j]=Date[j+1];
Date[j+1]=x;
}
}例二:设数据集合Date{10,20,30,40,50,60,70};
要求:将数据集合的所有的值逆置void MoveArrary(int Date[],int n)
{
int x,j;
for(j=0;i<n/2;j++){
x=a[i];
a[i]=a[n-i-i];
a[n-i-1]=x;
}
}例三:设有数据集合Date={10,20,30,40,50,6,70,80,90};
要求:将数据的前m个元素和后k个元素交换(m,k均大于0)
如m=3;k=6;
分析:
方法一:进行m次,将Date[0]移动至末尾
void MoveArray{int Date[],int n,int m}
{
int i,j,x;
for(i-0;i<m;i++){
x=Date[0];
for(j=0;j<n-1;j++)
Date[j]=Date[n+1];
Date[j]=x;
}
} 方法二:将数组进行三次逆置:
第一次逆置Date[0]~Date[n-1];
第二次逆置Date[0]~Date[m-1]
第三次逆置Date[m]~Date[n-1]
例四:设数据集合Date
,要求将所有奇数元素移动到偶数元素之前
方法一:遇到偶数,将偶数移动至末尾 void MoveArray(int Date[],n)
{
int i,j,x;
for(i=0;i<n-1;i++){
if(a[i]%2==0){
for(j=i,x=a[i];i<n-1;j++)
a[j]=a[j+1];
a[j]=x;
}
}
}
方法二:利用选择排序思想,遍历整个数组,如果是奇数不做处理,若是偶数,选择离其最近的奇数交换void MoveArray(int Date[],int n)
{
int i,j,x;
for(i=0;i<n-1;i++)
if(Date[i]%2==0){
for(j=i+1;j<n&&(a[j]%2!=1);j++);
x=a[i];
a[i]=a[j];
a[j]=x;
}
}方法三:利用冒泡排序思想void MoveArrar(int Date[],n)
{
int i,j,x;
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++){
if(a[j]%2==0&&a[j+1]%2){
x=a[j];
a[j]=a[j+1];
a[j+1]=x;
}
}
}
要求:将第一个数据移动至顺序表最后
a>覆盖式移动:通过Date
=Date[n+1]的方式将元素整体前移,最后给最够一个元素赋值为第一个数值的值,完成元素移动。void MoveArray(int Date[],int n)
{
int x,j;
x=Date[0];
for(j=0;j<n-1;j++)
Date[j]=Date[j+1];
Date[j]=x;
}b>交换式移动:通过设置中间变量,完成Date
与Date[n-1]数值交换,完成元素移动。void MoveArrary(int Date[],int n)
{
int x,j;
for(j=0;j<n-1;j++){
x=Date[j];
Date[j]=Date[j+1];
Date[j+1]=x;
}
}例二:设数据集合Date{10,20,30,40,50,60,70};
要求:将数据集合的所有的值逆置void MoveArrary(int Date[],int n)
{
int x,j;
for(j=0;i<n/2;j++){
x=a[i];
a[i]=a[n-i-i];
a[n-i-1]=x;
}
}例三:设有数据集合Date={10,20,30,40,50,6,70,80,90};
要求:将数据的前m个元素和后k个元素交换(m,k均大于0)
如m=3;k=6;
分析:
方法一:进行m次,将Date[0]移动至末尾
void MoveArray{int Date[],int n,int m}
{
int i,j,x;
for(i-0;i<m;i++){
x=Date[0];
for(j=0;j<n-1;j++)
Date[j]=Date[n+1];
Date[j]=x;
}
} 方法二:将数组进行三次逆置:
第一次逆置Date[0]~Date[n-1];
第二次逆置Date[0]~Date[m-1]
第三次逆置Date[m]~Date[n-1]
例四:设数据集合Date
,要求将所有奇数元素移动到偶数元素之前
方法一:遇到偶数,将偶数移动至末尾 void MoveArray(int Date[],n)
{
int i,j,x;
for(i=0;i<n-1;i++){
if(a[i]%2==0){
for(j=i,x=a[i];i<n-1;j++)
a[j]=a[j+1];
a[j]=x;
}
}
}
方法二:利用选择排序思想,遍历整个数组,如果是奇数不做处理,若是偶数,选择离其最近的奇数交换void MoveArray(int Date[],int n)
{
int i,j,x;
for(i=0;i<n-1;i++)
if(Date[i]%2==0){
for(j=i+1;j<n&&(a[j]%2!=1);j++);
x=a[i];
a[i]=a[j];
a[j]=x;
}
}方法三:利用冒泡排序思想void MoveArrar(int Date[],n)
{
int i,j,x;
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++){
if(a[j]%2==0&&a[j+1]%2){
x=a[j];
a[j]=a[j+1];
a[j+1]=x;
}
}
}
相关文章推荐
- 已知一个几乎有序的数组,几乎有序是指,如果把数组排好顺序的话,每个元素移动的距离可以不超过k,并且k相对于数组来说比较小。请选择一个合适的排序算法针对这个数据进行排序。 给定一个int数组A,同时给定
- 顺序表中的元素移动
- 给定一个数组nums,写一个函数将所有的值移动0到最后,同时保持非零元素的相对顺序不变
- 两个select之间的元素互相移动并保持顺序
- 长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法删除线性表中所有值为X的元素
- 元素出栈,入栈顺序的合法性。如入栈的序列(1,2,3,4,5)。出栈序列为(4,5,3,2,1)
- 【原】[webkit移动开发笔记]之无法自动播放的audio元素
- 线性表应用--根据首元素大小移动其他元素到相应位置
- 移动项目开发笔记(改变页面JavaScript加载时的执行顺序(zt))
- 标签元素和标签属性的加载顺序 待整理
- Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
- 元素上下移动
- 顺序表应用1:多余元素删除之移位算法
- javascript实现把指定元素移动到第一位
- Android开发——为移动的Paint元素指定图片的方法
- 一很简单的实现文章顺序上下互换移动的sql语句
- JavaScript实现拖拽元素对齐到网格(每次移动固定距离)
- Java中对List集合内的元素进行顺序、倒序、随机排序的示例代码
- Java面试题:有数组a[n],用java代码将数组元素顺序颠倒
- 8.10 将一个5X5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放),写一函数实现之。用main函数调用。