03单链表
、# 单链表
单链表是一种链式存储的数据结构,用一组地址任意的存储单元存放线性表中的数据元素³。单链表中的每个结点包含一个数据域和一个指针域,数据域存放数据元素,指针域存放下一个结点的地址²³。单链表的第一个结点称为头结点,最后一个结点称为尾结点,尾结点的指针域为空¹²。单链表可以用来实现栈、队列等抽象数据类型,它的优点是插入和删除操作方便,但是缺点是访问任意元素需要从头开始遍历¹²。
源: , 2023/3/6(1) 单链表_百度百科. https://baike.baidu.com/item/%E5%8D%95%E9%93%BE%E8%A1%A8/3228368 访问时间 2023/3/6.
(2) 数据结构1 | 单链表其实真的很简单。 - 知乎. https://zhuanlan.zhihu.com/p/52989925 访问时间 2023/3/6.
(3) 一口气搞懂「链表」,就靠这20+张图了 - 知乎. https://bing.com/search?q=%e4%bb%80%e4%b9%88%e6%98%af%e5%8d%95%e9%93%be%e8%a1%a8 访问时间 2023/3/6.
(4) 什么是单链表,链式存储结构详解. http://c.biancheng.net/view/3336.html 访问时间 2023/3/6.
(5) 区块链技术与数据库的区别 你知道几个?. https://www.163.com/dy/article/HU6HCNUD05561SVZ.html 访问时间 2023/3/6.
练习
自定义一个IList
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _01_LinearList
{interface IListDS<T>{int GetLength();void Clear();bool IsEmpty();void Add(T item);void Insert(T item, int index);T Delete(int index);T this[int index] { get; }//取表的元素T GetEle(int index);//定义一个索引器,获取元素int Locate(T value);//按值查找}
}
自定义节点
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _01_LinearList
{/// <summary>/// 单链表的节点/// </summary>/// <typeparam name="T"></typeparam>class Node<T>{private T data;//存储数据private Node<T> next;//指针 用来指向下一个元素public Node(){data = default(T);next = null;}public Node(T value){data = value;next = null;}public Node(T value,Node<T> next){this.data = value;this.next = next;}public Node(Node<T> next){this.next = next;}public T Data{get { return data; }set { data = value; }}public Node<T> Next{get { return next; }set { next = value; }}}
}
自定义单链表类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _01_LinearList
{class LinkList<T> : IListDS<T>{//存储头结点private Node<T> head;//LinkList构造函数public LinkList(){head = null;}/// <summary>/// 当前值/// </summary>/// <param name="index"></param>/// <returns></returns>public T this[int index]{get {Node<T> temp = head;for (int i = 1; i <= index; i++){temp = temp.Next;}return temp.Data;}}/// <summary>/// 添加一个节点/// </summary>/// <param name="item"></param>public void Add(T item){Node<T> newNode = new Node<T>(item);//根据新的数据创建一个新的节点;//如果头节点为空,那么这个新的节点就是头节点if(head ==null){head = newNode;}else{//把新来的结点放到链表的尾部//要访问到链表的尾结点Node<T> temp = head;while (true){//如果temp.Next不为空,一直找下一个节点if (temp.Next!=null){temp = temp.Next;}else{break;}}temp.Next = newNode;//把新来的结点放到链表的尾部}}/// <summary>/// 清空/// </summary>public void Clear(){head = null;}/// <summary>/// 删除一个元素/// </summary>/// <param name="index"></param>/// <returns></returns>public T Delete(int index){T data = default(T);if (index==0)//删除头结点{ //让头结点用一个data装着data = head.Data;//让第二节点成为头结点head = head.Next;}//删除中间元素else{ //把头结点用temp装着Node<T> temp = head;//一直找到index-1的元素for (int i = 1; i < index-1; i++){//把节点往后移动一位temp = temp.Next;}Node<T> preNode = temp;Node<T> currentNode = temp.Next;data = currentNode.Data;Node<T> nextNode = temp.Next.Next;preNode.Next = nextNode;}return data;}/// <summary>/// 获取当前元素/// </summary>/// <param name="index"></param>/// <returns></returns>public T GetEle(int index){return this[index];}/// <summary>/// 获取长度/// </summary>/// <returns></returns>public int GetLength(){if (head==null){return 0;}Node<T> temp = head;int count = 1;while (true){if (temp.Next != null){count++;temp = temp.Next;}else{break;}}return count;}/// <summary>/// 插入一个元素/// </summary>/// <param name="item"></param>/// <param name="index"></param>public void Insert(T item, int index){Node<T> newNode = new Node<T>(item);if (index == 0)//插入到头结点{newNode.Next = head;head = newNode;}else{Node<T> temp = head;for (int i = 1; i <=index-1; i++){//让节点往后移动1个位置temp = temp.Next;}Node<T> preNode = temp;Node<T> currentNode = temp.Next;preNode.Next = newNode;newNode.Next = currentNode;}}/// <summary>/// 判断是否为空/// </summary>/// <returns></returns>public bool IsEmpty(){return head == null;}/// <summary>/// 定位value所在位置/// </summary>/// <param name="value"></param>/// <returns></returns>public int Locate(T value){Node<T> temp = head;if (temp==null){return -1;}else{int index = 0;while (true){if (temp.Data.Equals(value)){return index;}else{if (temp.Next!=null){temp = temp.Next;}else{break;}}}return -1;}}}
}
指针介绍
C#中的指针是一种变量,它存储了另一种类型的内存地址[1](https://www.php.cn/csharp-article-453529.html)。C#中的指针需要使用unsafe关键字来声明,因为它们是不安全的代码,也就是说CLR无法验证它们的安全性[2](https://blog.csdn.net/u013716859/article/details/122392387)。C#中可以定义为指针的类型有sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, decimal和bool[3](https://www.cnblogs.com/imlions/p/3203427.html)。指针可以用于调用API函数,提高程序的执行速度,或者操作复杂的数据结构[3](https://www.cnblogs.com/imlions/p/3203427.html)[4](https://blog.csdn.net/qq_34059233/article/details/105809946)。
相关文章:
03单链表
、# 单链表 单链表是一种链式存储的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。单链表中的每个结点包含一个数据域和一个指针域,数据域存放数据元素,指针域存放下一个结点的地址。单链表的第一个结点称为头结点,…...

ESLint、Prettier插件的安装与使用
在统一代码风格这一块,通常大家都会用到ESLint。虽然 ESLint 本身具备自动格式化代码的功能,但ESLint 的主要优势在于代码的风格检查并给出提示,而在代码格式化这一块 Prettier 做的更加专业,因此在实际项目开发中我们经常将 ESLi…...

matlab在管理学中的应用简matlab基础【三】
规划论及MATLAB计算 1、线性规划 问题的提出 例1. 某工厂在计划期内要安排甲、乙两种产品的生产,已知生产单位产品所需的资源A、B、C的消耗以及资源的计划期供给量,如下表: 问题:工厂应分别生产多少单位甲、乙产品才能使工厂获…...

NDK JNI 变声器实现
Android NDK 导入 C库的开发流程学习;通过使用fmod的C库,实现变声器功能。导入库文件1)复制fmod的C库到cpp目录下2)复制fmod的so库到jniLibs目录下3)复制fmod的jar库到libs目录下4)将声音文件复制到assets目…...
VMLogin防关联指纹浏览器的主帐号和子账号区别介绍
VMLogin主账户管理子账户,主要用于团队协作,分账户登录使用,主账户相当于老板,子账户相当于员工。 主账户创建并管理子账户; 主账户可以修改子账户的密码; 主账户可以设置子账户是否有创建配置文件权限&a…...

