一篇文章入门单链表+刷题实践【java实现+详细注释】

news2025/8/7 16:39:10

文章目录

  • 节点定义
  • 链表类
    • 获取链表长度
    • 清空链表
    • 添加节点到链表尾部
    • 根据id来删除节点
    • 根据id来查询节点
    • 修改相同id的节点信息
    • 打印链表
    • 逆序打印
    • 反转链表
  • 测试
    • 代码
    • 打印信息
  • 习题
    • 反转链表
    • 删除链表的节点
    • 删除链表的倒数第k个节点

节点定义

关于节点里面所存储的信息,需要什么就添加什么,但是next字段是必须的,因为用来串联一个节点和下一个节点。

package com.dam.data_structure.linked_list;

public class HeroNode {

    /**
     * 这三个字段自己定义
     */
    public int id;
    public String name;
    public String nickname;
    /**
     * 必要字段
     */
    public HeroNode next;

    public HeroNode(int id, String name, String nickname) {
        this.id = id;
        this.name = name;
        this.nickname = nickname;
    }

    @Override
    public String toString() {
        return "HeroNode [id=" + id + ", name=" + name + ", nickname=" + nickname + "]";
    }

    public HeroNode next(int id, String name, String nickname) {
        next = new HeroNode(id, name, nickname);
        return next;
    }

}

常规添加节点方法,这样很多小伙伴可能会觉得比较麻烦

HeroSingleLinkedList linkedList = new HeroSingleLinkedList();
 HeroNode hero1 = new HeroNode(1, "宋江", "及时雨");
        HeroNode hero2 = new HeroNode(2, "卢俊义", "玉麒麟");
        HeroNode hero3 = new HeroNode(3, "吴用", "智多星");
        HeroNode hero4 = new HeroNode(4, "林冲", "豹子头");
        linkedList.add(hero1);
        linkedList.add(hero4);
        linkedList.add(hero2);
        linkedList.add(hero3);

这里提供一个快速添加节点的方法

 public HeroNode next(int id, String name, String nickname) {
     next = new HeroNode(id, name, nickname);
     return next;
 }

使用方式

HeroSingleLinkedList linkedList = new HeroSingleLinkedList();
        链式添加元素
        linkedList.head.next(5, "小明", "小明")
                .next(6, "小花", "小花")
                .next(7, "小华", "小华")
                .next(8, "李华", "李华");

链表类

本文的链表会使用一个空的结点来作为head,该节点上面没有什么实际数据,只是为了让链表的其他方法更加容易实现

public class HeroSingleLinkedList {
    /**
     * 先初始化一个头节点, 头节点不要动, 不存放具体的数据
     */
    private HeroNode head = new HeroNode(0, "", "");
}

获取链表长度

注意,计算长度是从head的下一个节点开始计算

    /**
     * 获取链表长度
     *
     * @return
     */
    public int size() {
        int size = 0;
        HeroNode temp = this.head.next;
        while (temp != null) {
            size++;
            temp = temp.next;
        }
        return size;
    }

清空链表

直接重置头节点就行

  /**
     * 清空链表
     */
    public void clear() {
        this.head.next = null;
    }

添加节点到链表尾部

找到链表的最后一个节点,将最后一个节点的next指向要添加的节点即可

  /**
     * 添加元素
     *
     * @param heroNode
     */
    public void add(HeroNode heroNode) {
        HeroNode temp = this.head;
        找到最后一个元素,将heroNode添加即可,最后一个元素的next肯定为null
        while (temp != null) {
            if (temp.next == null) {
                //--if--找到了最后一个元素 添加元素之后即可退出
                temp.next = heroNode;
                break;
            } else {
                //--if--不是最后一个元素,继续往下面寻找
                temp = temp.next;
            }
        }
    }

根据id来删除节点

删除节点一般是遍历到要删除节点的前一个元素,然后将前一个元素的next指向null或者要删除元素的下一个节点

   /**
     * 根据id来删除节点
     *
     * @param id
     */
    public HeroNode deleteById(int id) {
        HeroNode temp = this.head;
        while (temp != null && temp.next != null) {
            if (temp.next.id == id) {
                //记录要删除的元素
                HeroNode record = temp.next;
                if (temp.next.next != null) {
                    //--if--如果还有下下个节点
                    temp.next = temp.next.next;
                } else {
                    //--if--如果没有下下节点,直接赋值为空就行
                    temp.next = null;
                }
                return record;
            }
            temp = temp.next;
        }
        System.out.println("没有找到相应id的元素,无需删除");
        return null;
    }

