c#数据结构
时间: 2025-03-13 17:08:29 浏览: 34
### C# 中常用的数据结构
#### 一、集合 [Set]
`HashSet<T>` 是一种实现 `ISet<T>` 接口的泛型集合,它提供平均 O(1) 时间复杂度的操作来添加、删除和查找元素。这种高效性使得 `HashSet<T>` 成为了处理唯一项的理想选择[^1]。
```csharp
var hashSet = new HashSet<int>();
hashSet.Add(1);
hashSet.Remove(1);
bool contains = hashSet.Contains(1);
```
#### 二、线性结构
##### 1. 列表 [List]
列表是一种动态数组,在 C# 中由 `System.Collections.Generic.List<T>` 类表示。与静态数组不同的是,列表可以根据需要自动调整大小。由于内部使用连续内存存储元素,因此访问速度较快;但在中间位置插入或移除元素时效率较低,因为这可能涉及到大量元素移动操作[^4]。
```csharp
var list = new List<string>();
list.Add("hello");
string item = list[0];
```
##### 2. 队列 [Queue]
队列遵循先进先出原则(FIFO),即最早加入队列中的项目最先被取出。C# 提供了两种主要类型的队列:基于链表实现的标准 Queue 和更高效的循环缓冲区版本 CircularBuffer。后者特别适合频繁进出队的情况,因为它可以减少重新分配空间的需求并提高缓存命中率[^5]。
```csharp
var queue = new Queue<int>();
queue.Enqueue(1);
int frontItem = queue.Peek();
queue.Dequeue();
```
##### 3. 栈 [Stack]
栈则采用后进先出(LIFO)模式工作,意味着最后压入堆栈的对象会第一个弹出。同样存在两种形式 - Stack 和 ConcurrentStack,前者适用于单线程环境下的快速出入栈需求,而后者专为多线程场景设计以确保安全并发访问[^2]。
```csharp
var stack = new Stack<char>();
stack.Push('a');
char topElement = stack.Pop();
```
#### 三、树形结构
虽然标准库并没有直接提供完整的树状容器类型,但是可以通过组合其他基本组件来自定义构建各种各样的树木模型,比如二叉搜索树(BST) 或者 AVL 平衡树等平衡二叉搜索树变体。此外还有红黑树(Red-Black Tree), B+Tree 等更加复杂的索引机制可供选用.
#### 四、图 形 结 构
图形结构通常用于描述实体之间的关系网络,如社交平台上的好友关联或者交通路网规划等问题域。尽管 .NET Framework 自身并未内置专门针对此类用途优化过的 API ,不过借助第三方开源框架 QuickGraph 可轻松创建有向/无向加权图实例,并支持多种遍历算法(Dijkstra, A*) 的便捷调用.
阅读全文
相关推荐





