C# 哈希表与堆栈队列实战指南

一,关于hash表

1,数组结构: 长度是固定的,类型也是固定的

int\[\] l1 = { 1, 2, 3 };

2,动态集合: 长度不固定,类型不固定, 存储是object类型

ArrayList list = new ArrayList();

3,泛型集合: 长度不固定,类型固定

List<int> list1 = new List<int>();

4,字典: 长度不固定 类型固定

Dictionary<int , int > dict = new Dictionary<int , int>();

5,hash表: 和字典很类似, 存储的时候也是键值对的方法进行存储的,通过键获取对应的值,和字典不同的地方在于 ,哈希表存储键值对类型不固定

Hashtable h1 = new Hashtable();//创建hash表
h1.Add(1, 2);//添加键值对
h1.Add("name","张三");

6,查询键对应的值

Console.WriteLine(h11);

7,遍历哈希表所有的keys

foreach (var item in h1.Keys)
{
Console.WriteLine (item+"------");
}

8,遍历hash所有的value值

foreach (var item in h1.Values)
{
Console.WriteLine(item + "-=======-");
}

9,用for循环

object\[\] keys = new objecth1.Count;//定义object类型数组
h1.Keys.CopyTo(keys, 0);//把h1.Keys所有元素复制到keys

for (int i = 0; i < keys.Length; i++)
{
object key = keysi;
object value = h1key; // 通过键获取值
Console.WriteLine($"键:{key},值:{value}");

}

10,清空键值对
h1.Clear();

11,
遍历哈希表所有键值对

foreach (DictionaryEntry item in h1)
{
Console.WriteLine(item);//看看item是啥类型 System.Collection.DictionaryEntry

Console.WriteLine(item.Value + "-??????-");
}

12, 指定键进行移除

h1.Remove(1);

13,是否包含这个键

Console.WriteLine(h1.ContainsKey("name"));

14,修改

h1"name" = "你好";

15,键值对个数
Console.WriteLine(h1.Count);

二,关于堆栈-stack和队列

1,本节是按照线性数据结构,数据的存储方式进行对比的

2,栈; 对要操作的元素会进行一个后进先出的操作, 例如现实场景,电梯先进去的人后出来, 后进去的人先出来

3,推入栈的元素称为入栈操作

4,取出一个元素的操作称为出栈

5,队列:对元素进行先进先出操作 例如现实场景排队买饭

6,添加元素一般入队操作

7,取出元素一般出队操作

相关代码操作:

1,入栈:

Stack<string> s1 = new Stack<string>();//存放字符串的栈结构
s1.Push("余伟"); //入栈
s1.Push("麻子");
s1.Push("王二");

string name = s1.Pop();
Console.WriteLine(name+"========");//王二
Console.WriteLine (s1.Peek());//获取栈顶元素 余伟
Console.WriteLine(s1.Count);//2个

【1】,s1.Peek() 获取栈顶元素

【2】,s1.Count 获取个数

【3】,s1.Clear();//清空栈

【4】,s1.ToArray();//转成数组

2,关于队列:

出队操作:

Queue<string> q = new Queue<string>();
q.Enqueue("马化腾"); //出队
q.Enqueue ("马云");
q.Enqueue("马嘉祺");

Console.WriteLine(q.Count);
Console.WriteLine (q.Dequeue());//出队马化腾
Console.WriteLine(q.Peek());//获取对顶元素马云

【1】,q.Dequeue() 出队马化腾

【2】,q.Peek() 获取对顶元素马云

【3】,q.Clear();//清空队列

3,拓展:

按照存储区域分别解释堆和栈
特性 栈(Stack) 堆(Heap)
存储内容 值类型、方法参数、局部变量 引用类型对象、装箱的值类型
生命周期 随作用域结束自动释放 由垃圾回收器(GC)管理
分配速度 快(指针移动) 慢(动态查找可用内存)
内存布局 连续内存 非连续(可能产生碎片)
访问方式 直接 通过引用间接访问
线程关联 每个线程独有 所有线程共享
管理方式 编译器自动管理 垃圾回收器(GC)管理

相关推荐
林川~0116 分钟前
Unity 万能物理检测工具:射线检测 / 范围检测 / 层级过滤 / 编辑器可视化(可直接拿去用)
游戏·unity·c#·射线检测·通用工具
线上放牧人21 分钟前
Windows删除图标缓存
windows·python·pyqt
Koi慢热1 小时前
DayDayMap学术社区体验:卫星网络测绘专题用下来怎么样
网络·人工智能·windows·web安全·网络安全
web守墓人2 小时前
【goed/ui】自定义组件设计思想篇
linux·windows·ui·golang
free-elcmacom2 小时前
C语言字符指针与字符串字面量——从一道“剑指 Offer”笔试题说起
c语言·visual studio
2601_966949653 小时前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
m0_734571763 小时前
深入理解5g <十八>传输块tbsize的计算
开发语言·5g
He BianGu4 小时前
【WPF-VisionMaster】机器视觉通用平台V5.0版本发行说明
opencv·c#·wpf·halcon·机器视觉·visionmaster
tang_04274 小时前
【Hi.Ltd 专题】第9期:Interop 配置互操作(JSON/INI/XML/YAML/注册表/扫码)
经验分享·c#·hi.ltd系列
RAN11426760084 小时前
1.3第一个程序的介绍
开发语言·qt