根据id来查询节点

   /**
     * 根据id来查询节点
     *
     * @param id
     */
    public HeroNode getById(int id) {
        HeroNode temp = this.head;
        while (temp != null) {
            if (temp.id == id) {
                return temp;
            }
            temp = temp.next;
        }
        System.out.println("没有找到相应id的元素");
        return null;
    }

修改相同id的节点信息

    /**
     * 根据id匹配来修改节点
     *
     * @param heroNode
     */
    public void update(HeroNode heroNode) {
        HeroNode temp = this.head;
        while (temp != null) {
            if (temp.id == heroNode.id) {
                temp.name = heroNode.name;
                temp.nickname = heroNode.nickname;
                return;
            }
            temp = temp.next;
        }
        System.out.println("没有找到相应id的元素,无法修改");
    }

打印链表

   /**
     * 打印链表的元素
     */
    public void print() {
        //不打印头节点,从头节点的后一个元素开始
        HeroNode temp = this.head.next;
        while (temp != null) {
            System.out.println(temp.toString());
            temp = temp.next;
        }
    }

逆序打印

利用栈先进后出特性来协助

  /**
     * 逆序打印
     */
    public void reversePrint() {
        //先将所有元素存储到栈中
        Stack<HeroNode> stack = new Stack<>();
        HeroNode temp = this.head.next;
        while (temp != null) {
            stack.push(temp);
            temp = temp.next;
        }

        //从栈中取出元素并打印
        while (!stack.isEmpty()) {
            System.out.println(stack.pop().toString());
        }
    }

反转链表

反转链表原理
在这里插入图片描述

 /**
     * 原地反转链表
     *
     * @param linkedList
     */
    public static void reverseList(HeroSingleLinkedList linkedList) {
        HeroNode head = linkedList.head;

        //如果只有一个元素或者没有元素,直接退出即可
        if (head == null || head.next == null) {
            return;
        }

        HeroNode cur = head.next;
        HeroNode last = null;
        while (cur != null) {
            HeroNode temp = cur.next;
            cur.next = last;
            last = cur;
            cur = temp;
        }

        head.next = last;
    }

测试

代码

package com.dam.data_structure.linked_list;

import java.util.Stack;

public class HeroSingleLinkedList {
    /**
     * 先初始化一个头节点, 头节点不要动, 不存放具体的数据
     */
    private HeroNode head = new HeroNode(0, "", "");

    /**
     * 添加元素
     *
     * @param heroNode
     */
    public void add(HeroNode heroNode) {
        HeroNode temp = this.head;
        找到最后一个元素,将heroNode添加即可,最后一个元素的next肯定为null
        while (temp != null) {
            if (temp.next == null) {
                //--if--找到了最后一个元素 添加元素之后即可退出
                temp.next = heroNode;
                break;
            } else {
                //--if--不是最后一个元素,继续往下面寻找
                temp = temp.next;
            }
        }
    }

    /**
     * 根据id来删除节点
     *
     * @param id
     */
    public HeroNode deleteById(int id) {
        HeroNode temp = this.head;
        while (temp != null && temp.next != null) {
            if (temp.next.id == id) {
                //记录要删除的元素
                HeroNode record = temp.next;
                if (temp.next.next != null) {
                    //--if--如果还有下下个节点
                    temp.next = temp.next.next;
                } else {
                    //--if--如果没有下下节点,直接赋值为空就行
                    temp.next = null;
                }
                return record;
            }
            temp = temp.next;
        }
        System.out.println("没有找到相应id的元素,无需删除");
        return null;
    }

    /**
     * 根据id来查询节点
     *
     * @param id
     */
    public HeroNode getById(int id) {
        HeroNode temp = this.head;
        while (temp != null) {
            if (temp.id == id) {
                return temp;
            }
            temp = temp.next;
        }
        System.out.println("没有找到相应id的元素");
        return null;
    }

    /**
     * 根据id匹配来修改节点
     *
     * @param heroNode
     */
    public void update(HeroNode heroNode) {
        HeroNode temp = this.head;
        while (temp != null) {
            if (temp.id == heroNode.id) {
                temp.name = heroNode.name;
                temp.nickname = heroNode.nickname;
                return;
            }
            temp = temp.next;
        }
        System.out.println("没有找到相应id的元素,无法修改");
    }

