CS4L9——顺序存储和链式存储
CS4L9——顺序存储和链式存储
数据结构
数据结构是计算机存储、组织数据的方式(规则)
数据结构是指相互之间存在一种或多种特定关系的数据元素的集合
比如自定义的一个 类 也可以成为一种数据结构 自己定义的数据组合规则、
不需要把数据结构想的太复杂,简单来说,就是人定义的 存储数据 和 表示数据之间的 规则而已
常用的数据结构(前人总结和制定的一些经典规则):数组、栈、队列、链表、树、图、堆、散列表
顺序存储和链式存储 是数据结构中两种 存储结构
线性表
线性表是一种数据结构,是由n个具有相同特性的数据元素的有限序列
比如数组、ArrayList、Stack、Queue、链表等等
顺序存储
数组、Stack、Queue、List、ArrayList —— 顺序存储
只是 数组、Stack、Queue 的 组织规则不同而已
顺序存储就是用一种地址连续的存储单元依次存储线性表的各个数据元素
链式存储
单向链表、双向链表、循环链表 —— 链式存储
链式存储(链接存储):用一组任意的存储单元(节点)存储线性表中的各个数据元素
最基本的节点包括值和指向下一个节点的地址
...
CS4L8——Dictionary<>
CS4L8——Dictionary<>
本章代码关键字
1234567891011Dictionary<> //字典,通过指定类型的键值对存储值dictionary<>.Add() //添加键值对dictionary<>.Remove() //通过键移除键值对dictionary<>.Clear() //清空字典dictionary<>[] //通过索引器修改值和获取值dictionary<>.ContainsKey() //检测是否存在键dictionary<>.ContainsValue() //检测是否存在值dictionary<>.Count //字典键值对数量dictionary<>.Keys //字典所有的键dictionary ...
CS4L7——List<>
CS4L7——List<>
本章代码关键字
123456789101112List<> //泛型列表类,需要在实例化时指定存储元素类型,由于不使用object,存储值类型可避免装箱拆箱list<>.Add() //添加元素list<>.AddRange() //范围添加元素list<>.Insert() //插入list<>.Remove() //移除某个元素,有重复移除第一个list<>.RemoveAt() //移除某个位置上的元素list<>.Clear() //清空list<>.Contains() //列表是否存在某个元素list<>.IndexOf() //正向查找元素位置,从头找,找到的返回值是下标,若找不到则返回 -1,如果有重复就会返回第一个list<>.La ...
CS4L6——泛型约束
CS4L6——泛型约束
本章代码关键字
1where //泛型约束关键字
泛型约束
让泛型的类型有一定的限制,关键字:where,泛型约束一共有6种,可以组合使用(部分约束不能组合使用)
值类型 —— where 泛型字母 : struct
引用类型 —— where 泛型字母 : class
存在无参公共构造函数 —— where 泛型字母 : new()
某个类本身或者派生类 —— where 泛型字母 : 类名
某个接口的派生类型 —— where 泛型字母 : 接口名
另一个泛型类型本身或者派生类型 —— where 泛型字母 : 另一个泛型字母
where 泛型字母 : (约束的类型)
各泛型约束讲解
值类型约束
where 泛型字母 : struct 限定泛型只能为值类型
1234567891011121314class Test1<T> where T : struct{ public T value; public void TestFun<K>(K v) where K : struct & ...
CS4L5——泛型
CS4L5——泛型
泛型
泛型实现了类型参数化,达到代码重用目的,通过类型参数化来实现同一份代码上多种操作类型
泛型相当于类型占位符,定义类或方法时使用替代符代表变量类型,当真正使用类或者方法时在再具体指定类型
申明泛型时,它只是一个类型的占位符,泛型真正起作用的时候是在使用它的时候
泛型占位字符可以有 n 个,用逗号隔开,泛型占位字母一般是大写字母
不确定泛型类型时 获取默认值 可以用 default(占位字符),看到 <> 包裹的字母 那肯定是泛型
关键字:<>
泛型分类
泛型类和泛型接口
基本语法:
class 类名<泛型占位字母>
interface 接口名<泛型占位字母>
泛型函数
基本语法:函数名<泛型占位字母>(参数列表)
注意:泛型占位字母可以有多个,用逗号分开,常用泛型占位字母是 T
泛型类和泛型接口
泛型类在声明时,泛型参数可以替代成员的类型,实例化时,需要传入具体的类型,泛型就会替换为传入的类型
泛型接口是同理的
123456789101112131415161718 ...
CS4L4——Hashtable
CS4L4——Hashtable
本章代码关键字
123456789101112Hashtable //散列表,基于键的哈希代码组织起来的键值对,使用object存储hashtable.Add() //添加键值对hashtable.Remove() //根据键移除键值对hashtable.Clear() //清空hashtable[] //索引器hashtable.Contains() //检测是否存在键hashtable.ContainsKey() //检测是否存在键hashtable.ContainsValue() //检测是否存在值hashtable.Count //获取键值对数量Hashtable.Keys //获取键的集合hashtable.Values //获取值的集合hashtable.GetEnumerator() ...
CS4L3——Queue
CS4L3——Queue
本章代码关键字
12345678Queue //队列queue.Enqueue() //向队列内存储值queue.Dequeue() //从队列内取出值queue.Peek() //查看队列首位的值queue.Contains() //检查值是否存在于队列内部queue.Clear() //清空队列queue.Count //队列的元素数量queue.ToArray() //将队列转换为数组
Queue
Queue(队列)是一个C#为我们封装好的类,它的本质是 object[] 数组,只是封装了特殊的存储规则
Queue 是队列存储容器,队列是一种先进先出的数据结构
先存入的数据先获取,后存入的数据后获取,队列是先进先出
使用 Queue 需要引用 System.Collections 这个命名空间
123456789using System.Collections;class Program{ s ...
CS4L2——Stack
CS4L2——Stack
本章代码关键字
12345678Stack //栈类,使用object存储所有值stack.Push() //向栈压入值stack.Pop() //从栈弹出值stack.Peek() //查看栈顶部值,不弹出stack.Contains() //栈是否存在某个元素stack.Clear() //清空栈stack.Count //栈的数量stack.ToArray() //栈转换为数组
Stack
Stack(栈)是一个C#为我们封装好的类,它的本质是 object[] 数组,只是封装了特殊的存储规则
Stack 是栈存储容器,栈是一种先进后出的数据结构
先存入的数据后获取,后存入的数据先获取,栈是先进后出
使用 Stack 需要引用 System.Collections 这个命名空间
123456789using System.Collections;class Program{ stati ...
CS4L??——特性
CS4L??——特性
CS4L1——ArrayList
CS4L1——ArrayList
本章代码关键字
1234567891011121314System.Collections //各个数据集合类所在的命名空间Arraylist //数组列表类,使用object存储所有值arrayList.Add() //增加arrayList.AddRange() //范围增加arrayList.Insert() //插入arrayList.Remove() //移除某个元素arrayList.RemoveAt() //移除某个位置上的元素arrayList.Clear() //清空列表arrayList[] //列表可以通过索引器去读取元素值修改元素值arrayList.Contains() //检查列表是否存在某个元素arrayList.IndexOf() //正向查找元素位置,返回值是下标, ...