Apache DolphinScheduler GitHub Star 突破 10000!
点击蓝字 关注我们今天,Apache DolphinScheduler GitHub Star 突破 10000,项目迎来一个重要里程碑。这表明 Apache DolphinScheduler 已经在全球的开发者和用户中获得了广泛的认可和使用。DolphinScheduler 旨在解决公司日常运营中的大数据处理工作流调度…...

程序员中的女性力量——做不被定义的自己
她是office lady,亦是程序媛,程序员界的靓丽色彩,不可或缺。 “只有那些疯狂到以为自己能够改变世界的人——才能真正改变世界。” 女性该如何定义自己?程序媛怎么发挥自己最大的价值。 争取自己做选择,经济和思想都独…...
pb中Datawindow中每页打印固定行
Datawindow中每页打印固定行 第一步: 增加一个计算列,此计算列必须放在Detail段,Expression中输入:ceiling(getrow()/20),这里20还可以用全局函数取代,这样可以允许用户任意设置每页打印多少行。 第二步: 定义分组,选择菜单Rows->Create Group...按计算列字段…...
华为OD机试 - 内存池(C 语言解题)【独家】
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 使用说明本期题目:内存池题…...
SaaS简介
SaaS 简介 SaaS被认为是云计算的一部分,其他包括基础设施即服务(IaaS)、平台即服务(PaaS)、桌面即服务(DaaS)、托管软件即服务(MSaaS)、移动后端即服务(MBaaS)、数据中心即服务(DCaaS)、集成平台即服务(iPaaS)和信息技术管理即服务(ITMaaS) SaaS应用程序通常由web浏…...
unity 实现使用三张图片来表达车速,通过传值达到车速
//速度 public Image SpeedNums_Unit; public Image SpeedNums_Ten; //public Image SpeedNums_Hundred; //kw public Image MileageNums_Unit; public Image MileageNums_Ten; /// /// 仪表速度UI /// private void SpeedUI(string speedStr) {if (SpeedNums_Unit == null) …...