    /**
     * 获取链表长度
     *
     * @return
     */
    public int size() {
        int size = 0;
        HeroNode temp = this.head.next;
        while (temp != null) {
            size++;
            temp = temp.next;
        }
        return size;
    }

    /**
     * 清空链表
     */
    public void clear() {
        this.head.next = null;
    }

    /**
     * 打印链表的元素
     */
    public void print() {
        //不打印头节点,从头节点的后一个元素开始
        HeroNode temp = this.head.next;
        while (temp != null) {
            System.out.println(temp.toString());
            temp = temp.next;
        }
    }

    /**
     * 逆序打印
     */
    public void reversePrint() {
        //先将所有元素存储到栈中
        Stack<HeroNode> stack = new Stack<>();
        HeroNode temp = this.head.next;
        while (temp != null) {
            stack.push(temp);
            temp = temp.next;
        }

        //从栈中取出元素并打印
        while (!stack.isEmpty()) {
            System.out.println(stack.pop().toString());
        }
    }

    /**
     * 原地反转链表
     *
     * @param linkedList
     */
    public static void reverseList(HeroSingleLinkedList linkedList) {
        HeroNode head = linkedList.head;

        //如果只有一个元素或者没有元素,直接退出即可
        if (head == null || head.next == null) {
            return;
        }

        HeroNode cur = head.next;
        HeroNode last = null;
        while (cur != null) {
            HeroNode temp = cur.next;
            cur.next = last;
            last = cur;
            cur = temp;
        }

        head.next = last;
    }

    public static void main(String[] args) {
        HeroSingleLinkedList linkedList = new HeroSingleLinkedList();

        链式添加元素
        linkedList.head.next(5, "小明", "小明")
                .next(6, "小花", "小花")
                .next(7, "小华", "小华")
                .next(8, "李华", "李华");

        插入测试
        HeroNode hero1 = new HeroNode(1, "宋江", "及时雨");
        HeroNode hero2 = new HeroNode(2, "卢俊义", "玉麒麟");
        HeroNode hero3 = new HeroNode(3, "吴用", "智多星");
        HeroNode hero4 = new HeroNode(4, "林冲", "豹子头");
        linkedList.add(hero1);
        linkedList.add(hero4);
        linkedList.add(hero2);
        linkedList.add(hero3);

        正序打印测试
        System.out.println("正序打印测试---------------------------------------------------------------------------------------");
        linkedList.print();
        System.out.println();

        逆序打印测试
        System.out.println("逆序打印测试---------------------------------------------------------------------------------------");
        linkedList.reversePrint();
        System.out.println();

        获取链表长度测试
        System.out.println("获取链表长度测试---------------------------------------------------------------------------------------");
        System.out.println("链表长度:" + linkedList.size());
        System.out.println();

        反转链表
        System.out.println("反转链表测试---------------------------------------------------------------------------------------");
        HeroSingleLinkedList.reverseList(linkedList);
        linkedList.print();
        System.out.println();

        修改元素
        System.out.println("修改链表元素测试---------------------------------------------------------------------------------------");
        linkedList.update(new HeroNode(4, "武松", "行者"));
        linkedList.print();
        System.out.println();

        根据id查询元素
        System.out.println("根据id查询元素---------------------------------------------------------------------------------------");
        System.out.println("linkedList.getById(2):" + linkedList.getById(2));
        System.out.println();

        删除元素
        System.out.println("删除链表元素测试---------------------------------------------------------------------------------------");
        linkedList.print();
        System.out.println("删除10");
        linkedList.deleteById(10);
        System.out.println("删除1");
        linkedList.deleteById(1);
        linkedList.print();
        System.out.println("删除3");
        linkedList.deleteById(3);
        linkedList.print();
        System.out.println("删除4");
        linkedList.deleteById(4);
        linkedList.print();
        System.out.println("删除2");
        linkedList.deleteById(2);
        linkedList.print();
        System.out.println();
    }
}

打印信息

正序打印测试---------------------------------------------------------------------------------------
HeroNode [id=5, name=小明, nickname=小明]
HeroNode [id=6, name=小花, nickname=小花]
HeroNode [id=7, name=小华, nickname=小华]
HeroNode [id=8, name=李华, nickname=李华]
HeroNode [id=1, name=宋江, nickname=及时雨]
HeroNode [id=4, name=林冲, nickname=豹子头]
HeroNode [id=2, name=卢俊义, nickname=玉麒麟]
HeroNode [id=3, name=吴用, nickname=智多星]

