【C#进阶】简单数据结构类

在这里插入图片描述
简单数据结构类
在这里插入图片描述

文章目录

      • 1、Arraylist
        • 1、ArrayList的本质
        • 2、声明
        • 3、增删查改
        • 4、装箱拆箱
          • 思考 背包售卖
      • 2、Stack
        • 1、Stack的本质
        • 2、声明
        • 3、增取查改
        • 4、遍历
          • 思考 计算一个数的二进制
      • 3、Queue
        • 1、Queue的本质
        • 2、声明
        • 3、增取查改
        • 4、遍历
          • 思考 每隔一段时间打印一条消息
      • 4、Hashtable
        • 1、Hashtable本质
        • 2、声明
        • 3、增删查改
        • 4、遍历
          • 思考 单例制造怪物工厂

1、Arraylist

1、ArrayList的本质
ArrayLists是一个C#为封装好的类
它的本质是一个Object类型的数组
2、声明
using System.Collections;
ArrayList array = new ArrayList();
3、增删查改

array.Add(1);
ArrayList array2 = new ArrayList();
array2.Add(true);
//批量增加
array.AddRange(array2);array.Insert(1,"222");

移除指定元素array.Remove(1);
移除指定位置的元素array.RemoveAt(2);
清空array.Clear();

得到指定的元素array[0];
查看元素是否存在if(array.Contains("1")){Console.WriteLine("存在");}
正向查找元素位置找到的返回值是位置,没找到返回-1int index = array.IndexOf(true);Console.WriteLine(index);反向查找元素位置int index = array.LastIndexOf(true);Console.WriteLine(index);

array[0] = "666";
Console.WriteLine(array[0]);

遍历

长度Console.WriteLine(array.Count);
容量Console.WriteLine(array.Capacity);
遍历for(int i = 0; i < array.Count; i++){Console.WriteLine(array[i]);}
迭代器遍历foreach (object item in arrayList){Console.WriteLine(item);}
4、装箱拆箱
ArrayList本质是一个可以自动扩容的object数组
存储值类型装箱,将值类型取出来拆箱int i = 1;array[0] = i;		//装箱i = (int)array[0];	//拆箱
思考 背包售卖
//创建一个背包管理类,使用ArrayList存储物品
//实现购买物品,卖出物品,显示物品的功能;购买与卖出会导致金钱的变化
BagMgr bag = new BagMgr(9999);
Item i1 = new Item(1,9,"药",5);
Item i2 = new Item(2,99,"书",3);
Item i3 = new Item(3,999,"刀",1);
bag.BuyItem(i1);
bag.BuyItem(i2);
bag.BuyItem(i3);bag.SellItem(i3);
bag.SellItem(1,1);
bag.SellItem(2,1);
class BagMgr
{private ArrayList items;private int money;public BagMgr(int money){this.money = money;items = new ArrayList();}public void BuyItem(Item item){if (item.num <= 0 || item.money < 0){Console.WriteLine("错误物品或金钱");return;}if (money < item.money * item.num){Console.WriteLine("钱不够");return;}money -= item.money * item.num;Console.WriteLine("购买{0}{1}个,花费{2}钱,余额{3}", item.name,item.num,item.money*item.num,money);for (int i = 0; i < items.Count;i++){if ((items[i] as Item).id == item.id){(items[i] as Item).num += item.num;return;}}items.Add(item);}public void SellItem(Item item){for (int i = 0; i < items.Count; i++){if ((items[i] as Item).id == item.id){int num = 0;string name = (items[i] as Item).name;int money = (items[i] as Item).money;if ((items[i] as Item).num > item.num){num = item.num;}else{num = (items[i] as Item).num;items.RemoveAt(i);}int sellMoney = money* num;this.money += sellMoney;Console.WriteLine("卖了{0}{1}个,赚了{2},余额{3}", name, num, sellMoney, this.money);return;}}}public void SellItem(int id, int num = 1){Item item = new Item(id,num);SellItem(item);}public void ShowItem(){Item item;for (int i = 0; i < items.Count; i++){item = items[i] as Item;Console.WriteLine("有{0}{1}个", item.name, item.num);}Console.WriteLine("余额{0}",money);}
}
class Item
{public int id;public int money;public string name;public int num;public Item(int id, int num){this.id = id;this.num = num;}public Item(int id, int money, string name, int num){this.id = id;this.money = money;this.name = name;this.num = num;}
}

2、Stack

