zoukankan      html  css  js  c++  java
  • 线性表___顺序表示和实现

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

      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 }
    纸上学来终觉浅,觉知此事需躬行
  • 相关阅读:
    C语言考点例题解析
    五笔打字
    常用快捷键
    网络基础知识
    人口增长
    8 封装
    9 绑定方法和非绑定方法
    6 抽象类
    7 多态和多态性
    5 组合
  • 原文地址:https://www.cnblogs.com/dreamHighMjc/p/8461676.html
Copyright © 2011-2022 走看看