zoukankan      html  css  js  c++  java
  • 线性表的顺序存储(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));
        }
    
    }
    

      

    实现截图:

  • 相关阅读:
    NPM
    Angular2.0快速开始
    AngularJS常用插件与指令收集
    Linq 操作基础
    SQL Server2008 with(lock)用法
    SQL Server2008 MERGE指令用法
    SQL Server2008 表旋转(pivot)技术
    ef to sqlite 实际开发问题终极解决方法
    windows控件常用缩写
    SQL 查询总结
  • 原文地址:https://www.cnblogs.com/liuzeyu12a/p/10295515.html
Copyright © 2011-2022 走看看