逆序打印测试---------------------------------------------------------------------------------------
HeroNode [id=3, name=吴用, nickname=智多星]
HeroNode [id=2, name=卢俊义, nickname=玉麒麟]
HeroNode [id=4, name=林冲, nickname=豹子头]
HeroNode [id=1, name=宋江, nickname=及时雨]
HeroNode [id=8, name=李华, nickname=李华]
HeroNode [id=7, name=小华, nickname=小华]
HeroNode [id=6, name=小花, nickname=小花]
HeroNode [id=5, name=小明, nickname=小明]

获取链表长度测试---------------------------------------------------------------------------------------
链表长度:8

反转链表测试---------------------------------------------------------------------------------------
HeroNode [id=3, name=吴用, nickname=智多星]
HeroNode [id=2, name=卢俊义, nickname=玉麒麟]
HeroNode [id=4, name=林冲, nickname=豹子头]
HeroNode [id=1, name=宋江, nickname=及时雨]
HeroNode [id=8, name=李华, nickname=李华]
HeroNode [id=7, name=小华, nickname=小华]
HeroNode [id=6, name=小花, nickname=小花]
HeroNode [id=5, name=小明, nickname=小明]

修改链表元素测试---------------------------------------------------------------------------------------
HeroNode [id=3, name=吴用, nickname=智多星]
HeroNode [id=2, name=卢俊义, nickname=玉麒麟]
HeroNode [id=4, name=武松, nickname=行者]
HeroNode [id=1, name=宋江, nickname=及时雨]
HeroNode [id=8, name=李华, nickname=李华]
HeroNode [id=7, name=小华, nickname=小华]
HeroNode [id=6, name=小花, nickname=小花]
HeroNode [id=5, name=小明, nickname=小明]

根据id查询元素---------------------------------------------------------------------------------------
linkedList.getById(2):HeroNode [id=2, name=卢俊义, nickname=玉麒麟]

删除链表元素测试---------------------------------------------------------------------------------------
HeroNode [id=3, name=吴用, nickname=智多星]
HeroNode [id=2, name=卢俊义, nickname=玉麒麟]
HeroNode [id=4, name=武松, nickname=行者]
HeroNode [id=1, name=宋江, nickname=及时雨]
HeroNode [id=8, name=李华, nickname=李华]
HeroNode [id=7, name=小华, nickname=小华]
HeroNode [id=6, name=小花, nickname=小花]
HeroNode [id=5, name=小明, nickname=小明]
删除10
没有找到相应id的元素,无需删除
删除1
HeroNode [id=3, name=吴用, nickname=智多星]
HeroNode [id=2, name=卢俊义, nickname=玉麒麟]
HeroNode [id=4, name=武松, nickname=行者]
HeroNode [id=8, name=李华, nickname=李华]
HeroNode [id=7, name=小华, nickname=小华]
HeroNode [id=6, name=小花, nickname=小花]
HeroNode [id=5, name=小明, nickname=小明]
删除3
HeroNode [id=2, name=卢俊义, nickname=玉麒麟]
HeroNode [id=4, name=武松, nickname=行者]
HeroNode [id=8, name=李华, nickname=李华]
HeroNode [id=7, name=小华, nickname=小华]
HeroNode [id=6, name=小花, nickname=小花]
HeroNode [id=5, name=小明, nickname=小明]
删除4
HeroNode [id=2, name=卢俊义, nickname=玉麒麟]
HeroNode [id=8, name=李华, nickname=李华]
HeroNode [id=7, name=小华, nickname=小华]
HeroNode [id=6, name=小花, nickname=小花]
HeroNode [id=5, name=小明, nickname=小明]
删除2
HeroNode [id=8, name=李华, nickname=李华]
HeroNode [id=7, name=小华, nickname=小华]
HeroNode [id=6, name=小花, nickname=小花]
HeroNode [id=5, name=小明, nickname=小明]


Process finished with exit code 0

习题

反转链表

https://leetcode.cn/problems/fan-zhuan-lian-biao-lcof/

/**
 * 注意:head上面也有值,不是单纯作为头节点
 * @param head
 * @return
 */
public ListNode reverseList(ListNode head) {
    ListNode cur = head;
    ListNode last = null;
    while (cur != null) {
        //先将cur后面的部分存储起来
        ListNode temp = cur.next;
        cur.next = last;
        last = cur;
        cur = temp;
    }
    return last;
}

