天天看點

java——線性表接口實作

 線性表是存儲順序牌類的資料時最常用的資料結構。

    實作線性表有兩種方式。第一種是使用數組存儲線性表的元素。數組是動态建立的。超過數組的容量時,建立一個

新的更大的數組,并且将目前數組中的元素複制到建立的數組中。另一種方法是用連結清單結構實作。連結清單由節點組成,每

個結點都是動态生成的,用來存儲一個元素。所有的結點連接配接成一個線性表。

    對于線性表的主要操作有:

    1、提取線性表的元素

    2、線上性表中插入一個新元素

    3、從線性表中删除一個元素

    4、擷取線性表中元素的個數

    5、查找線性表中是否包含某個元素

    6、判斷線性表是否為空

下面這個接口類定義了常用的操作。

1 package com.ezreal;
 2 
 3 
 4 public interface ListIntf {
 5     /**
 6      * 傳回表長度
 7      * @return
 8      */
 9     public int size();
10     
11     /**
12      * 增加元素
13      * @param obj
14      */
15     public void add(Object obj);
16     /**
17      * 重置為空表
18      */
19     public void clear();
20     /**
21      * 判斷是否為空
22      * @return
23      */
24     public boolean isEmpty();
25     /**
26      * 第i個資料元素的值
27      * @param i
28      * @return
29      */
30     public Object get(int i);
31     /**
32      * 傳回第一個這個元素的位置
33      * @param obj
34      * @return
35      */
36     public int indexOf(Object obj);
37     /**
38      * 傳回這個元素的前驅
39      * @param obj
40      * @return
41      */
42     public Object getPre(Object obj);
43     /**
44      * 傳回這個元素的後繼
45      * @param obj
46      * @return
47      */
48     public Object getNext(Object obj);
49     /**
50      * 第i個位置插入新的元素對象
51      * @param obj
52      * @param i
53      */
54     public void insertElementAt(Object obj ,int i);
55     /**
56      * 删除第i個元素
57      * @param i
58      * @return
59      */
60     public Object remove(int i);
61     /**
62      * 删除資料元素obj,并傳回這個元素的值
63      * @param obj
64      * @return
65      */
66     public Object remove(Object obj);
67 }      

接下來用數組實作線性表。數組的類型是Object類型,是以,數組中每個元素實際元素存儲的是對象的。

1 package com.ezreal;
  2 
  3 public class SqList implements ListIntf {
  4     final int maxlen = 1000;
  5     Object v[] = new Object[maxlen];
  6     int len = 0;
  7 
  8     public SqList() {
  9 
 10     }
 11 
 12     @Override
 13     public void add(Object obj) {
 14         if(len == maxlen){
 15             System.out.println("溢出");
 16         }else{
 17             v[len] = obj;
 18             len++;
 19         }
 20     }
 21 
 22     @Override
 23     public int size() {
 24         return len;
 25     }
 26 
 27     @Override
 28     public void clear() {
 29         
 30         len =0;
 31     }
 32 
 33     @Override
 34     public boolean isEmpty() {
 35         
 36         if(len == 0){
 37             return true;
 38         }
 39         return false;
 40     }
 41 
 42     @Override
 43     public Object get(int i) {
 44         if(i<1 || i>len){
 45             System.out.println("擷取元素位置不正确");
 46         }else{
 47             return v[i-1];
 48         }
 49         return null;
 50         
 51     }
 52 
 53     @Override
 54     public int indexOf(Object obj) {
 55         for(int i=0;i<len;i++){
 56             if(v[i].equals(obj)){
 57                 return i;
 58             }
 59         }
 60         return -1;
 61     }
 62 
 63     @Override
 64     public Object getPre(Object obj) {
 65         int i = indexOf(obj);
 66         if(i==-1){
 67             System.out.println("無該元素");
 68         }else if(i == 0){
 69             System.out.println("無前驅");
 70         }else{
 71             return v[i-1];
 72         }
 73         
 74         return null;
 75     }
 76 
 77     @Override
 78     public Object getNext(Object obj) {
 79         int i = indexOf(obj);
 80         if(i==-1){
 81             System.out.println("無該元素");
 82         }else if(i == len){
 83             System.out.println("無前驅");
 84         }else{
 85             return v[i+1];
 86         }
 87         
 88         return null;
 89     }
 90 
 91     @Override
 92     public void insertElementAt(Object obj, int i) {
 93         if(len == maxlen){
 94             System.out.println("溢出");
 95             return;
 96         }else {
 97             if(i < 0 || i >len){
 98                 System.out.println("插入位置不正确");
 99                 return;
100             }else{
101                 for(int j=len-1;j>=i-1;j--){
102                     v[j+1]=v[j];//第i個元素和他後面的所有元素均後移一個位置
103                 }
104                 v[i-1]=obj;
105                 len++;
106                 return;
107             }
108             
109         }
110 
111     }
112 
113     @Override
114     public Object remove(int i) {
115         Object obj;
116         if(i<1 || i>len){
117             System.out.println("删除位置不正确");
118         }else{
119             obj = v[i-1];
120             for(int j=i;j<len;j++){
121                 v[j-1]=v[j];
122             }
123             len--;
124             return obj;
125         }
126         return null;
127         
128     }
129 
130     @Override
131     public Object remove(Object obj) {
132         int i=indexOf(obj);
133         if(i==-1){
134             System.out.println("無該元素");
135         }else {
136             remove(i+1);
137         }
138         
139         return null;
140     }
141 
142 }      

 如有不對的地方,請各位看官指出。

轉載于:https://www.cnblogs.com/ezreal2016/p/5813304.html