【c#基础】集合--栈Stack 链表 LinkList 有序列表SortedList 字典

栈:是一个后进先出(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()方法。

 

原文地址:https://www.cnblogs.com/SignX/p/11272910.html

时间: 2024-10-04 10:21:41

【c#基础】集合--栈Stack 链表 LinkList 有序列表SortedList 字典的相关文章

laravel-- 在laravel操作redis数据库的数据类型(string、哈希、无序集合、list链表、有序集合)

安装redis和连接redis数据库 在controller头部引入 一.基本使用 1 public function RedisdDbOne() { 2 // 清空Redis数据库 3 Redis::flushall(); 4 5 6 // redis的string类型 7 Redis::set("laravel","Hello woshi laravel"); 8 dump(Redis::get("laravel")) ; 9 10 11 /

python基础(序列,元祖,列表,字典,对象,类)

1.标准的序列操作: 索引.分片.乘法.判断成员资格.求长度.取最大值和最小值 2.python之删除命令的区别: >>> x ['or', 'not', 'to', 'be', 'or', 'be'] del:删除指定索引的值 >>> del x[0] >>> x ['not', 'to', 'be', 'or', 'be'] pop:默认删除最后一个值 >>> x.pop() 'be' >>> x ['not',

page74-泛型可迭代的基础集合数据类型的API-Bag+Queue+Stack

[泛型可迭代的基础集合数据类型的API] 背包:就是一种不支持从中删除元素的集合数据类型——它的目的就是帮助用例收集元素并迭代遍历所有收集到的元素.(用例也可以检查背包是否为空, 或者获取背包中元素的数量) public class Bag<Item> implements Iterable<Item> Bag() 创建一个空背包 void add(Item item) 添加一个元素 boolean isEmpty() 背包是否为空 int size() 背包中的元素数量 使用Ba

用结点实现链表LinkedList,用数组和结点实现栈Stack,用数组和结点链表实现队列Queue

一,用结点实现链表LinkedList,不用换JavaAPI的集合框架 import java.util.Scanner; public class Main { public static class Node { int data; Node next=null; public Node(int data){this.data=data;}; } public static class MyLinkedList { Node head=null; public MyLinkedList()

stack 集合栈计算机 (摘)

有一个专门为了集合运算而设计的“集合栈”计算机.该机器有一个初始为空的栈,并且支持以下操作:PUSH:空集“{}”入栈DUP:把当前栈顶元素复制一份后再入栈UNION:出栈两个集合,然后把两者的并集入栈INTERSECT:出栈两个集合,然后把二者的交集入栈ADD:出栈两个集合,然后把先出栈的集合加入到后出栈的集合中,把结果入栈       每次操作后,输出栈顶集合的大小(即元素个数).例如栈顶元素是A={ {}, {{}} }, 下一个元素是B={ {}, {{{}}} },则:UNION操作将

集合栈计算机(The Set Stack Computer,ACM/ICPC NWERC 2006,UVa12096)

集合栈计算机(The Set Stack Computer,ACM/ICPC NWERC 2006,UVa12096) 对于集合的集合,很难直接表示,因此,为方便起见,为每个不同的集合分配一个不同的ID,每个集合都可以表示成所含集合的ID集合,一个集合就可以表示为一个set 我的理解: {}:1 {{}} 2 栈中的都是集合,所以也是int类型的 实际进行操作的过程中,可以用map将每种集合和对应的ID关联起来,这样做既可以完成查找ID的任务,还可以同时判定是否出现了新的集合. 用vector作

Java基础——集合源码解析 List List 接口

今天我们来学习集合的第一大体系 List. List 是一个接口,定义了一组元素是有序的.可重复的集合. List 继承自 Collection,较之 Collection,List 还添加了以下操作方法 位置相关:List 的元素是有序的,因此有get(index).set(index,object).add(index,object).remove(index) 方法. 搜索:indexOf(),lastIndexOf(); 迭代:使用 Iterator 的功能板迭代器 范围性操作:使用 s

1.JAVA基础——集合2

一些常用集合: ArrayList:ArrayList封装了一个动态再分配的Object[]数组,在ArrayList的源码中有这样一个属性,添加到ArrayList中的元素最终其实都是添加到这个Object数组中 private transient Object[] elementData; ArrayList的add(Object o)实现也比较简单 public boolean add(E e) { ensureCapacity(size + 1); // Increments modCo

黑马程序员——java基础——集合(Collection)

 黑马程序员--java基础--集合(Collection) ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 集合框架的构成及分类,如下图: 1.为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式. 2.数组和集合类同是容器,有何不同? 数组虽然也可以存储对象,但长度是固定的:集合长度是可变的.数组中可以存储基本数据类型,集合只能存储对象. 3.