1、Stack的本质
Stack 是一个C#为我们封装好的类
它的本质是Object[]数组
Stack是栈存储容器,栈是一种先进后出的数据结构
2、声明
Stack stack = new Stack();
3、增取查改
//压栈stack.Push(1);stack.Push("123");stack.Push(true);//弹栈//栈中不存在删除的概念,只有取的概念object v1 = stack.Pop();Console.WriteLine(v1);v1 = stack.Pop();Console.WriteLine(v1);//栈无法查看指定位置的元素,只能查看栈顶的内容v1 = stack.Peek();Console.WriteLine(v1);//2、查看元素是否存在于栈中if (stack.Contains("123")){Console.WriteLine("存在123");}//栈无法改变其中的元素,只能存和取,有清空方法stack.Clear();
4、遍历
1、长度Console.WriteLine(stack.Count);2、用foreack遍历//遍历出来的顺序从顶到低foreach(object item in stack){Console.WriteLine(item);}3、将栈转换为object数组//遍历出来的顺序从顶到低object[] array = stack.ToArray();for (int i = 0; i < array.Length; i++){Console.WriteLine(array[i]);}4、循环弹栈while (stack.Count > 0){object item = stack.Pop();Console.WriteLine(item);}
思考 计算一个数的二进制
//写一个方法计算任意一个数的二进制
//使用栈结构方式存储,之后打印处理
Calc(10);
static void Calc(uint num)
{Stack stack = new Stack();while (true){stack.Push(num % 2);num /= 2;if (num == 1 || num ==0){stack.Push(num);break;}}while(stack.Count > 0){Console.Write(stack.Pop());}
}

3、Queue

