【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://www.pswp.cn/web/12358.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/12358.shtml
英文地址,請注明出處:http://en.pswp.cn/web/12358.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Json類型轉換異常

class com.alibaba.fastjson.JSONObject cannot be cast to class com.xxx.xxOrder (com.alibaba.fastjson.JSONObject and com.xxx.xxOrder are in unnamed module of loader org.springframework.boot.loader.LaunchedURLClassLoader 25b5c5e3 大概率是因為 JSON.parseObjec…

Yocto學習筆記(三)配置Busybox

1 Busybox介紹 BusyBox 是一個開源的、輕量級的 Unix 工具箱&#xff0c;它集成了許多標準 Unix 工具的精簡版本。它被設計用來運行在資源受限的環境中&#xff0c;例如嵌入式系統或者啟動盤。BusyBox 將多個標準 Unix 實用工具整合到一個可執行文件中&#xff0c;這些工具包括…

如何加密保護U盤?U盤加密方法盤點

U盤是目前最常用的移動存儲設備&#xff0c;可以幫助我們存儲大量數據。而為了保護數據安全&#xff0c;我們需要加密保護U盤。下面我們就來盤點一下U盤加密的方法。 BitLocker加密 BitLocker是Windows的一種磁盤保護工具&#xff0c;通過加密整個磁盤來保護數據&#xff0c;同…

基于Springboot的校園疫情防控信息管理系統(有報告)。Javaee項目,springboot項目。

演示視頻&#xff1a; 基于Springboot的校園疫情防控信息管理系統&#xff08;有報告&#xff09;。Javaee項目&#xff0c;springboot項目。 項目介紹&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三層…

react生命周期及用法

React生命周期是React組件在掛載、更新和卸載過程中的一系列方法的集合。通過生命周期方法&#xff0c;我們可以在不同階段執行特定的操作&#xff0c;例如初始化組件、更新狀態、渲染UI等。 React生命周期分為三個階段&#xff1a;掛載階段、更新階段和卸載階段。以下是React…

Vscode編輯器 js 輸入log自動補全

最近換了新電腦&#xff0c;新下載了Vscode&#xff0c;記錄一下設置項。 Vscode 版本 想要的效果 js文件中輸入log&#xff08;點擊tab鍵&#xff09;&#xff0c;自動補全為 console.log() Vscode 文件》首選項》設置 搜索&#xff1a;snippets Emmet: Show Suggestions…

暗區突圍TWITCH掉寶領測試資格后,steam激活顯示是無效激活碼

自《暗區突圍》測試啟動以來&#xff0c;吸引了大量玩家關注&#xff0c;特別是通過在Twitch平臺上觀看直播即可獲得測試資格的活動&#xff0c;更是掀起了熱潮。然而&#xff0c;部分玩家在成功獲得激活碼后&#xff0c;在Steam平臺激活時遭遇了“無效激活碼”的問題。本文將提…

nginx 配置域名SSL證書HTTPS服務

下載 上傳根目錄 /home/wwwroot/xx.com/ssl 從新執行 添加域名命令 選擇添加SSL SSL Certificate file: 填寫 完整目錄 PEM文件地址 SSL Certificate Key file:填寫 完整目錄 key文件地址

python 對矩陣與矩陣之間對應位置的元素,做softmax操作,代碼實戰

1.對矩陣中對應位置的元素&#xff0c;做softmax 對于一個向量&#xff0c;softmax函數會對其中每一個元素進行指數運算&#xff0c;然后除以所有元素指數和的結果。當將其應用到多個矩陣的相應位置上時&#xff0c;我們實際上是在對每個位置的一組數&#xff08;從各個矩陣的同…

45.WEB滲透測試-信息收集-域名、指紋收集(7)

免責聲明&#xff1a;內容僅供學習參考&#xff0c;請合法利用知識&#xff0c;禁止進行違法犯罪活動&#xff01; 內容參考于&#xff1a; 易錦網校會員專享課 上一個內容&#xff1a;計算機王-CSDN博客 WEB指紋&#xff1a;Web指紋也叫web應用指紋。由于所使用的工具、技術…

PHP 自提時間

前端: 后臺設置: 代碼: public function getBusinessHour(){// 需求單門店$data (new StoreModel())->limit(1)->select()->toArray();$days explode(,, $data[0][shop_hours]);$businessHours $days[1];// 使用 explode 分割字符串&#xff0c;獲取開始和結束時…

ListView[new]

activity_main.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_height"match_parent"android:layout_width"match_parent"…

服務器租用中包含哪些?

服務器在目前的互聯網社會中起著十分重要的作用&#xff0c;服務器是網絡業務部署的重要載體&#xff0c;越來越多的企業和用戶選擇租用服務器業務來減少整體的成本&#xff0c;那么服務器租用中主要都包含哪些呢&#xff1f;接下來小編就來介紹一些其中的內容吧&#xff01; 首…

nginx 發布靜態資源

一. nginx 發布靜態資源 在nginx中nginx.conf配置文件中添加內容如下&#xff1a; server {listen 90;server_name localhost;# 配置靜態資源文件&#xff0c;就可以訪問了location / {root /home/fooie-shop;index index.html;}# 配置音頻和圖片資源location /imoo…

企業內部文化社區究竟有哪些好處?

首先&#xff0c;我們來了解下&#xff0c;企業內耗是什么? 在企業文化管理中&#xff0c;內耗是一個常見的問題&#xff0c;它會影響企業的團隊協作、執行效率和績效表現。在2023《哈佛商業評論》中國年會上&#xff0c;北大匯豐商學院管理實踐教授陳瑋分享了他對組織管理的…

馮喜運:5.14今日黃金原油漲跌走勢分析操作建議

【黃金消息面分析】&#xff1a;本周黃金市場將迎來關鍵的美國通脹數據&#xff0c;包括周二的生產者價格指數(PPI)和周三的消費者物價指數(CPI)。這些數據對美聯儲的政策路徑至關重要&#xff0c;可能會影響市場對利率調整的預期。目前&#xff0c;現貨黃金價格小幅上漲&#…

使用java.io庫序列化Java對象

在我們使用諸如Redis這類緩存系統時&#xff0c;我們往往會存在如下需求&#xff1a;將Java對象保存到Redis緩存中&#xff0c;然后在其他機器上還原回來。 Json方案 我們可以引入Json庫等方式&#xff0c;將Java對象序列化為Json字符串來實現這個目的&#xff0c;但是這樣的…

《四》系統模塊整體功能關聯與實現

在上一篇里&#xff0c;我們完成了動作的創建&#xff0c;那么這一次&#xff0c;我們把它加載到界面上&#xff0c;把需要是實現的動作都加上。 MyWord::MyWord(QWidget *parent): QMainWindow(parent) {mdiAreanew QMdiArea;mdiArea->setHorizontalScrollBarPolicy(Qt::S…

【Cesium解讀】Cesium中primitive/entity貼地

官方案例 Cesium Sandcastle Cesium Sandcastle 好文推薦&#xff1a;Cesium貼地設置_primitive貼地-CSDN博客 scene.globe.depthTestAgainstTerrain true; True if primitives such as billboards, polylines, labels, etc. should be depth-tested against the terrain…

釋放系統C盤的ext4.vhdx

ext4.vhdx 是個虛擬磁盤&#xff0c;默認位置為 C:\Users{用戶名}\AppData\Local\Docker\wsl\data\ext4.vhdx&#xff0c;會占用很大磁盤空間&#xff0c;可采用下列辦法將其改到其它磁盤或分區&#xff0c;如D分區。 1、查看有哪些&#xff1a; # wsl -l -vNAME …