线性表是存储顺序牌类的数据时最常用的数据结构

    实现线性表有两种方式。第一种是使用数组存储线性表的元素。数组是动态创建的。超过数组的容量时,创建一个

新的更大的数组,并且将当前数组中的元素复制到新建的数组中。另一种方法是用链表结构实现。链表由节点组成,每

个结点都是动态生成的,用来存储一个元素。所有的结点连接成一个线性表。

    对于线性表的主要操作有:

    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 }

 

 如有不对的地方,请各位看官指出。

 


 

posted on 2016-08-27 16:46  Ezreal*-*  阅读(526)  评论(0编辑  收藏  举报