ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java 实现链式储存结构的线性表

2021-11-13 18:00:09  阅读:150  来源: 互联网

标签:node java linkedList next 链式 LinkedNode size public 线性表


java 实现链表

用节点类储存数据。

代码


/**
 * 链表储存结构实现顺序表
 * @param <E>
 */
public class LinkedList<E> {
    // 头节点
    private LinkedNode<E> first;
    // 尾节点
    private LinkedNode<E> last;
    // 顺序表内储存的数据个数
    private int size = 0;
    // 初始化
    public LinkedList(){
        first = new LinkedNode<>(); // 空的头节点
        last = first;
    }
    // 获取总元素个数
    public int getSize(){
        return size;
    }
    // 添加元素
    public void add(E e){
        LinkedNode<E> node = new LinkedNode<>();
        node.setData(e);
        last.next = node;
        last = node;
        size++;
    }

    // 在某一位置插入数据
    public void add(int index, E e){
        if(index > size)
            System.out.println("插入位置错误!!!");
        else{
            LinkedNode<E> node = new LinkedNode<>();
            LinkedNode<E> head = first;
            node.setData(e);
            // 找到要插入位置的前一个节点
            for(int i = 0;i < index;i ++){
                head = head.next;
            }
            // 插入末尾,改变尾节点
            if(index == size){
                last = node;
            }
            node.next = head.next;
            head.next = node;
            size ++;
        }
    }

    // 删除某一位置的元素
    public E remove(int index){
        E e = null;
        if(index > size - 1 || size == 0)
            System.out.println("删除位置错误!!!");
        else{

            // 找到要删除的节点的前一个
            LinkedNode<E> node = first;
            for(int i = 0;i < index;i ++){
                node = node.next;
            }
            // 如果删除的是最后一个元素,改变尾节点
            if(index == size -1){
                last = node;
            }
            e = node.next.getData();
            node.next = node.next.next;
            size --;
        }
        return e;
    }

    // 删除第一个元素
    public E removeFirst(){
        return remove(0);
    }
    // 删除最后一个元素
    public E removeLast(){
        return remove(size - 1);
    }

    // 获取某一位置的元素
    public E get(int index){
        E e = null;
        if(index > size - 1 || size == 0)
            System.out.println("查找位置错误!!!");
        else{
            // 找到要查找的节点
            LinkedNode<E> node = first.next;
            for(int i = 0;i < index;i ++){
                node = node.next;
            }
            e = node.getData();
        }
        return e;
    }

    // 获取第一个元素
    public E getFirst(){
        E e = null;
        if(size != 0)
            e = first.next.getData();
        return e;
    }

    // 获取第最后一个元素
    public E getLast(){
        E e = null;
        if(size != 0)
            e = last.getData();
        return e;
    }

}


/**
 * 链表节点
 * @param <E>
 */
public class LinkedNode<E> {
    private E data; // 储存的数据
    public LinkedNode<E> next;

    // 给该节点数据赋值
    public void setData(E e){
        data = e;
    }

    // 获取该节点数据值
    public E getData(){
        return data;
    }
}

package 线性表;

/**
 * 链表测试类
 */
public class LinkedList_Demo {

    // 输出相关数据
    public static void print(LinkedList linkedList){
        System.out.println("元素个数:" + linkedList.getSize());
        System.out.println(linkedList.getFirst());
        System.out.println(linkedList.get(1));
        System.out.println(linkedList.getLast());
    }

    public static void main(String[] args){
        LinkedList<String> linkedList = new LinkedList<>();
        linkedList.add("the");
        linkedList.add(0,"hello");
        linkedList.add(2,"word!");

        print(linkedList);

        // 删除两个
        linkedList.remove(0);
        linkedList.remove(0);

        System.out.println("元素个数:" + linkedList.getSize());

        // 添加元素
        linkedList.add("www");
        linkedList.add(0,"http://");

        print(linkedList);

    }
}

结果:
元素个数:3
hello
the
word!
元素个数:1
元素个数:3
http://
word!
www

标签:node,java,linkedList,next,链式,LinkedNode,size,public,线性表
来源: https://blog.csdn.net/weixin_46085748/article/details/121307779

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有