数据结构入门之单链表代码实现(java)

1:单链表是:

  • 单链表是一种链式存取的 数据结构 用一组地址任意的 存储单元 存放线性表中的数据元素。
  • 链表中的数据是以结点来表示的,每个结点的构成:元素 ( 数据元素 的映象) + 指针 (指示后继元素 存储 位置),元素就是存储数据的存储单元,指针就是连接每个结点的 地址 数据。 链表中的数据是以结点来表示的,
  • 每个结点的构成:元素 ( 数据元素 的映象) + 指针 (指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。 以“结点的序列”表示线性表称作 线性链表 (单链表),单链表是链式存取的结构。 链接方式存储的线性表简称为链表(Linked List)。 ② 链表中结点的逻辑次序和物理次序不一定相同。

2:代码实现:

  单链表类属性的定义:

public class HeroNode {
    //编号
    public int no;
    public String Name;
    public String noName;
    //指向下一个节点
    public HeroNode next;

    public HeroNode(int no, String name, String noName) {
        this.no = no;
        Name = name;
        this.noName = noName;

    }
}

  单链表管理类(简单的增删改查):

class LindedHeroNode {
    private HeroNode head = new HeroNode(0, "", "");
    
    //顺序添加并不能重复
    public void addOrder(HeroNode heroNode) {
        HeroNode temp = head;
        //标识
        boolean flag = false;
        while (true) {
            if (temp.next == null) {
                //已经到最后了
                break;
            }
            if (temp.next.no > heroNode.no) {//找到位置就添加到后面
                break;
            } else if (temp.next.no == heroNode.no) {//相等则不添加
                flag = true;
                break;
            }
            //后移
            temp = temp.next;
        }
        if (flag) {
            System.out.println("有相等的编号");
        } else {
            heroNode.next = temp.next;
            temp.next = heroNode;
        }

    }

    //修改
    public void update(HeroNode heroNode) {
        //先判断链表内部有没有数据
        if (head.next == null) {
            return;
        }
        HeroNode temp = head.next;
        boolean flag = false;
        while (true) {
            if (temp.next == null) {
                break;
            }
            //找到退出
            if (temp.no == heroNode.no) {
                flag = true;
                break;
            }
            //指向下一节点
            temp = temp.next;
        }
        if (flag) {
            temp.Name = heroNode.Name;
            temp.noName = heroNode.noName;
        } else {
            System.out.println("没有找到标识");
        }
    }
    //删除
    public void delect(int no) {
        if (head.next == null) {
            System.out.println("没有数据");
            return;
        }
        HeroNode temp = head;
        boolean flag = false;
        while (true) {
            if (temp.next == null) {
                break;
            }
            if (temp.next.no == no) {
                flag = true;
                break;
            }
            temp = temp.next;
        }
        if (flag) {
            temp.next = temp.next.next;
        } else {
            System.out.println("没有找到");
        }
    }

    //遍历
    public void list() {
        if (head.next == null) {
            System.out.println("没有数据");
            return;
        }
        //头结点不能动 需要一个辅助变量来辅助
        HeroNode temp = head.next;
        while (true) {
            if (temp == null) {
                break;
            }
            System.out.println(temp);
            temp = temp.next;
        }

    }
}

 3:测试:

//主测试
public class LinkedTest {
    public static void main(String[] args) {
        HeroNode heroNode = new HeroNode(1, "老大", "喜欢冰淇淋");
        HeroNode heroNode1 = new HeroNode(3, "老三", "喜欢棉花糖");
        HeroNode heroNode2 = new HeroNode(2, "老二", "喜欢巧克力");
        HeroNode heroNode3 = new HeroNode(4, "老四", "喜欢棒棒糖");
        LindedHeroNode lindedHeroNode = new LindedHeroNode();
        //添加
        lindedHeroNode.addOrder(heroNode);
        lindedHeroNode.addOrder(heroNode1);
        lindedHeroNode.addOrder(heroNode2);
        lindedHeroNode.addOrder(heroNode3);
        //修改
        HeroNode heroNode4 = new HeroNode(2, "小杰", "帅哥");
        lindedHeroNode.update(heroNode4);
        //删除
        lindedHeroNode.delect(6);
        //遍历
        lindedHeroNode.list();
    }
}

 

 

 

  

posted @ 2021-08-26 15:01  小杰i  阅读(352)  评论(0编辑  收藏  举报