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…...
高校竞赛信息管理系统
摘要随着当今社会的发展,时代的进步,各行各业也在发生着变化,比如高校竞赛信息管理这一方面,利用网络已经逐步进入人们的生活。传统的高校竞赛信息管理,都是学生去学校查看竞赛信息然后再进行报名,这种传统…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
沙箱虚拟化技术虚拟机容器之间的关系详解
问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...
