C#中LinkedList、Queue<T>和Stack<T>的使用

news/2025/3/5 12:16:01/

1、LinkedList(链表)

链表中元素存储内存中是不连续分配,每个元素都有记录前后节点,节点值可以重复,不能通过下标访问,泛型的使用保证类型安全,可以避免装箱拆箱,找元素就只能遍历,查找不方便,增删比较快。

例如,

Console.WriteLine("***************LinkedList<T>******************");
LinkedList<string> linkedList = new LinkedList<string>();
linkedList.AddFirst("C/C++");
linkedList.AddLast("Java");bool isContain = linkedList.Contains("Java");
LinkedListNode<string> nodeC = linkedList.Find("C/C++");  // 从头查找
linkedList.AddBefore(nodeC, "C#");
linkedList.AddAfter(nodeC, "Python");
foreach(var item in linkedList)
{Console.WriteLine("item = "+item);
}
linkedList.Remove("Java");
linkedList.Remove(nodeC);
linkedList.RemoveFirst();
linkedList.RemoveLast();
linkedList.Clear();

 

2、Queue<T>(队列)

Queue<T>是链表,先进先出,不能通过下标访问,泛型的使用保证类型安全,可以避免装箱拆箱,找元素就只能遍历,查找不方便,增删比较快。

例如,

Console.WriteLine("***************Queue******************");
Queue queue = new Queue();
queue.Enqueue("C/C++");
queue.Enqueue("C#");
queue.Enqueue("Java");
queue.Enqueue("Python");
queue.Enqueue("CJavaPy");
queue.Enqueue("JS");
foreach (string item in queue)
{Console.WriteLine(item);
}
Console.WriteLine($"Dequeuing '{queue.Dequeue()}'");
Console.WriteLine($"Peek at next item to dequeue: { queue.Peek()}");
Console.WriteLine($"Dequeuing '{queue.Dequeue()}'");
Queue queueCopy = new Queue(queue.ToArray());
foreach (string item in queueCopy)
{Console.WriteLine(item);
}
Console.WriteLine($"queueCopy.Contains(\"c#\") = {queueCopy.Contains("c#")}");
queueCopy.Clear();
Console.WriteLine($"queueCopy.Count = {queueCopy.Count}");

 

注意ConcurrentQueue 线程安全版本的Queue。

3、Stack<T>(堆栈)

Stack<T>是链表,先进后出,不能通过下标访问,泛型的使用保证类型安全,可以避免装箱拆箱,找元素就只能遍历,查找不方便,增删比较快。

例如,

Console.WriteLine("***************Stack******************");
Stack stack = new Stack();
stack.Push("C/C++");
stack.Push("C#");
stack.Push("Java");
stack.Push("Python");
stack.Push("CJavaPy");
stack.Push("JS");
foreach (string item in stack)
{Console.WriteLine(item);
}
Console.WriteLine($"Pop '{stack.Pop()}'");//获取并移除
Console.WriteLine($"Peek at next item to dequeue: { stack.Peek()}");//获取不移除
Console.WriteLine($"Pop '{stack.Pop()}'");
Stack stackCopy = new Stack(stack.ToArray());
foreach (string item in stackCopy)
{Console.WriteLine(item);
}
Console.WriteLine($"stackCopy.Contains(\"C#\") = {stackCopy.Contains("C#")}");
stackCopy.Clear();
Console.WriteLine($"stackCopy.Count = {stackCopy.Count}");

 注意ConcurrentStack线程安全版本的Stack。


http://www.ppmy.cn/news/1154510.html

相关文章

Sigma中的数字增益放大/降低方法

1 是否需要申请加入数字音频系统研究开发交流答疑群(课题组)&#xff1f;加他微信hezkz17, 本群提供音频技术答疑服务

【Python、Qt】使用QItemDelegate实现单元格的富文本显示+复选框功能

主打一个 折磨 坑多 陪伴。代码为Python&#xff0c;C的就自己逐条语句慢慢改吧。 Python代码&#xff1a; import sys from types import MethodType from PyQt5.QtCore import Qt,QPoint,QSize,QRect,QEvent from PyQt5.QtGui import QStandardItemModel, QStandardItem,QTe…

RT-Thread v5.0.2 发布

RT-Thread 代码仓库地址&#xff1a; ● https://github.com/RT-Thread/rt-thread RT-Thread 5.0.2 版本发布日志详情&#xff1a; ● https://github.com/RT-Thread/rt-thread/releases/tag/v5.0.2 RT-Thread 迎来了全新的版本 v5.0.2&#xff0c;自 v5.0.0 版本发布以来&am…

音视频开发岗位,2023年为何持续增加?如何应聘音视频岗位

随着基础设施的完善&#xff08;光纤入户、wifi覆盖、5G普及&#xff09;&#xff0c;加之2020年疫情的影响&#xff0c;将短视频、直播、视频会议、在线教育、在线医疗瞬间推到了顶峰&#xff0c;人们对音视频的需求和要求也越来越强烈。音视频开发是指利用计算机技术和相关编…

python写着玩

摄氏温度转化为华氏温度 #摄氏温度转化为华氏温度 celsius float(input("请输入摄氏度&#xff1a;")) fahrenheit(9/5)*celsius32 print("华氏温度是%.1f"%fahrenheit) 计算圆柱体的体积 #计算圆柱体的体积 radius , length map( float,input("请…

can not remove .unionfs

文件夹下出现unionfs 套娃&#xff0c;无法删除。 处理方式&#xff1a; 需要管理员权限umount之后删除使用fusermount -zu .unionfs &#xff0c;然后再删除。

课时01 TOGAF9.2导入- 课前介绍-课程介绍

基础级&#xff0c;5W1H为什么做架构&#xff0c;怎么做架构什么时候做&#xff0c;视图&#xff0c;视角&#xff0c;输入输出 鉴定级 研究流程&#xff0c;adm&#xff0c; 最好有项目管理基础&#xff0c;一定要落地&#xff0c;有pmp最好&#xff0c;要谈需求&#xff0c;最…

Ant Design Vue Element-ui 中table 合并行功能,以及带分页并合并行

1. Ant Design Vue 中 table 合并行功能 <a-tableref"table":dataSource"comList":columns"columns":scroll"{ y: 430 }"size"small"rowKey"id":rowClassName"rowClassNameHandle":customRow"r…