IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【数据结构--链表】单链表的具体实现 -> 正文阅读

[数据结构与算法]【数据结构--链表】单链表的具体实现

链表

1.链表的介绍

链表是一种物理存储单元上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。

物理空间上的存储结构:

在这里插入图片描述

说明:

在java中不存在指针,这里的指针成员指的是后继结点或前驱结点,只是为了表示方便仍然采用"指针"一词。

2.链表的特点

  • 链表是以结点的形式存储的,是链式存储

  • 每个结点包括data区域和next区域

  • 各个结点并不是连续存储的

  • 链表有带头结点链表和不带头结点链表:

    带头结点链表逻辑结构:
    在这里插入图片描述

单链表的实现

单链表就是每个结点只设置一个指向其后继结点的指针成员。

在单链表中,当访问过一个结点后,只能接着访问它的后继结点,无法访问它的前驱结点。

需求:

根据带有头部的单链表,实现商品的增删改查,并且也可以针对商品已编号进行排序,完成排行榜。

public class LinkNode {
    public int id;
    public String name;
    public double price;
    public LinkNode next;

    public LinkNode(int id, String name, double price) {
        this.id = id;
        this.name = name;
        this.price = price;
    }

    public String toString(){
        return "LinkNode{"+"id="+id+",name="+name+",price="+price+'}';
    }
}

public class DLLinkedList {

    private LinkNode node=new LinkNode(0,"",0.0);

    //往链表中添加结点,在链表的尾端
    public void add(LinkNode node1){
        LinkNode temp=node;
        while(true){
            if(temp.next==null){
                break;
            }
            temp=temp.next;
        }
        temp.next=node1;
    }
    /**
     * 按照商品编号id值进行添加,id值按照从小到大的顺序
     */
    public void addOrder(LinkNode node2){
        LinkNode temp=node;
        boolean flag=false;
        while (true){
            if(temp.next==null){
                break;
            }
            if(temp.next.id>node2.id){
                break;
            }else if(temp.next.id==node2.id){
                flag=true;
                break;//相等id,不插入,去重
            }
            temp=temp.next;
        }
        if(flag){
            System.out.println("已经存在该商品,不能添加重复元素");
        }
        else{
            node2.next=temp.next;
            temp.next=node2;
        }
    }
    /**
     * 修改结点
     * 1.先找到结点中的目标节点
     * 2.根据新数据修改
     * 3.根据商品编号查找
     */
    public void update(LinkNode node3){
        //如果为空链表
        if (node.next==null){
            System.out.println("空链表");
            return;
        }
        LinkNode temp=node.next;
        boolean flag=false;//表示找到
        while (true){
            if(temp==null){
                break;
            }
            if (temp.id== node3.id){
                flag=true;
                break;
            }
            temp=temp.next;
        }
        if (flag){
            //修改结点
            temp.name=node3.name;
            temp.id=node3.id;
        }
        else {
            System.out.println("未找到目标结点");
        }
    }
    /**
     * 结点的删除,根据结点编号
     */
    public void delete(LinkNode node4){
        LinkNode temp=node;
        boolean flag=false;
        while (true){
            if(temp.next==null){
                break;
            }
            if (temp.next.id==node4.id){
                flag=true;
                break;
            }
            temp=temp.next;
        }
        if(flag){
            temp.next=temp.next.next;
        }else {
            System.out.println("未找到删除结点");
        }
    }
    /**
     * 查看链表中每个结点元素
     */
    public void list(){
        if(node.next==null){
            System.out.println("空结点");
            return;
        }
        LinkNode temp=node.next;
        while(true){
            if(temp==null){
                break;
            }
            System.out.println(temp);
            temp=temp.next;
        }
    }
}

public class LinkedTest {
    public static void main(String[] args) {

        DLLinkedList linkedList=new DLLinkedList();

        LinkNode node1=new LinkNode(1,"naike",599.00);
        LinkNode node2=new LinkNode(2,"tebu",399.00);
        LinkNode node3=new LinkNode(3,"adi",699.00);
        LinkNode node4=new LinkNode(4,"lining",499.00);

        //添加
        linkedList.add(node1);
        linkedList.add(node2);
        linkedList.add(node3);
        linkedList.add(node4);
        linkedList.list();

        //修改
        linkedList.update(new LinkNode(2,"qiaodan",288.00));
        linkedList.list();

        //删除
        linkedList.delete(node4);
        linkedList.list();

//        添加后排序
        linkedList.addOrder(node2);
        linkedList.addOrder(node1);
        linkedList.addOrder(node3);
        linkedList.addOrder(node4);
        linkedList.list();
    }
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-10-08 21:07:03  更:2022-10-08 21:11:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 19:14:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码