栈:是一个后进先出(LIFO)的容器
栈 push()方法在栈中添加元素,用Pop()方法获取最近添加的元素。
于Queue<T>类相似,Stack<T>类实现IEnumerable<T>和ICollection接口
Count 返回栈中的元素个数
Push 在栈顶添加一个元素
Pop 从站定删除一个元素,并返回该元素,如果栈是空的,就抛出InvalidOperationException异常
Peek 返回栈顶的元素,但不删除它
Contains 确定某个元素是否在栈中,如果是,就返回true.
链表
LinkedList<T>是一个双向链表,其元素指向它前面和后面的元素。
这样通过移动到下一个元素可以正向遍历整个链表。通过移动到前一个元素可以反向遍历整个链表。
链表的优点:将元素插入列表的中间位置,使用链表会非常快。
在插入一个元素时,自需要修改上一个元素的Next引用和下一个元素的Previous引用,使他们引用所插入的元素。
在List<T>类中,插入一个元素时,需要移动该元素后面的所有元素。
链表缺点:链表元素只能一个接一个地访问,这需要较长的时间来查找位于链表中间或尾部的元素
链表不能在列表中仅存储元素。存储元素时,链表还必须存储每个元素的下一个元素和上一个元素的信息。这就是LinkedList<T>包含LinkedListNode<T>类型的元素的原因。
使用LinkedListNode<T>类,可以获得列表中的下一个元素和上一个元素。LinkedListNode<T>定义了属性List、Next、Previous、和Value。
List属性返回与节点相关的LinkedList<T>对象,Next和Previous属性用于遍历链表,访问当前节点之后和之前的节点。Value返回与节点相关的元素,其类型是T.
LinkedList<T>类定义的成员可以访问链表中的第一个和最后一个元素(First和Last).
在指定位置插入元素(AddAfter()、AddBefore()、AddFirst()、AddLast()方法)
删除指定位置的元素(Remove()、RemoveFirst()、RemoveLast()方法)
从链表的开头(Find()方法)或结尾(FindLast())开始搜索元素。
有序列表
如果需要基于键对所需集合排序,就可以使用SortedList<TKey,TValue>类。
这个类按照键给元素排序。 这个集合中的值和键都可以使用任何类型。
IComparer<Tkey>接口对象,该接口用于给列表中的元素排序
这个可以用Add()方法和索引器将元素添加到列表中。索引器需要把键作为索引参数。
如果键已存在,Add()方法就抛出一个ArgumentException类型异常。
如果索引器使用相同的键,就用新值替代旧值。
如果尝试使用索引器访问一个元素,但所传递的键不存在,就会抛出一个
KeyNotFoundException 类型的异常。 为了避免这个异常,可以使用ContainsKey()方法,
如果所床底的键存在于集合中,这个方法就返回true.也可以调用TryGetValue()方法,该方法尝试获得指定键的值。如果指定键对应的值不存在,该方法就不会抛出异常,该方法返回类型是bool值 有序列表中存在key 所对应的值就返回true 反之就是false.,该方法第一个参数是key 第二个参数是value(如果有对应的值就带出该值。) out T value
字典
字典表示一种非常复制的数据结构,这种数据结构允许按照某个键来访问元素。
字段称为映射或散列表。字典的主要特性是能根据键快速查找值。也可以*的添加和删除元素。
这有点像List<T>类,但没有在内存中移动后续元素的开销。
简要说明: 添加到字典中的键。键会转换为一个散列。利用散列创建一个数字。它将索引和值关联起来。然后索引包含一个到值的链接。一个索引像可以关联多个值,索引可以存储为一个树型结构。
//字典初始化器 var dict=new Dictionary<int,string>() { [3] ="three", [7] ="seven" }
键的类型
用作字典中的类型必须重写Object类和GetHashCode()方法。