定義接口
package LinerTable;
public interface ListIntf {
public abstract int size();
public abstract void clear();
public abstract boolean isEmpty();
public abstract Object get(int i);
public abstract int indexOf(Object obj);
public abstract Object getPre(Object obj);
public abstract Object getNext(Object obj);
public abstract void insertElementAt(Object obj, int i);
public abstract Object remove(int i);
public abstract Object remove(Object obj);
}
定義線性表
package LinerTable;
public class Sqlist implements ListIntf {
// 線性表的長度
public static final int MAXSIZE = 100;
// 定義數組
Object[] elem = new Object[MAXSIZE];
private int len = 0;
public int getMAXSIZE() {
return MAXSIZE;
}
/**
* 接口的實現
*/
// 線性表的大小
public int size() {
return len;
}
// 清空線性表
public void clear() {
len = 0;
}
// 判斷線性表是否爲空
public boolean isEmpty() {
if (len == 0)
return true;
return false;
}
// 得到線性表的元素
public Object get(int i) {
if (len == 0)
return null;
if (i < 1 || i > len)
return null;
return elem[i - 1];// 查找不用循環,相當於數組引用
}
// 根據數據返回線性表中的下標
public int indexOf(Object obj) {
for (int i = 0; i < len; i++) {
if (elem[i].equals(obj))
return i + 1;
}
return -1;
}
// 根據內容查找前驅元素
public Object getPre(Object obj) {
int i = indexOf(obj);
if (i == -1)
return null;
else if (i == 1)
return null;
return elem[i - 2];
}
// 如果obj是線性表中的元素,則返回下一個元素
public Object getNext(Object obj) {
int i = indexOf(obj);
if (i == -1)
return null;
else if (i == len)
return null;
return elem[i];
}
// 在指定的位置插入元素
public void insertElementAt(Object obj, int i) {
if (len == MAXSIZE) {
System.out.println("線性表已經滿了,溢出.");
return;
} else if (i < 1 || i > len + 1) {
System.out.println("插入位置非法.");
return;
}
for (int j = len - 1; j > i - 1; j--)
elem[j + 1] = elem[j];
elem[i - 1] = obj;
len++;
return;
}
// 刪除元素,並且返回刪除的值
public Object remove(int i) {
Object obj;
if (i < 1 || i > len) {
System.out.println("刪除位置非法.");
return null;
}
obj = elem[i - 1];
for (int j = i - 1; j < len - 1; j++) {
elem[j] = elem[j + 1];
}
len--;
return obj;
}
// 根據內容刪除元素,返回其值,長度減1
public Object remove(Object obj) {
int i = indexOf(obj);
if (i == -1) {
System.out.println("要刪除的元素不存在.");
return null;
}
return remove(i);
}
/**
* 新增的方法
*/
public void printList() {
if (len == 0) {
System.out.println("線性表爲空.");
return;
}
System.out.println("線性表中的元素是:");
for (int i = 0; i < len; i++)
System.out.print(elem[i].toString() + " ");
System.out.println();
}
}
測試主類:
package LinerTable;
import java.util.Scanner;
public class MainTest {
public static void main(String[] args) {
System.out.println("開始=========================");
System.out.println("構造=========================");
Object obj;
int n;
Scanner input = new Scanner(System.in);
Sqlist sl = new Sqlist();
System.out.println("表長:" + sl.size());
// 構造5個元素的線性表
System.out.println("插入5個元素===================");
for (int i = 0; i < 5; i++) {
System.out.println("插入元素:");
obj = input.next();
sl.insertElementAt(obj, sl.size() + 1);
}
System.out.println("表長:" + sl.size());
sl.printList();
// 增加元素
System.out.println("增加=========================");
System.out.println("增加元素:");
System.out.println("元素:");
obj = input.next();
System.err.println("位置:");
n = Integer.parseInt(input.next());
sl.insertElementAt(obj, n);
System.out.println("表長:" + sl.size());
sl.printList();
// 查找元素
System.out.println("查找=========================");
System.out.println("元素查找:");
obj = input.next();
n = sl.indexOf(obj);
if (n != -1)
System.out.println("元素" + obj + "位於第" + n + "位");
System.out.println("位置:");
n = Integer.parseInt(input.next());
obj = sl.get(n);
if (obj != null)
System.out.println("元素" + obj + "位於第" + n + "位");
// 刪除元素
System.out.println("位置刪除=========================");
System.out.println("刪除元素");
System.out.println("位置:");
n = Integer.parseInt(input.next());
obj = sl.remove(n);
if (obj != null)
System.out.println("刪除的元素是:" + obj);
System.out.println("表長:" + sl.size());
sl.printList();
System.out.println("元素刪除=========================");
System.out.println("元素:");
obj = input.next();
Object obj1 = sl.remove(obj);
if (obj != null)
System.out.println("刪除的元素是:" + obj1);
System.out.println("表長:" + sl.size());
sl.printList();
input.close();
System.out.println("結束=========================");
}
}
運行結果:
開始=========================
構造=========================
表長:0
插入5個元素===================
插入元素:
12
插入元素:
32
插入元素:
543
插入元素:
564
插入元素:
65
表長:5
線性表中的元素是:
12 32 543 564 65
增加=========================
增加元素:
元素:
32
位置:
3
表長:6
線性表中的元素是:
12 32 32 564 564 65
查找=========================
查找元素:
32
元素32位於第2位
位置:
3
元素32位於第3位
位置刪除=========================
刪除元素
位置:
3
刪除的元素是:32
表長:5
線性表中的元素是:
12 32 564 564 65
元素刪除=========================
元素:
564
刪除的元素是:564
表長:4
線性表中的元素是:
12 32 564 65
結束=========================