线性表___顺序表示和实现

以下涉及到的算法,都是关于线性表的顺序表示和实现这部分的算法题目

 

  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 }

 

posted @ 2018-02-23 13:49  代码改变心态  阅读(364)  评论(0编辑  收藏  举报