1.线性表的数据结构定义及测试

数据结构之线性表

1.线性表的基本操作定义

 1 package com.neusoft.List;
 2 
 3 /**
 4  * @author SimonsZhao 
 5  * 线性表的基本操作 
 6  *1.线性表置空
 7  *2.线性表判空
 8  *3.求线性表长度
 9  *4.得到第i个元素的值
10  *5.线性表第i个元素之前插入一个元素
11  *6.删除并返回线性表中的第i个元素
12  *7.线性表中首次出现指定数据元素的位置序号
13  *8.输出线性表中的元素
14  */
15 public interface IList {
16     //1.线性表置空
17     public void clear();
18     //2.线性表判空
19     public boolean isEmpty();
20     //3.求线性表长度
21     public int length();
22     //4.得到第i个元素的值
23     public Object get(int i);
24     //5.线性表第i个元素之前插入一个元素
25     public void insert(int i,Object x);
26     //6.删除并返回线性表中的第i个元素
27     public void remove(int i);
28     //7.线性表中首次出现指定数据元素的位置序号
29     public int indexOf(Object x);
30     //8.输出线性表中的元素
31     public void display();
32     
33 }

2.以物理存储的顺序表方式实现Ilist接口并实现其中的所有方方法

 1 package com.neusoft.List;
 2 
 3 public class SequenceList implements IList{
 4     public Object[] listElem;
 5     public int currentLen;//线性表长度
 6     public  SequenceList(int maxSize) {
 7         currentLen =0;//线性表长度置空
 8         listElem = new Object[maxSize];
 9         //为顺序表分配存储空间
10     }
11     @Override
12     public void clear() {
13         currentLen=0;//置顺序表的当前长度为0
14     }
15 
16     @Override
17     public boolean isEmpty() {
18         return currentLen==0;
19     }
20 
21     @Override
22     public int length() {
23         return currentLen;
24     }
25     //4.得到第i个元素的值
26     @Override
27     public Object get(int i) {
28         if (i<0 || i>currentLen-1) {
29             System.out.println("第"+i+"个元素不存在");
30         }
31         return listElem[i];
32     }
33     @Override
34     public void insert(int i, Object x) {//i指的是在第几个位置插入
35         if (i<0 || i>currentLen) {
36             System.out.println("第"+i+"个元素不存在");
37         }
38         if (currentLen==listElem.length) {
39             System.out.println("顺序表容量已满");
40         }
41         for (int j = currentLen; j >i; j--) {
42             listElem[j]=listElem[j-1];
43         }
44         listElem[i]=x;
45         currentLen++;
46     }
47 
48     @Override
49     public void remove(int i) {
50         // 将顺序表上的第i个元素a从顺序表中删除
51         if (i<0 ||i>=currentLen-1) {
52             System.out.println("删除位置不合法");
53         }
54         for (int j = i; j < currentLen-1; j++) {
55             listElem[j]=listElem[j+1];
56         }
57         currentLen--;
58     }
59 
60     @Override
61     public int indexOf(Object x) {
62         //查找满足条件的数据元素首次出现的位置
63         //显示顺序表中待比较的数据元素,其起始值指示顺序表中第0个元素
64         int j =0;
65         while (j<currentLen&&!listElem[j].equals(x)) {
66             j++;
67         }
68         if (j<currentLen) {
69             return j;//返回值为x的数据元素在线性表中的位置
70         }else {
71             return -1;//顺序表中不存在该元素。
72         }
73     }
74 
75     @Override
76     public void display() {
77         for (int i = 0; i < currentLen; i++) {
78             System.out.println(listElem[i]+" ");
79         }
80         System.out.println();
81     }
82 }
SequenceList顺序表实现类

3.测试顺序表的方法

 1 package com.neusoft.List;
 2 
 3 public class SequenceListTest {
 4     public static void main(String[] args) {
 5         SequenceList seq=new SequenceList(10);
 6         seq.insert(0,'a');
 7         seq.insert(1,'b');
 8         seq.insert(2,'c');
 9         seq.insert(3,'d');
10         seq.insert(4,'e');
11         int index = seq.indexOf('e');
12         if (index != -1) {
13             System.out.println("第一次出现的位置为"+index);
14         }else {
15             System.out.println("不存在");
16         }
17     }
18 }
SequenceListTest 测试类

4.以顺序表的方式解决实际问题

题目:实现查找线性表中第i个数据元素的直接前驱和后继,并输出
package com.neusoft.List;
import java.util.Scanner;
/**
 * @author SimonsZhao
 *实现查找线性表中第i个数据元素的直接前驱和后继,并输出
 */
public class SequenceListTest2 {
    public static void main(String[] args) {
        int n=10;
        SequenceList seq= new SequenceList(50);
        for (int i = 0; i < n; i++) {
            seq.insert(i, i);
        }
        System.out.println("请输入i的值:");
        Scanner scanner = new Scanner(System.in);
        int input = scanner.nextInt();
        if (input>0 && input<=n) {
        System.out.println("第"+input+"个元素的直接前驱是:"+seq.get(input-1));
        }else {
            System.out.println("第"+input+"个元素的直接前驱不存在");
        }
        
        if (input>=0 && input<n) {
            System.out.println("第"+input+"个元素的直接后继是:"+seq.get(input+1));
            }else {
                System.out.println("第"+input+"个元素的直接后继不存在");
            }
    }
}

5.上题结果分析:

原文地址:https://www.cnblogs.com/jackchen-Net/p/6524666.html