JAVA数据结构---顺序表

来源:互联网 发布:pr导出淘宝视频 编辑:程序博客网 时间:2024/06/06 03:37

定义接口

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

0 0
原创粉丝点击