1、Queue的本质
Stack 是一个C#为我们封装好的类
它的本质是Object[]数组
Queue是队列存储容器
队列是一种先进先出的数据结构
2、声明
Queue queue = new Queue();
3、增取查改
Queue queue = new Queue();queue.Enqueue(1);queue.Enqueue("123");queue.Enqueue(1.3f);
取 取出先进入的对象object v = queue.Dequeue();Console.WriteLine(v);1、查看队列头部元素但不会移除v = queue.Peek();2、查看元素是否存在于队列中if (queue.Contains(1.3f){Console.WriteLine("存在");}queue.Clear();
4、遍历
1、长度Console.WriteLine(queue.Count);
2、用foreach遍历foreach (object o in queue){Console.WriteLine(o);}
3、转换为数组forobject[] array = queue.ToArray();for (int i = 0; i < array.Length; i++){Console.WriteLine(array[i]);}
4、循环出列while (queue.Count > 0){object o = queue.Dequeue();Console.WriteLine(o);}
思考 每隔一段时间打印一条消息
//使用队列存储消息,一次性存10条消息,每隔一段时间打印一条消息
//控制台打印消息时要有明显顿挫感
Queue queue = new Queue();
queue.Enqueue("获得44金币");
queue.Enqueue("获得装备");
queue.Enqueue("获得药草");
queue.Enqueue("获得经验");
queue.Enqueue("获得秘籍");
queue.Enqueue("获得顶级秘笈");queue.Enqueue("获得装备");
queue.Enqueue("获得药草");
queue.Enqueue("获得经验");
queue.Enqueue("获得秘籍");
queue.Enqueue("获得无上心法");int updateIndex = 1;
while (queue.Count > 0)
{if (updateIndex % 77777777 == 0){if (queue.Count > 0){Console.WriteLine(queue.Dequeue());}updateIndex = 0;}updateIndex++;
}

4、Hashtable

1、Hashtable本质
Hashtable(散列表)是基于键的哈希代码组织起来的键值对
它的主要作用是提高数据查询的效率
使用键来访问集合中的元素
2、声明
Hashtable hashtable = new Hashtable();	
3、增删查改
//不能出现相同的键hashtable.Add(1,"234");hashtable.Add(2,"255");//1、只能通过键去删除hashtable.Remove(2);//删除不存在的键,没反应//2、直接清空hashtable.Clear();//1、通过键查看值,找不到返回空Console.WriteLine(hashtable[1]);//2、查看书否存在//根据键检测if (hashtable.Contains(1)){Console.WriteLine("存在");}if (hashtable.ContainsKey(2)){Console.WriteLine("存在");}
//根据值检测if (hashtable.ContainsValue("255")){Console.WriteLine("存在");}//只能改键对应的值内容,无法改键hashtable[1] = false;
4、遍历
得到键值对 对数Console.WriteLine(hashtable.Count);
1、遍历所有键foreach (Hashtable ht in hashtable.Keys){Console.WriteLine("键" + ht);Console.WriteLine("值" + hashtable[ht]);}
2、遍历所有值foreach (Hashtable ht in hashtable.Values){Console.WriteLine("值" + ht);}
3、键值对一起遍历foreach(DictionaryEntry item in hashtable){Console.WriteLine("键" + item.Key + "值" + item.Value);}
4、迭代器遍历IDictionaryEnumerator myEnumerator = hashtable.GetEnumerator();bool flag = myEnumerator.MoveNext();while (flag){Console.WriteLine("键" + myEnumerator.Key + "值" + myEnumerator.Value);flag = myEnumerator.MoveNext();}
思考 单例制造怪物工厂
//制作一个怪物类管理器,提供创建怪物
//移除怪物的方法,每个怪物都有自己的唯一id
MonsterMgr.Instance.AddMonster();
MonsterMgr.Instance.AddMonster();
MonsterMgr.Instance.AddMonster();
MonsterMgr.Instance.AddMonster();
MonsterMgr.Instance.AddMonster();
MonsterMgr.Instance.AddMonster();
MonsterMgr.Instance.RemoveMonster(0);
MonsterMgr.Instance.RemoveMonster(5);
class MonsterMgr 
{ private static MonsterMgr instance = new MonsterMgr();private Hashtable monstersTable = new Hashtable();private MonsterMgr() { }public static MonsterMgr Instance{get{return instance;}}private int monsterID = 0;public void AddMonster(){Monster monster = new Monster(monsterID);Console.WriteLine("创建了id为{0}怪物", monsterID);monsterID++;monstersTable.Add(monster.id, monster);}public void RemoveMonster(int monsterID) { if(monstersTable.ContainsKey(monsterID)){(monstersTable[monsterID] as Monster).Dead();monstersTable.Remove(monsterID);}}
}
class Monster
{public int id;public Monster(int id){this.id = id;}public void Dead(){Console.WriteLine("怪物{0}死亡",id);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3031340.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

腾讯共享WiFi项目的加盟方式有哪些?

在这个互联互通的时代&#xff0c;共享经济的浪潮正以前所未有的力量席卷全球&#xff0c;而腾讯作为中国互联网巨头之一自然不会错过这场盛宴。其推出的腾讯共享WiFi项目自问世以来就备受瞩目&#xff0c;它不仅为用户提供便捷的上网服务&#xff0c;更为创业者打开了一个全新…

ModuleSim 仿真找不到模块 module is not defined

提示如下&#xff1a; # vsim -t 1ps -L altera_ver -L lpm_ver -L sgate_ver -L altera_mf_ver -L altera_lnsim_ver -L cycloneive_ver -L rtl_work -L work -voptargs""acc"" pulse_generator_tb # Start time: 14:26:25 on May 10,2024 # ** Note: (…

【全部更新】2024数维杯A题完整成品代码文章思路结果分享

A题 多源机会信号建模与导航分析 摘要 全球卫星定位系统&#xff08;GPS&#xff09;虽广泛应用于全球定位与导航&#xff0c;但其在室内、隧道以及建筑密集区等复杂环境中的有效性受限。为解决这一局限性&#xff0c;本研究探讨了一种基于机会信号的自主定位导航方法。 机会信…

一文看懂第三方支付账户体系

什么是账户&#xff1f; 账户是根据会计科目设置的&#xff0c;具有一定格式和结构&#xff0c;用于分类反馈会计要素增加变动情况及其结果的载体。设置账户是会计核算的重要方法之一。 同会计科目分类相对应&#xff0c;账户按其提供的信息详细程度和统驭关系不同分为总账账户…

ICRA 2024 成果介绍:基于 RRT* 的连续体机器人高效轨迹规划方法

近来&#xff0c;连续体机器人研究受到越来越多的关注。其灵活度高&#xff0c;可以调整形状适应动态环境&#xff0c;特别适合于微创手术、工业⽣产以及危险环境探索等应用。 连续体机器人拥有无限自由度&#xff08;DoF&#xff09;&#xff0c;为执行空间探索等任务提供了灵…

sssadsa

目录 Baidu Comate的功能安装流程功能特性 代码生成代码解释代码补充代码注释智能问答 总结 Baidu Comate: 智能编程助手 在人工智能的驱动下&#xff0c;开发者的编程体验正发生天翻地覆的变化。技术的革新和突破带来的是更智能、高效的工具。Baidu Comate智能代码助手&…

【Vue】Vue的核心

目录 计算属性-computed插值语法实现methods实现计算属性实现使用使用总结&#xff1a; 监视属性-watch监视的两种写法&#xff1a;深度监视备注&#xff1a; computed和watch之间的区别 绑定样式class样式绑定字符串写法数组写法对象写法 style样式绑定对象式1对象式2数组式 条…

汗之谜语,流产之哀:肾合唤醒生命花园的璀璨绽放

在这个疾驰的时代洪流中&#xff0c;女性宛若四季更迭间绚烂绽放的花朵&#xff0c;她们在风雨的锤炼与暖阳的抚慰下&#xff0c;演绎着生命的绚烂篇章。但当这份细腻柔美的内在花园偶遇冷冽寒潮&#xff0c;诸如汗水的异常涌动与生命的意外流失&#xff0c;就如同春暖花开之际…

Wallace树乘法器及Verilog实现

一、Wallace树乘法器 Wallace树乘法器就是将多个部分积进行分组&#xff0c;每三个一组&#xff0c;最后如果剩下的部分积个数不够三个的不做处理&#xff0c;然后将各组的部分积进行相加得到和以及进位信息&#xff0c;直到最终只剩下两行部分积&#xff0c;相加后得到最终结…

界面组件DevExpress Reporting中文教程 - 标记(可访问)PDF导出增强

DevExpress Reporting是.NET Framework下功能完善的报表平台&#xff0c;它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集&#xff0c;包括数据透视表、图表&#xff0c;因此您可以构建无与伦比、信息清晰的报表。 可访问性支持在DevExpress这里仍然是一个高优先…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 5月11日,星期六

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年5月11日 星期六 农历四月初四 1、 央行新信号&#xff1a;统筹研究消化存量房产和优化增量住房的政策措施。 2、 民政部等七部门规范养老机构预收费&#xff1a;预收周期不得超12个月。 3、 气象局&#xff1a;南方将迎新…

未来相遇过去:博物馆藏品管理平台的科技革新之旅

引言&#xff1a; 尊重历史&#xff0c;意味着保护其实体的载体。在博物馆这个时间的容器中&#xff0c;每一件藏品都承载着人类文明的印记&#xff0c;它们是历史的低语&#xff0c;是过去对现在的细语。在这篇文章中&#xff0c;我将带您走进博物馆的幕后&#xff0c;探究藏品…

软件测试之 性能测试 性能测试基础指标 Loadrunner、Jmeter等工具

你好,我是Qiuner. 为记录自己编程学习过程和帮助别人少走弯路而写博客 这是我的 github gitee 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 &#x1f604; (^ ~ ^) 想看更多 那就点个关注吧 我会尽力带来有趣的内容 本文档基于 https://www.bilibili.com/video/BV1wC4y1Y…

安全 | 开源入侵防御系统 Snort

目录 Snort 概要 入侵预防系统模式 数据包记录器和嗅探器模式 网络安全学习路线 &#xff08;2024最新整理&#xff09; 学习资料的推荐 1.视频教程 2.SRC技术文档&PDF书籍 3.大厂面试题 特别声明&#xff1a; Snort 概要 Snort 概要 是世界上最重要的开源入…

【深度学习】Diffusion扩散模型原理解析1

1、前言 diffusion&#xff0c;这几年一直很火的模型&#xff0c;比如这段时间在网上的文生图大模型——Stable diffusion。就是以diffusion作为基底模型&#xff0c;但由于该模型与VAE那边&#xff0c;都涉及了较多了概率论知识&#xff0c;实在让人望而却步。所以&#xff0…

如何对团队成员进行六西格玛管理的培训?

在现代企业中&#xff0c;六西格玛管理已成为提升产品质量、减少浪费、提高生产效率的重要工具。然而&#xff0c;要想充分发挥六西格玛管理的优势&#xff0c;必须拥有一支熟练掌握这一方法的团队。因此&#xff0c;对团队成员进行六西格玛管理培训至关重要。具体步骤如深圳天…

【话题】你用过最好用的AI工具有那些

大家好&#xff0c;我是全栈小5&#xff0c;欢迎阅读小5的系列文章&#xff0c;这是《话题》系列文章 目录 背景一、C知道二、CSDN工具集三、AI工具的普及与受欢迎程度四、AI工具的实际应用与影响五、总结与展望文章推荐 背景 探讨人们在使用AI工具时&#xff0c;最喜欢的和认…

【JS 的数据类型】

JS 的数据类型 基本数据类型 js有8种基本数据类型&#xff0c;分别为&#xff1a;undefined、number、Object、null、Symbol、Boolean、String、BigInt&#xff1b; 其中Symbol和BigInt是ES6新增的数据类型&#xff1a; ● Symobol代表独一无二的值&#xff0c;可以用来代表对…

本安防爆手机在电力行业中的应用

在电力行业这一充满挑战与风险的领域中&#xff0c;安全始终是最为首要的考量。电力巡检、维修等作业往往涉及易燃、易爆环境&#xff0c;这就要求工作人员配备能够在极端条件下保障通讯和作业安全的专业设备。防爆手机应运而生&#xff0c;以其独特的设计和卓越的性能&#xf…

Spring框架学习-详细

文章目录 1. Spring简介1.1 面向接口编程1.2 Spring简介1.3 Spring体系结构 2 Spring IoC - 基于XML2.1 Sping框架部署&#xff08;IoC&#xff09;2.2 Spring IoC使用2.3 IoC和DI2.4 DI依赖注入Spring容器通过反射方法实现属性注入有三种方式1. set方法注入2. 构造器注入 2.5 …