数据结构习题及答案

源代码在线查看: 5.18.c

软件大小: 52 K
上传用户: GUAIGUAICHENGTI
关键词: 数据结构
下载地址: 免注册下载 普通下载 VIP

相关代码

				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				   if(k%i==0&&n%i==0) round=i;
				 for(i=0;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;
				      }
				
				}
				
							

相关资源