java实现数据结构-线性表-顺序表,实现插入,查找,删除,合并功能
package 顺序表; import java.util.ArrayList; import java.util.Scanner; public class OrderList { /** * @param args * @author 刘雁冰 * @2015-1-31 21:00 */ /* * (以下所谓"位置"不是从0开始的数组下标表示法,而是从1开始的表示法.) * (如12,13,14,15,16数据中,位置2上的数据即是13) * * 利用JAVA实现数据结构-线性表-顺序表 * 实现插入,查找,删除,合并等功能 * 插入:输入位置,返回该位置上的数据值 * 查找:输入查找的数据值,返回该数据值在顺序表中的位置 * 删除:输入要删除的位置,返回删除后的顺序表结果 * 合并:输入两组数据,并将两组数组按照升序结果合并在一起输出。 * 若两组数据中有重复的数值,在合并后的顺序表中结果唯一,保证无重复值 */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("输入整型数字作为顺序表,输入-1结束输入过程:"); Scanner sc=new Scanner(System.in); int m=sc.nextInt(); ArrayList<Integer>list=new ArrayList<Integer>(); while(m!=-1){ list.add(m); m=sc.nextInt(); } int a[]=new int[list.size()]; for (int i=0;i<list.size();i++){ a[i]=list.get(i); } System.out.println("********************请选择选项,确定要执行的操作:*******************************************"); System.out.println("********************选项--1:在指定位置上插入数据 *******************************************"); System.out.println("********************选项--2:根据数据查找第一次出现该数据的位置 ******************************"); System.out.println("********************选项--3:根据输入的位置,删除该位置上的数据 ******************************"); System.out.println("********************选项--4:输入两组数组,并将两组数组按照升序组合在一起 *********************"); int n=sc.nextInt(); OrderList order=new OrderList(); switch(n){ case 1:{ System.out.println("请输入要插入的位置:"); int insertP=sc.nextInt(); System.out.println("请输入要插入该位置的值:"); int insertN=sc.nextInt(); order.ListInsert(list, insertP, insertN); break; } case 2:{ System.out.println("请输入要查找的数据"); int searchP=sc.nextInt(); System.out.println("第一次出现该数据所在的位置是:"); System.out.println(order.ListSeach(a,searchP)+"号位置"); break; } case 3:{ System.out.println("请输入要删除的位置:"); Scanner delete=new Scanner(System.in); int deleteP=delete.nextInt(); order.ListDelete(a, deleteP); break; } case 4:{ System.out.println("请输入第一个数组,按-1结束输入"); Scanner sc1=new Scanner(System.in); int num1=sc1.nextInt(); ArrayList<Integer>list1=new ArrayList<Integer>(); while(num1!=-1){ list1.add(num1); num1=sc1.nextInt(); } int la[]=new int[list1.size()]; for(int i=0;i<list1.size();i++){ la[i]=list1.get(i); } System.out.println("请输入第二个数组,按-1结束输入"); Scanner sc2=new Scanner(System.in); int num2=sc2.nextInt(); ArrayList<Integer>list2=new ArrayList<Integer>(); while(num2!=-1){ list2.add(num2); num2=sc2.nextInt(); } int lb[]=new int[list2.size()]; for(int i=0;i<list2.size();i++){ lb[i]=list2.get(i); } order.ListMerge(la, lb); break; } default:{ System.out.println("输入有误!"); System.out.println(); System.out.print("请重新"); order.main(null); break; } } } /* * 插入方法 * insertPoint:插入位置 * insertValue:插入数值 * ArrayList list:将输入的数据链表传递过来 * int []a:获取list链表值并且保存在a数组中,作为结果输出 */ public void ListInsert(ArrayList list,int insertPoint,int insertValue){ int j; if(insertPoint<1||insertPoint>list.size()){ System.out.println("插入位置错误!"); } list.add(insertPoint-1,insertValue); Object []a=new Object[list.size()]; for(int i=0;i<list.size();i++){ a[i]=list.get(i); } System.out.println("插入后的结果如下:"); //结果消除最后一个数值的,符号 for(int i=0;i<a.length;i++){ if(i==a.length) System.out.print(a[i]); else System.out.print(a[i]+","); } } /* * int []a:传递main()方法中构造好的数组 * searchPoint:要查找的数值的位置 */ public int ListSeach(int []a,int searchPoint){ int i=0; while(i<=a.length&&a[i]!=searchPoint){ i++; } if(i<=a.length) return i+1; //返回的是位置,非数组下标 else return 0; } /* * int []a:传递main()方法中构造好的数组 * deletePoint:要删除的位置 */ public void ListDelete(int []a,int deletePoint){ int j; if(deletePoint<1||deletePoint>a.length){ System.out.println("删除位置错误!"); } //将deletePoint位置后的数据值前移 for(j=deletePoint;j<a.length;j++){ a[j-1]=a[j]; } System.out.println("删除指定位置的数据后的结果如下:"); //结果消除最后一个数值的,符号 //这里特定不输出数组最后一个数值 for(int i=0;i<a.length-1;i++){ if(i==a.length-2) System.out.print(a[i]); else System.out.print(a[i]+","); } } /* * int[] a,int []b:为新输入的两个数组 */ public void ListMerge(int []la,int []lb){ ArrayList<Integer> listC=new ArrayList<Integer>(); int i,j,t; i=0;j=0; //对数组a进行简单排序 for(i=0;i<la.length;i++){ for(j=0;j<la.length-i-1;j++){ if(la[j]>la[j+1]){ t=la[j]; la[j]=la[j+1]; la[j+1]=t; } } } //对数组b进行简单排序 for(i=0;i<lb.length;i++){ for(j=0;j<lb.length-i-1;j++){ if(la[j]>lb[j+1]){ t=lb[j]; lb[j]=lb[j+1]; lb[j+1]=t; } } } i=0;j=0; while(i<la.length&&j<lb.length){ if(la[i]<lb[j]) //a,b数组中,先输入较小数 listC.add(la[i++]); else{ if(la[i]==lb[j]){ //a,b数组中有重复值的情况下,输入a数组该位置的值,确保合并后的数组没有重复值 listC.add(la[i++]); j++; //跳过b数组中该位置的值 } else listC.add(lb[j++]); } } //两个while循环,确保a,b数组比较后剩余的值均存入合并后的数组中 while(i<la.length){ listC.add(la[i++]); } while(j<lb.length){ listC.add(lb[j++]); } System.out.println(); System.out.println("两个数组合并之后的结果是:"); int []lc=new int [listC.size()]; for(int k=0;k<listC.size();k++){ lc[k]=listC.get(k); } for(int k=0;k<lc.length;k++){ if(k==lc.length-1) System.out.println(lc[k]); else System.out.print(lc[k]+","); } } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。