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]+",");
		}
	 }
	 
}

  

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。