线性表的顺序存储(Java代码实现)

线性表的顺序存储--

线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。

代码实现的功能包括线性表的初始化,判断是否为空、清空、增加元素、删除元素、合并线性表等操作。

Java代码附上:

package LinkListDemo2;

public class LinkList {

    int data;
    LinkList next;

    /**
     * 链表的初始化
     */
    public void initLink(LinkList L) {
        L = new LinkList();
        L.next = null;
    }

    /**
     * 链表的创建(头插法),n插入的元素个数
     */
    public void creatListHead(LinkList L, int n) {
        InitLink(L);
        for (int i = 0; i < n; i++) {
            LinkList linkList = new LinkList();
            linkList.data = i;
            linkList.next = L.next;
            L.next = linkList;
        }
    }

    /**
     * 链表的创建(尾插法),n插入的元素个数
     */
    public void creatListTail(LinkList L, int n) {
        InitLink(L);
        LinkList P;
        P = L;
        for (int i = 0; i < n; i++) {
            LinkList linkList = new LinkList();
            linkList.data = i;
            P.next = linkList; // 注意:等号两个不能互调位置
            P = linkList; // P移动到新的节点位置
        }
        P.next = null;
    }

    /**
     * 获取链表的长度
     */
    public int getLengthList(LinkList L) {
        int count = 0;
        LinkList P;
        P = L.next;
        while (P != null) {
            P = P.next;
            count++;
        }
        return count;
    }

    /**
     * 链表的插入 ,n表示插入的位置
     */
    public void insertList(LinkList L, int n, int num) {
        int count = 0;
        LinkList p, s;
        p = L;
        count = 1;
        while (p.next != null && count < n) { // 将p移动到插入的元素的上一位
            p = p.next;
            count++;
        }
        if (p == null || count > n) {
            System.out.println("不能插入!!");
        }
        s = new LinkList();
        s.data = num;
        s.next = p.next;
        p.next = s;
    }

    /**
     * 链表的删除 ,n表示删除的位置
     */
    public void deleteListElem(LinkList L, int n) {
        int count = 0;
        LinkList p;
        p = L;
        count = 1;
        while (p.next != null && count < n) { // 将p移动到插入的元素的上一位
            p = p.next;
            count++;
        }
        if (p == null || count > n) {
            System.out.println("非法删除元素!!");
        }
        p.next = p.next.next; // Java有着高尚的情操 gc(垃圾回收机制),所以自动内存释放
    }

    /**
     * 清空链表
     */
    public void clearList(LinkList L) {
        LinkList p, q;
        p = L.next;
        while (p != null) {
            q = p.next; // 调换
            p = null; // 清空
            p = q; // 重新给p赋值,相当于p移动到下一位
        }
        L.next = null; // 头节点重新指向空
    }

    /**
     * 前提条件:这个数存在 查找特定的元素 ,查找第四个位置的值,并返回
     */
    public int getElem(LinkList L, int n) {
        LinkList p;
        p = L.next;
        int count = 1;
        while (p != null) {
            if (count == n)
                return p.data;
            ++count;
            p = p.next;
        }
        return 0;
    }

    /**
     * 判断链表是否为空
     */
    public boolean elemptyList(LinkList L) {

        if (L.next != null)
            return false;
        else
            return true;
    }

    /**
     * 遍历链表
     */
    void traverse(LinkList L) {
        LinkList linkList;
        linkList = L.next;
        while (linkList != null) {
            System.out.print(linkList.data + " ");
            linkList = linkList.next;
        }
    }

}

  

测试类:

package LinkListDemo2;

public class test {

    public static void main(String[] args) {
        LinkList linkList = new LinkList();
        linkList.creatListHead(linkList, 5);
        System.out.println("头插法--------------");
        linkList.traverse(linkList);
        System.out.println("");

        System.out.println("尾插法--------------");
        LinkList linkList2 = new LinkList();
        linkList2.creatListTail(linkList2, 5);
        linkList.traverse(linkList2);
        System.out.println("");

        System.out.println("链表2长度:--------------");
        System.out.println(linkList2.getLengthList(linkList2));

        System.out.println("在链表2的3位置上插入100:--------------");
        linkList2.insertList(linkList2, 3, 100);
        linkList.traverse(linkList2);
        System.out.println("");

        System.out.println("删除链表1号元素:--------------");
        linkList.deleteListElem(linkList, 1);
        linkList.traverse(linkList);
        System.out.println("");

        System.out.println("判断链表2是否为空:--------------");
        System.out.println(linkList2.elemptyList(linkList2));
        System.out.println("清空链表2:--------------");
        linkList2.clearList(linkList2);

        System.out.println("判断链表2是否为空:--------------");
        System.out.println(linkList2.elemptyList(linkList2));

        System.out.println("查找链表1的3位置的值:--------------");
        System.out.println(linkList.getElem(linkList, 2));
    }

}

  

实现截图:

 

posted @ 2019-01-20 17:23  四季列车  阅读(1197)  评论(0编辑  收藏  举报