JAVA數據結構---順序表

定義接口

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
結束=========================

發佈了41 篇原創文章 · 獲贊 9 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章