⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 5.18.c

📁 部分高校使用anyview编程测试数据结构习题,此代码为数据结构题集(c语言版)严蔚敏版的课后习题答案.专门提供给在anyview上运行,全部为通告代码
💻 C
字号:
5.18⑤  试设计一个算法,将数组A中的元素
A[0..n-1]循环右移k位,并要求只用一个元素
大小的附加存储,元素移动或交换次数为O(n)。

要求实现以下函数:
void Rotate(Array1D &a, int n, int k);

一维数组类型Array1D的定义:
typedef ElemType Array1D[MAXLEN];
void Rotate(Array1D &a, int n, int k)
/* a[n] contains the elements,          */
/* rotate them right circlely by k sits */
{  
 int round,pos1,pos2,i,temp;
 for(i=1;i<=k;i++)
   if(k%i==0&&n%i==0) round=i;
 for(i=0;i<round;i++)
    {
     pos1=pos2=(n+(i-k)%n)%n;
     temp=a[pos1];
     for(;;)
       {
       if(pos1!=i)
         {
          pos1=(n+(pos1-k)%n)%n;
          a[pos2]=a[pos1];     //a[pos1]存放即将替换a[pos2]的数值
          pos2=pos1;
           }
       else break;
       }
     a[pos1]=temp;
      }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -