线性表___顺序表示和实现
以下涉及到的算法,都是关于线性表的顺序表示和实现这部分的算法题目
1 package com.linearList; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; 5 import java.util.LinkedList; 6 import java.util.List; 7 8 /** 9 * @author MJC 10 *2018年2月13日 11 * 上午11:05:42 12 */ 13 public class LinearListTest { 14 15 public static void main(String[] args) { 16 LinearListTest llt = new LinearListTest(); 17 18 int[] arrayA = {1, 3, 5,8,9,12,13,15}; 19 int[] arrayB = {2, 4, 6,7,10,11,15,16}; 20 int[] arrayC = new int[16]; 21 int[] result = new int[16]; 22 23 List<Integer> linkList = new LinkedList<Integer>(); 24 linkList.add(1); 25 26 //定位元素的位置 27 System.out.println(llt.locateElem(arrayA,8)); 28 //删除第i个元素 29 result=llt.listDelete(arrayB,3); 30 for (int i = 0; i < result.length; i++) { 31 System.out.print(result[i]+","); 32 } 33 System.out.println("======================="); 34 //在第i元素之前 插入一个元素insertElem, 35 result = llt.listInsert(arrayA,4,6); 36 37 for (int i = 0; i < result.length; i++) { 38 System.out.print(result[i]+","); 39 } 40 System.out.println(); 41 System.out.println("====分割线===="); 42 43 //非递减有序线性表,合并成一个非递减有序线性表 44 arrayC = llt.Mergelist(arrayA,arrayB,arrayC); 45 for (int i = 0; i < arrayC.length; i++) { 46 System.out.print(arrayC[i]+","); 47 48 } 49 System.out.println(); 50 System.out.println("========================"); 51 List<Integer> La = new ArrayList<Integer>(); 52 List<Integer> Lb = new ArrayList<Integer>(); 53 La.add(1); 54 La.add(2); 55 La.add(3); 56 57 Lb.add(2); 58 Lb.add(5); 59 Lb.add(6); 60 Lb.add(6); 61 //存在于Lb但是不存在于La中的数,存入到La 62 System.out.println(llt.union(La,Lb)); 63 64 } 65 /** 算法 2.6 66 * 定位元素的位置 67 * @param array 68 * @param elem 69 * @return 70 */ 71 public int locateElem(int[] array,int elem){ 72 for (int i = 0; i < array.length; i++) { 73 if(array[i] == elem){ 74 return i+1; 75 } 76 } 77 return -1; 78 } 79 /** 算法 2.5 80 * 删除第i个元素 81 * @param array 82 * @param i 83 * @return 84 */ 85 public int[] listDelete(int[] array,int i){ 86 int[] tempArr = new int[16]; 87 for (int j = 0; j < array.length; j++) { 88 if(j<i-1){ 89 tempArr[j] = array[j]; 90 }else if(j>i-1){ 91 tempArr[j-1] = array[j]; 92 } 93 } 94 95 return tempArr; 96 } 97 /** 算法 2.4 98 * 在第i元素之前 插入一个元素insertElem, 99 * @param arr 100 * @param i 101 * @param insertElem 102 * @return 103 */ 104 public int[] listInsert(int[] arr,int i,int insertElem){ 105 int lenth=arr.length; 106 if(i<1||i>=lenth){ 107 try { 108 throw new Exception("位置不合法"); 109 } catch (Exception e) { 110 e.printStackTrace(); 111 } 112 } 113 //临时数组,最终数组 114 int[] temp = new int[17]; 115 for (int j = 0; j < i-1; j++) { 116 temp[j]=arr[j]; 117 } 118 for (int j = i-1; j < temp.length; j++) { 119 if(j < lenth){ 120 temp[j]=arr[j]; 121 } 122 } 123 for (int j = arr.length; j >= i-1; j--) { 124 temp[j+1] = temp[j]; 125 } 126 temp[i-1] = insertElem; 127 return temp; 128 } 129 /** 算法 2.2 130 * 非递减有序线性表,合并成一个非递减有序线性表 131 * @param arrayA 132 * @param arrayB 133 * @param arrayC 134 * @return 135 */ 136 public int[] Mergelist(int[] arrayA,int[] arrayB,int[] arrayC){ 137 138 int LaLenth = arrayA.length; 139 int LbLenth = arrayB.length; 140 int i = 0, j = 0, k = 0; 141 while(i < LaLenth && j<LbLenth){ 142 if(arrayA[i] < arrayB[j] ){ 143 arrayC[k] = arrayA[i]; 144 i++;//在这里i++与++i没有区别,因为没有涉及到赋值运算,比如q=i++; 145 146 }else{ 147 arrayC[k] = arrayB[j]; 148 j++; 149 } 150 k++; 151 } 152 153 while(i < LaLenth){ 154 arrayC[k] = arrayA[i]; 155 k++; 156 i++; 157 } 158 while(j < LbLenth){ 159 arrayC[k] = arrayB[j]; 160 k++; 161 j++; 162 } 163 return arrayC; 164 } 165 /** 算法2.1 166 * 存在于Lb但是不存在于La中的数,存入到La 167 * @param La 168 * @param Lb 169 * @return 170 */ 171 public List<Integer> union(List<Integer> La,List<Integer> Lb){ 172 for (Iterator<Integer> iterator = Lb.iterator(); iterator.hasNext();) { 173 Integer item = (Integer) iterator.next(); 174 if(item!=null){ 175 if(!La.contains(item)){ 176 La.add(item); 177 } 178 } 179 } 180 return La; 181 } 182 }
纸上学来终觉浅,觉知此事需躬行