java实现数据结构-数组中按次数进行循环右移
2015-02-03 21:26
585 查看
此类实现:
输入一串数据作为数组,然后输入循环右移次数。
根据循环右移次数,实现数组各个元素向右循环移动,
如: 数组为:5,8,7,6,9,3,2 循环右移次数为3,则循环右移后的结果是:9,3,2,5,8,7,6
实现该类有两种算法:
1>循环右移算法:每次循环右移之前把原数组最后一位放在临时变量中,循环右移结束后,再将临时变量的数据放在循环右移后的数组中
2>逆置法:先逆置整个原数组,然后分别逆置循环次数-1位标分隔的两个子数组
输入一串数据作为数组,然后输入循环右移次数。
根据循环右移次数,实现数组各个元素向右循环移动,
如: 数组为:5,8,7,6,9,3,2 循环右移次数为3,则循环右移后的结果是:9,3,2,5,8,7,6
实现该类有两种算法:
1>循环右移算法:每次循环右移之前把原数组最后一位放在临时变量中,循环右移结束后,再将临时变量的数据放在循环右移后的数组中
2>逆置法:先逆置整个原数组,然后分别逆置循环次数-1位标分隔的两个子数组
package 顺序表; import java.util.ArrayList; import java.util.Scanner; /** * @param args * @author 刘雁冰 * @date 2015-02-03 21:08 */ public class RightMoveOrderList { /* *此类实现: *输入一串数据作为数组,然后输入循环右移次数。 *根据循环右移次数,实现数组各个元素向右循环移动, *如: 数组为:5,8,7,6,9,3,2 循环右移次数为3,则循环右移后的结果是:9,3,2,5,8,7,6 * *实现该类有两种算法: *<1>循环右移算法:每次循环右移之前把原数组最后一位放在临时变量中,循环右移结束后,再将临时变量的数据放在循环右移后的数组中 *<2>逆置法:先逆置整个原数组,然后分别逆置循环次数-1位标分隔的两个子数组 */ static int [] order; static int [] times; /* * 循环右移算法 */ public void circleRightMove(int []move,int times){ int i,j,w; for(j=0;j<times;j++){ //原数组第一位存入临时变量w w=move[move.length-1]; for(i=move.length-2;i>=0;i--){ move[i+1]=move[i]; } //循环右移结束后临时变量w存入数组第一位 move[0]=w; } System.out.println("循环右移法的结果如下:"); for(i=0;i<move.length;i++){ if(i==move.length-1) System.out.print(move[i]); else System.out.print(move[i]+","); } } /* * 逆置法 * 逆置法中调用了swap()交换方法 */ public void inversion(int []inver,int times){ int i,m=0; int n=inver.length-1; //分别调用三次交换方法 swap(inver,0,n); swap(inver,0,times-1); swap(inver,times,n); System.out.println("逆置法交换后的结果是:"); for(i=0;i<inver.length;i++){ if(i==inver.length-1) System.out.print(inver[i]); else System.out.print(inver[i]+","); } System.out.println(); } public void swap(int []swap,int m,int n){ int i=m,j=n,temp; while(i<j){ temp=swap[i]; swap[i]=swap[j]; swap[j]=temp; ++i; --j; } } public static void main(String[] args) { // TODO Auto-generated method stub RightMoveOrderList rl=new RightMoveOrderList(); System.out.println("请输入数据组成数组,输入-1时结束输入"); ArrayList<Integer>list=new ArrayList<Integer>(); Scanner sc=new Scanner(System.in); int m=sc.nextInt(); while(m!=-1){ list.add(m); m=sc.nextInt(); } int []order=new int[list.size()]; for(int i=0;i<list.size();i++){ order[i]=list.get(i); } System.out.println("您输入的数组为:"); for(int i=0;i<order.length;i++){ if(i==order.length-1) System.out.print(order[i]); else System.out.print(order[i]+","); } System.out.println(); System.out.println("请输入循环右移次数:"); int times=sc.nextInt(); int []order2=new int[order.length]; for(int i=0;i<order.length;i++){ order2[i]=order[i]; } rl.inversion(order, times); rl.circleRightMove(order2, times); } }
相关文章推荐
- 程序员面试金典——解题总结: 9.14Java 14.6实现CircularAray类,支持类似数组的数据结构,这些数据结构可以高效地进行旋转
- 数据结构(java语言描述)-- 队列的循环数组实现
- Java数组反射实现动态的判断一个对象书否是数组,并且对数组进行拆包输出 。。
- Java数组反射实现动态的判断一个对象书否是数组,并且对数组进行拆包输出 。。
- 循环数组java实现
- JAVA实现数组队列,循环数组队列,链式队列
- Java 螺旋数组的实现方式-一个循环实现哦
- 数据结构复习:队列-Java数组实现
- java与数据结构(4)---java实现双向循环链表
- Java基础---基础加强---增强for循环、自动拆装箱及享元、枚举的作用、实现带有构造方法、透彻分析反射的基础_Class类、成员变量的反射、数组参数的成员方法进行反射、数组的反射应用
- java数组冒泡排序 面试即然忘记这种写法,只说了用二重循环实现,哎!重温下基础吧
- Java数组反射实现动态的判断一个对象书否是数组,并且对数组进行拆包输出 。。
- Java实现 找出数组中出现次数超过数组长度一半的元素
- Java基础---基础加强---增强for循环、自动拆装箱及享元、枚举的作用、实现带有构造方法、透彻分析反射的基础_Class类、成员变量的反射、数组参数的成员方法进行反射、数组的反射应用
- Java数组实现循环队列
- 使用数组实现栈和循环队列(JAVA语言)
- Java数组实现循环队列
- 数据结构复习:栈-Java数组实现
- 对一个数组进行螺旋式打印,java语言实现
- 数据结构循环队列,数组实现,循环队列中如果不使用数据项计数字段items,而是通过front和rear计算队列是否为空或满或队列个数,那会很复杂