删除链表的节点

https://leetcode.cn/problems/shan-chu-lian-biao-de-jie-dian-lcof/

public ListNode deleteNode(ListNode head, int val) {
    if (head == null) {
        return null;
    }
    if (head.val == val) {
    	//删除头节点,直接返回头节点的下一个节点即可
        return head.next;
    }
    ListNode temp = head;
    while (temp != null && temp.next != null) {
        if (temp.next.val == val) {
            if (temp.next.next != null) {
                temp.next = temp.next.next;
            } else {
                temp.next = null;
            }
            break;
        }
        temp = temp.next;
    }
    return head;
}

删除链表的倒数第k个节点

https://leetcode.cn/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/

public ListNode getKthFromEnd(ListNode head, int k) {
    ListNode fast = head;
    ListNode slow = head;
    //让快指针先走k步
    for (int i = 0; i < k; i++) {
        fast = fast.next;
    }
    //快慢一起走,快走到尽头,慢就是倒数第k个
    while (true) {
        if (fast == null) {
            break;
        }
        fast = fast.next;
        slow = slow.next;
    }
    return slow;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/15529.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

洛谷 P1064 - 金明的预算方案(分组背包)

题目描述 金明今天很开心&#xff0c;家里购置的新房就要领钥匙了&#xff0c;新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是&#xff0c;妈妈昨天对他说&#xff1a;“你的房间需要购买哪些物品&#xff0c;怎么布置&#xff0c;你说了算&#xff0c;只要不超过 n…

HTML学生个人网站作业设计:(宠物官网8页)——bootstarp响应式含有轮播图,响应式页面

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 公司官网网站 | 企业官网 | 酒店官网 | 等网站的设计与制 | HTML期末大学生网页设计作业&#xff0c;Web大学生网页 HTML&#xff1a;结构 CSS&#…

H7-TOOL发布V2.19,脱机烧录新增中微半导体、广芯微电子、中移芯昇以及极海和灵动新系列,增加PWM发生器等功能(2022-11-17)

H7-TOOL详细介绍&#xff1a;H7-TOOL开发工具&#xff0c;1拖4/16脱机烧录&#xff0c;高速DAPLINK&#xff0c;RTOS Trace&#xff0c;CAN/串口助手, 示波器, RTT等&#xff0c;支持WiFi&#xff0c;以太网&#xff0c;高速USB和手持 - H7-TOOL开发工具 - 硬汉嵌入式论坛 - Po…

JavaScript对象与内置对象

JavaScript对象与内置对象 文章目录JavaScript对象与内置对象1.JavaScript的基本对象1.1 创建对象1.2 对象的调用1.3 构造函数和对象1.4 变量对象属性2.JavaScript的内置对象2.1 内置对象概念3.JavaScript的Math对象3.1 Math对象概念3.2 Math绝对值和三个取整方法3.3 随机数方法…

AndroidStudio 导入项目模块失败

平台 Ubuntu 20.04AndroidStudio Android Studio Dolphin | 2021.3.1 Patch 1 Build #AI-213.7172.25.2113.9123335, built on September 30, 2022 Runtime version: 11.0.130-b1751.21-8125866 amd64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. Linux 5.15.0-53-gen…

Structure-Aware Transformer for Graph Representation Learning

Structure-Aware Transformer for Graph Representation Learning 在图表示学习中&#xff0c;Transformer结构通过位置编码对图形结构进行编码&#xff0c;克服了GNN的几个局限性&#xff0c;但其使用位置编码生成的节点表示不一定能捕获他们之间的结构相似性&#xff0c;所以…

「Redis数据结构」哈希表(Dict)

「Redis数据结构」哈希表&#xff08;Dict&#xff09; 文章目录「Redis数据结构」哈希表&#xff08;Dict&#xff09;[toc]一、概述二、结构三、哈希冲突四、链式哈希五、rehash六、 渐进式 rehash七、总结参考我们知道Redis是一个键值型&#xff08;Key-Value Pair&#xff…

Python自制图片拼图小游戏

前言 唉&#xff0c;怎么说&#xff0c;感觉只有上班的时候摸鱼玩游戏才是最爽的 等于带薪摸鱼&#xff0c;现在不是有点流行说什么 带薪…带薪** 干嘛的 今天也是有点无聊&#xff0c;就想起之前搞了个拼图的小游戏&#xff0c;可以自己更改照片的 嘿嘿 这不刚玩了一局&am…

【Python】Pyside6简易版教程

文章目录一、安装及常见指令1.1 安装1.2 转换指令二、设计UI2.1 类别2.1.1 Spacer2.1.2 Buttons2.1.3 Input Widgets2.1.4 Display Widgets2.1.5 注意事项2.2 对象和属性2.2.1 对象2.2.2 属性2.2.2.1 属性的层级结构2.2.2.2 重要的属性2.2.2.3 插入图片三、回到Python3.1 给现有…

公众号配置调试“errMsg“:“config:fail,invalid signature

一:登陆“微信公众平台”,查看“ip白名单是否设置” ,之前是个可选项,现在是必须设置 二: 1:获取access_token微信公众平台接口调试工具https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=%E5%9F%BA%E7%A1%80%E6%94%AF%E6%8C%81&form=%E8%8E%B…

JUC03-volatile、CAS及并发原子类

一、 Volatile Volatile可以用来修饰成员变量和静态成员变量&#xff0c;保证可见性、有序性 可见性&#xff1a;保证volatile修饰的变量每次读取都会从主从中进行读取而不是cpu缓存 有序性&#xff1a;对Volatile修饰变量进行写操作时&#xff0c;会在该操作后加上写屏障&…

【附源码】计算机毕业设计JAVA校园教育服务平台

【附源码】计算机毕业设计JAVA校园教育服务平台 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA my…

【FLASH存储器系列十】Nand Flash芯片使用指导之一

目录 1.1 芯片简介 1.2 功能框图 1.3 存储结构 1.4 信号定义 1.5 双平面&#xff08;plane&#xff09;操作 1.6 Die间交错操作 1.7 错误管理 今天以MT29F8G08AJADAWP芯片为例&#xff0c;说明nand flash的操作方法。 1.1 芯片简介 这是一款镁光的容量8Gb&#xff0c;总…

功能上新 | Magic Data Annotator智能出行舱内舱外全场景标注

随着人工智能、互联网、大数据、5G等新技术应用和汽车产业变革的蓬勃兴起&#xff0c;智能汽车已成为汽车产业发展的重要战略方向。目前&#xff0c;智能驾驶已经成为目前车企营销的核心竞争力。在人车协作过程中&#xff0c;智能汽车最重要的功能就是车舱内外视觉功能&#xf…

Redis入门

目录 NoSQL概述 什么是NoSQL&#xff1f; 为什么要用NoSQL&#xff1f; NoSQL 的特点 NoSQL的四大分类 Redis入门 概述 基础知识 五大数据类型 Redis——Key String(字符串) List(列表) Set(集合) Hash(哈希) Zset(有序集合) 三种特殊数据类型 Geospatial 地理…

冯诺依曼体系结构、操作系统的认识

目录前言1️⃣ 冯诺依曼体系结构1.1 基本概念1.2 存储器的作用1.3 CPU的指令集1.4 实例2️⃣ 操作系统2.1 概念2.2 如何理解“管理”2.2.1 管理的本质2.2.2 管理的方法2.3 系统调用总结前言 &#x1f4ad;本文是对计算机底层学习的初步认识的知识铺垫&#xff0c;初步了解冯诺依…

高等数值计算方法学习笔记第4章第二部分【数值积分(数值微分)】

高等数值计算方法学习笔记第4章第二部分【数值积分&#xff08;数值微分&#xff09;】四、龙贝格求积公式&#xff08;第三次课&#xff09;1.梯形法的递推化 (变步长求积法)2.龙贝格算法五、高斯求积公式1.一般理论(1定义1例题)2.构造高斯求积公式方法&#xff08;二&#xf…

0098 蓝桥杯真题01

import java.util.Calendar; /* * 世纪末的星期 * 曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。还有人称今后的某个世纪末的12月31日&#xff0c;如果是星期一则会… * 有趣的是&#xff0c;任何一个世纪末的年份的12月31日都不可能是星期一!! 于是&…

php socket说明 stream流说明

socket说明 我们都知道通过IP&#xff0c;端口等可以实现两台机器之间的数据互通&#xff0c;但具体要怎么操作&#xff0c;系统给我们提供了socket接口&#xff0c;通过调用socket函数就可以实现互通。php的socket扩展和C本身的非常相似&#xff0c;如果找不到php相关的资料&…

[附源码]SSM计算机毕业设计中小学微课学习系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…