码迷,mamicode.com
首页 > 编程语言 > 详细

数据结构学习-数组A[m+n]中依次存放两个线性表(a1,a2···am),(b1,b2···bn),将两个顺序表位置互换

时间:2018-01-16 00:35:37      阅读:260      评论:0      收藏:0      [点我收藏+]

标签:元素   学习   逆置   插入   ··   顺序表   实现   nbsp   hang   

将数组中的两个顺序表位置互换,即将(b1,b2···bn)放到(a1,a2···am)前边。

解法一:

将数组中的全部元素(a1,a2,···am,b1,b2,···bn)原地逆置为(bn,bn-1,···b1,am,am-1···a1),再对前n个元素和后m个元素分别逆置,得到(b1,b2···bn,a1,a2···am),从而实现位置互换。

代码:

void Reverse(int a[],int left,int right,int arraySize)
{//逆转(aleft,aleft+1,aleft+2···,aright)为(aright,aright-1,···,aleft)
    if(left>=right||right>=arrySize)
      return;
    int mid=(left+right)/2;
    for(int i=0;i<=mid-left;i++)
    {
        int temp=A[left+i];
        A[left+i]=A[right-i];
        A[right-i]=temp;
    }
}        

void Exchange(int A[],int m,int n,int arraySize)
{
  Reverse(A,0,m+n-1,arrySize);
  Reverse(A,0,n-1,arrySize);   
  Reverse(A,n,m+n-1,arrySize); 
}

 

 

解法二:

借助辅助数组实现。

创建大小m的数组S,将A中前m个整数依次暂存在S中,同时将A中后n个元素左移,再将S中暂存的依次放回A中的后续单元。

void Exchange(int A[],int m,int n)

{

  int S[m],i;
  for(i=0;i<m;i++)//将前m个暂存至S
      S[i]=A[i];
  for(i=0;i<n;i++)//将后n个移到前面
    A[i]=A[m+i];
  for(i=0;i<m;i++)//将S中暂存的依次插入后面
    A[n+i]=S[i];
}

 

数据结构学习-数组A[m+n]中依次存放两个线性表(a1,a2···am),(b1,b2···bn),将两个顺序表位置互换

标签:元素   学习   逆置   插入   ··   顺序表   实现   nbsp   hang   

原文地址:https://www.cnblogs.com/wyloving/p/8290047.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!