程序员看过都说好的资源网站,你值得拥有。
程序员必备的相关资源网站一.技术社区1.GitHub2.Gitee(码云)3.稀土掘金4.OSCHINA开源中国5.CSDN6.博客园7.SegmentFault(思否)8.Stack Overflow9.Golang中文社区10.ChinaUnix11.51CTO12.Ruby China二.技术教程1.Devdocs2.码农教程…...
【MySQL高级篇】第03章 用户与权限管理
第03章 用户与权限管理 1. 用户管理 1.1 登录MySQL服务器 启动MySQL服务后,可以通过mysql命令来登录MySQL服务器,命令如下: mysql –h hostname|hostIP –P port –u username –p DatabaseName –e "SQL语句"-h参数后面接主机…...

MySQL的分库分表?通俗易懂
1- 为什么要分库分表 如果一个网站业务快速发展,那这个网站流量也会增加,数据的压力也会随之而来,比如电商系统来说双十一大促对订单数据压力很大,Tps十几万并发量,如果传统的架构(一主多从)&a…...
elasticsearch 查询语法
match_all 查询所有 GET test/_search {"query": {"match_all": {}} }match 单字段匹配查询 GET test/_search {"query":{"match":{"name":"zhangsan"}} }multi_match 多字段匹配查询 GET test/_search {"…...
深入剖析MVC模型与三层架构
MVC(Model-View-Controller)模型和三层架构都是常见的软件架构模式,用于实现大型应用程序和软件系统。下面是对它们的深入剖析: MVC模型 MVC模型是一种将应用程序分成三个主要组件的软件架构模式,分别是模型…...

使用 Wall 搭建个人照片墙和视频墙
下载 Github:https://github.com/super-tongyao/wall 国内仓库(不推荐,只做加速访问,无编译包和发行版,以github仓库为准):https://gitee.com/Super_TongYao/wall 推荐github仓库,下载最新版…...

03_Linux压缩解压,用户用户组,文件权限
目录 Linux下常用的压缩格式 gzip 压缩工具 gzip 对文件夹进行压缩 bzip2 压缩工具 tar打包工具 对.tar.bz2 进行压缩和解压缩 对.tar.gz 进行压缩和解压缩 rar格式 zip格式 Linux用户 Linux用户组 创建用户和用户组 Linux文件权限 Linux文件权限修改 Linux下常用…...

硬盘分区数据恢复?这些方法助您解忧
案例:分区把电脑文件丢了,数据还能恢复吗? “急急急!!!本人电脑小白,在使用磁盘管理合并E、F分区的时候,不小心把D分区给删除了,D分区里面存放了很多重要的数据与文件&a…...

高校竞赛信息管理系统
摘要随着当今社会的发展,时代的进步,各行各业也在发生着变化,比如高校竞赛信息管理这一方面,利用网络已经逐步进入人们的生活。传统的高校竞赛信息管理,都是学生去学校查看竞赛信息然后再进行报名,这种传统…...

wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...

华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...

短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
Easy Excel
Easy Excel 一、依赖引入二、基本使用1. 定义实体类(导入/导出共用)2. 写 Excel3. 读 Excel 三、常用注解说明(完整列表)四、进阶:自定义转换器(Converter) 其它自定义转换器没生效 Easy Excel在…...
基于 HTTP 的单向流式通信协议SSE详解
SSE(Server-Sent Events)详解 🧠 什么是 SSE? SSE(Server-Sent Events) 是 HTML5 标准中定义的一种通信机制,它允许服务器主动将事件推送给客户端(浏览器)。与传统的 H…...

运行vue项目报错 errors and 0 warnings potentially fixable with the `--fix` option.
报错 找到package.json文件 找到这个修改成 "lint": "eslint --fix --ext .js,.vue src" 为elsint有配置结尾换行符,最后运行:npm run lint --fix...