当前位置: 首页 > news >正文

学习笔记 --C#基础其他知识点(数据结构)

C#中的数据结构《二》–视频学习笔记

在数据结构的分类:
1.集合 2.线性 3.树形 4.图状结构

数据结构是数据在程序中的存储结构,和基本的数据操作
算法:解决问题的解决思路,基于数据结构

本课程包括:线性表,栈和队列,串和数组,简单的排序方法,快速排序

1.线性表:

一对一线性关系,位置有先后关系,一个接着一个排列的数据结构
(C#)CLR中的线性表:
1.提供了一个非泛型接口IList接口,接口中的项是object,实现了IList的类有:ArrayList,ListDictionary,StringCollection,StringDictionary。
2.提供了泛型的IList接口,实现了List接口的类有List【重要】

使用:

//1.使用list线性表
List<string> strlist = new List<string>();
//存入数据
strlist.Add("1");   //0
strlist.Add("2");   //1
strlist.Add("3");   //2
strlist.Add("4");   //3
//读出数据
Console.WriteLine(strlist[3]);  //通过索引器访问元素
//移除字符串
strlist.Remove("4");    //根据内容移除
strlist.Remove(strlist[3]);     //根据索引移除
//大小
Console.WriteLine(strlist.Count);
//清空数据
strlist.Clear();

⭐如果自己去实现一个线性表,如何去实现?
线性表的实现方式有下面几种:顺序表,单链表,双向链表,循环链表。
⭕顺序表:是最简单的存储结构,把表中的元素一个接一个地放进内存,特点:表中相邻的数据元素在内存中的存储位置也相邻。
写一个新的接口:IListDS(接口一般以I开头)【同时也使用泛型编程和接口】

namespace List_T_Study
{interface IListDS<T>    //泛型接口{int GetLength();void Clear();bool IsEmpty();void Add(T item);void Insert(int index, T item);T Delate(int index);T this[int index] {  get;  }    //索引T GetEle(int index);    //根据索引得到值int Locate(T value);    //根据值得到索引}
}

以顺序表为例,实现接口,继承IListDS接口之后,实现全部的接口函数
由于篇幅原因,只显示

namespace List_T_Study
{//顺序表的实现方式class SeqList<T> : IListDS<T>{private T[] data;   //用来存储数据private int count = 0;  //表示存了多少个数据public SeqList(int size){//传入固定大小【最大容量】,不提供自动扩容的功能(系统中的list有自动扩容的功能)data = new T[size];}public SeqList():this (10) //默认构造函数 容量为10{}public T this[int index] => throw new NotImplementedException();//添加public void Add(T item){if (count == data.Length)   //说明当前顺序表已经存满了,不允许再存入{Console.WriteLine("当前顺序表已经存满了,不允许再存入");}else{data[count] = item;count++;}}public T GetEle(int index){if(index>=0 && index<=count-1)  //当索引存在return data[index];else{Console.WriteLine("索引不存在");return default(T);}}//取得数据的个数public int GetLength(){return count;}}
}

⭕单链表:
顺序表在插入删除时需要移动元素来实现,影响了运行效率,链表不要求逻辑上相邻的数据元素在物理存储位置上也相邻,但也同时失去了顺序表可随机存储的优点。
先定义一个节点的类:Node

然后再新建一个LinkList的类,类似顺序表继承IListDS接口,并实现接口的函数。

⭕双向链表:
prev指针,data存储数据,next指针

⭕循环链表:
循环链表:最后一个元素指向了第一个元素

2.栈和队列:

也是线性结构
⭕栈:先进后出
C#基类库中的栈:泛型的Stack类
重要方法:Push入栈,pop出栈,peek获取栈顶数据,clear清空,count获取栈中的数据的个数

//3.使用BCL中Stack<T>  栈
Stack<char> stack = new Stack<char>();stack.Push('a');
stack.Push('b');
stack.Push('c');
Console.WriteLine(stack.Count);

⭐如果自己去实现一个栈,如何去实现?
写一个新的接口:IStackDS(接口一般以I开头)【同时也使用泛型编程和接口】

namespace List_T_Study
{//栈接口interface IStackDS<T>{int Count { get; }int GetLength();bool IsEmpty();void Clear();void Push(T item);T Pop();T Peek();}
}

分为顺序栈和链栈,顺序栈定义数组存放,链栈以链表的形式,新建一个SeqStack类,继承接口IStackDS并实现接口函数。
列举一部分函数:

namespace List_T_Study
{class SeqStack<T> : IStackDS<T>{private T[] data;//数据private int top;    //栈顶的标志public SeqStack(int size){data = new T[size];top = -1;}public SeqStack():this(10) {//无参构造 则默认传长度10}public int Count {get{return top+1;}}public T Pop(){T temp = data[top];top--;return temp;}public void Push(T item){data[top+1] = item;top++;}}
}

链栈,需要知道
⭕队列:先进先出
插入限定在表的尾部,
C#(CLR中的队列):泛型Queue类,
常用方法:Enqueue入队(放在队尾),Dequeue出队(移除队首元素),Peek,clear,count

//4.队列
Queue<int> queue = new Queue<int>();  
queue.Enqueue(1);
queue.Enqueue(2);
queue.Enqueue(3);
queue.Dequeue();
Console.WriteLine(queue.Count);

栈和队列应用举例:回文判断

3.串和数组

实现字符串类的存储,构造和比较

4.排序

介绍,直接插入排序,简单选择排序,快速排序思想,

相关文章:

学习笔记 --C#基础其他知识点(数据结构)

C#中的数据结构《二》–视频学习笔记 在数据结构的分类&#xff1a; 1.集合 2.线性 3.树形 4.图状结构 数据结构是数据在程序中的存储结构&#xff0c;和基本的数据操作 算法&#xff1a;解决问题的解决思路&#xff0c;基于数据结构 本课程包括&#xff1a;线性表&#xff…...

AI与药学 | ChatGPT 在临床药学中的有效性以及人工智能在药物治疗管理中的作用

《Effectiveness of ChatGPT in clinical pharmacy and the role of artificial intelligence in medication therapy management》这篇文献研究了ChatGPT在临床药学&#xff0c;特别是在药物治疗管理&#xff08;MTM&#xff09;中的有效性。 一、研究背景 (Background) MTM …...

Streamlining QA with Automated Testing for 3D Models

Quality assurance testing in 3D modeling is like walking a tightrope. Balancing the need for detailed accuracy and the time it takes to achieve it is no small feat. But what if we could make the tightrope wider, the task less daunting? And it’s where aut…...

产品原型设计

&#x1f923;&#x1f923;目录&#x1f923;&#x1f923; 一、Axure原型设计&#xff08;Axure RP 9 &#xff09;1.1 软件下载安装1.2 产品原型展示1.3 产品原型下载1.4 视频课程推荐 二、磨刀原型设计2.1 软件下载安装2.2 产品原型展示2.3 产品原型下载2.4 视频课程推荐 什…...

【Linux命令】su、sudo、sudo su、sudo -i、sudo -l的用法和区别

su 命令 su (Switch User 切换用户)&#xff0c;允许用户切换到另一个用户的身份&#xff0c;默认情况下是切换到 root 用户。 默认行为&#xff1a;如果只运行 su&#xff0c;则系统会要求输入 root 用户的密码来切换到 root 用户&#xff0c;获取管理员权限。 切换到其他用…...

【广州计算机学会、广州互联网协会联合主办 | ACM独立出版 | 高录用】第四届大数据、信息与计算机网络国际学术会议(BDICN 2025)

第四届大数据、信息与计算机网络国际学术会议&#xff08;BDICN 2025&#xff09;定于2025年01月10-12日在中国广州举行。会议旨在为从事“大数据”、“计算机网络”与“信息”研究的专家学者、工程技术人员、技术研发人员提供一个共享科研成果和前沿技术&#xff0c;了解学术发…...

HTML5 开关(Toggle Switch)详细讲解

HTML5 开关&#xff08;Toggle Switch&#xff09;详细讲解 1. 任务概述 开关&#xff08;Toggle Switch&#xff09;是一种用于表示二元状态&#xff08;如开/关&#xff09;的用户界面控件。用户可以通过点击开关来切换状态&#xff0c;常见于设置选项、开关功能等场景。 2…...

win32汇编环境下,双击窗口程序内生成的listview列表控件的某行,并提取其内容的示例程序

;运行效果 ;双击后 ;上源码&#xff0c;仔细研究里面的几条备注就理解原理了 ;提取窗口程序内生成的listview列表控件的内容示例程序 ;抄下面源码&#xff0c;可以在radasm里面直接编译运行。主要的部分加了备注。 ;>>>>>>>>>>>>>>…...

mysql主从断开后问题排查及修复

服务器mysql主从同步断开后&#xff0c;进行主从恢复 问题&#xff1a;mysql的主从断开了&#xff0c;在从服务器上通过以下命令查看状态&#xff0c;发现Slave_SQL_Running为No SHOW SLAVE STATUS\G;Slave_IO_Running&#xff1a;表示从服务器读取主服务器日志的线程 Slave_…...

[2025] 如何在 Windows 计算机上轻松越狱 IOS 设备

笔记 1. 首次启动越狱工具时&#xff0c;会提示您安装驱动程序。单击“是”确认安装&#xff0c;然后再次运行越狱工具。 2. 对于Apple 6s-7P和iPad系列&#xff08;iOS14.4及以上&#xff09;&#xff0c;您应该点击“Optinos”并勾选“允许未经测试的iOS/iPadOS/tvOS版本”&…...

计算机网络—————考研复试

第一章、计算机网络体系结构 1. OSI参考模型和TCP/IP模型&#xff1a; OSI与TCP/IP的记忆方法&#xff1a;只需把OSI的七层记住&#xff0c;将应用层、表示层、会话层一起记&#xff0c;到TCP/IP变成应用层。物理层和数据链路层换成网络接口层。把网络层换个字变成网际层。 而…...

[pdf、epub]260道《软件方法》强化自测题业务建模需求分析共216页(202412更新)

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 260道《软件方法》强化自测题业务建模需求分析共216页&#xff08;202412更新&#xff09; 已上传到本CSDN账号的资源 如果下载不到&#xff0c;也可以访问以下链接&#xff1a; ht…...

LeetCode - 初级算法 数组(只出现一次的数字)

只出现一次的数字 这篇文章讨论如何找到一个数组中只出现一次的数字,确保算法的时间复杂度为线性,且只使用常量额外空间。 免责声明:本文来源于个人知识与公开资料,仅用于学术交流。 描述 给定一个非空整数数组 nums,除了某个元素只出现一次以外,其余每个元素均出现两…...

Android性能优化概述

应用启动速度慢页面加载慢交互卡顿CrashANR 针对这些问题&#xff0c;可以逐一进行优化 1.启动优化 Android应用启动分为冷启动和热启动以及初次安装启动&#xff0c;此处只分析冷启动及热启动 冷启动&#xff1a;当设备无该应用进程时&#xff0c;用户操作拉起应用&#xff…...

C++ 实现map容器从大到小排序

map容器默认从小到大排序 利用仿函数可以修改map容器的排序规则为从大到小 示例&#xff1a; #include<iostream> #include<string> #include<map> using namespace std; class MyCompare { public: bool operator()(const int v1, const int v2) co…...

java中的文件操作

基础知识 1.File类对象的常用方法 一、 创建文件和目录 1.createNewFile() 用于创建一个新的文件&#xff0c;如果文件已经存在&#xff0c;则返回 false File file new File("C:\\Users\\P51\\Desktop\\file.txt"); file.createNewFile(); 2.mkdir() 用于创建一个…...

修复OpenHarmony系统相机应用横屏拍照按钮点不到的问题

适配OpenHarmony系统相机应用横屏UI&#xff0c; 相关pr: https://gitee.com/openharmony/applications_camera/pulls/233/files 适配效果 如何安装 编译好的hap提供在附件中 1.预置在源码&#xff0c;随固件安装 2.安装hap hdc shell "mount -o remount,rw /"…...

2024165读书笔记|《飞花令·合》——人生飘忽百年内,且须酣畅万古情

2024165读书笔记|《飞花令合》—— 人生飘忽百年内&#xff0c;且须酣畅万古情 屈原班婕妤曹植刘绘卢思道卢照邻苏味道刘希夷李白高适杜甫司空曙白居易温庭筠韦庄窦叔向张泌林逋柳永晏殊欧阳修李觏舒亶秦观陈瓘李清照陆游辛弃疾姜夔蒋捷吴伟业纳兰性德张惠言邓廷桢 《飞花令合》…...

哈夫曼编码(Huffman Coding)与哈夫曼树(Huffman Tree)

已知字符集{a,b,c,d,e,f}&#xff0c;若各字符出现的次数分别为6&#xff0c;3&#xff0c;8&#xff0c;2&#xff0c;10&#xff0c;4&#xff0c;则对应字符集中各字符的哈夫曼编码可能是&#xff08; &#xff09;。 A.00&#xff0c;1011&#xff0c;01&#xff0…...

Django项目中高效管理和使用选择常量

引言 在开发Django项目时,我们经常需要处理各种选择字段,比如用户类型、订单状态或产品分类等。如何有效地管理这些选择常量,使其在整个项目中保持一致性,同时又易于维护和更新呢?本文将介绍一种在Django项目中集中管理和使用选择常量的方法。 正文 © ivwdcwso (I…...

2026,AI Agent 真的开始上班了——从 MCP 协议到生产部署,一份踩坑实录

爆款标题备选2026 年&#xff0c;我司来了一个 AI 同事——Agent 落地实录MCP 协议 LangChain Dify&#xff1a;把 AI Agent 塞进生产环境的正确姿势BBC 报道了三个中国人的 AI 恐惧&#xff0c;但我想说点不一样的AI Agent 从 Demo 到生产&#xff0c;中间隔着一个 MCP 协议…...

从ERR_CERT_COMMON_NAME_INVALID错误,聊聊SSL证书里的Common Name和SAN到底有什么区别?

从ERR_CERT_COMMON_NAME_INVALID错误解析SSL证书中CN与SAN的演进逻辑 当你在Chrome浏览器中看到鲜红色的ERR_CERT_COMMON_NAME_INVALID警告页面时&#xff0c;背后隐藏的是一场持续二十年的证书标准进化史。这个看似简单的域名验证错误&#xff0c;实际上是现代网络安全体系对传…...

权限管理测试

在 RuoYi&#xff08;若依&#xff09;系统中&#xff0c;要实现一个自定义接口的权限验证&#xff0c;通常需要遵循 “后端定义 -> 前端配置 -> 角色分配 -> 测试验证” 的流程。以下是具体的实施步骤及详细解析&#xff1a;第一步&#xff1a;后端定义接口并添加注解…...

Python DXF处理库ezdxf的技术架构与工程实践深度解析

Python DXF处理库ezdxf的技术架构与工程实践深度解析 【免费下载链接】ezdxf Python interface to DXF 项目地址: https://gitcode.com/gh_mirrors/ez/ezdxf ezdxf是一个面向专业CAD数据交换的Python库&#xff0c;它提供了对DXF&#xff08;Drawing Exchange Format&am…...

56、CAN总线RC低通滤波器截止频率计算与实战

CAN总线RC低通滤波器截止频率计算与实战 一、一个让我熬夜三天的CAN通信故障 去年做某车载ECU项目,CAN总线在电机启动瞬间频繁丢帧。示波器抓波形,CAN_H对地毛刺高达8V,持续时间约200ns。团队里有人提议“加磁珠”,有人喊“上共模扼流圈”。我翻出TI的AN-2298应用笔记,发…...

从选型到设计:手把手教你根据7系列FPGA数据手册做项目选型(以Kintex-7为例)

从选型到设计&#xff1a;手把手教你根据7系列FPGA数据手册做项目选型&#xff08;以Kintex-7为例&#xff09; 在硬件系统设计中&#xff0c;FPGA选型往往决定着项目的成败。面对Xilinx 7系列丰富的产品线&#xff0c;工程师需要像外科医生选择手术器械一样精准——既要考虑当…...

别再手动标注了!用MakeSense一键导入YOLO标签,效率翻倍(附完整流程)

别再手动标注了&#xff01;用MakeSense一键导入YOLO标签&#xff0c;效率翻倍&#xff08;附完整流程&#xff09; 在计算机视觉领域&#xff0c;目标检测&#xff08;Object Detection&#xff09;项目的效率瓶颈往往出现在数据标注环节。传统工作流中&#xff0c;开发者需要…...

数据结构:3.包装类和泛型

【目标】1.了解包装类 2. 以 能阅读java集合源码 为目标学习泛型3.了解泛型1.包装类&#xff08;Wrapper Class&#xff09;1.1 引出包装类1.1.1 什么是包装类&#xff1f;一句话&#xff1a; 包装类就是把 Java 的 8 种基本数据类型&#xff08;int, double, char 等&a…...

告别本地图片!用GitHub+PicGo+Typora三件套,打造无缝Markdown写作体验(保姆级避坑指南)

零成本构建云端图床&#xff1a;GitHubPicGoTypora全自动化写作方案 在技术写作和知识管理领域&#xff0c;Markdown已成为事实上的标准格式。然而&#xff0c;当文档中需要插入大量图片时&#xff0c;传统本地存储方式会带来三个致命问题&#xff1a;文档分享时图片丢失、版本…...

WSL2下CUDA版本切换实战:从CUDA 12.0降级到11.1,成功安装diff-gaussian-rasterization

WSL2环境下CUDA版本切换与diff-gaussian-rasterization安装全指南 在AI和图形学项目的复现过程中&#xff0c;CUDA版本与依赖库的兼容性问题常常成为开发者的"拦路虎"。最近在复现一篇论文时&#xff0c;我遇到了diff-gaussian-rasterization库因CUDA版本不匹配而无…...