C#(四十八)之三种数据结构 stack queue sortedList

简介: 堆栈(Stack):代表了一个后进先出的对象集合。当您需要对各项进行后进先出的访问时,则使用堆栈。当您在列表中添加一项,称为推入元素,当您从列表中移除一项时,称为弹出元素。System.Collections.Queue类表示对象的先进先出集合,存储在 Queue(队列) 中的对象在一端插入,从另一端移除。SortedList 类代表了一系列按照键来排序的键/值对,这些键值对可以通过键和索引来访问。

QQ图片20220426164259.png

堆栈(Stack):


代表了一个后进先出的对象集合。当您需要对各项进行后进先出的访问时,则使用堆栈。当您在列表中添加一项,称为推入元素,当您从列表中移除一项时,称为弹出元素。

 

Stack 类的方法和属性


下表列出了 Stack 类的一些常用的 属性:


属性 描述
Count 获取 Stack 中包含的元素个数。


下表列出了 Stack 类的一些常用的 方法:


序号 方法名&描述
1 public virtual void Clear(); 从 Stack 中移除所有的元素。
2 public virtual bool Contains( object obj ); 判断某个元素是否在 Stack 中。
3 public virtual object Peek();  返回在 Stack 的顶部的对象,但不移除它。
4 public virtual object Pop();  移除并返回在 Stack 的顶部的对象。
5 public virtual void Push( object obj );  向 Stack 的顶部添加一个对象。
6 public virtual object[] ToArray();  复制 Stack 到一个新的数组中。

 

示例:


// 声明对象
            Stack sta = new Stack();
            // 推入对象
            sta.Push("a");
            sta.Push("b");
            sta.Push("c");
            sta.Push("d");
            foreach (string item in sta)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine("
");
            // 取出顶部的元素且移除
            string asdf = (string)sta.Pop();
            foreach (string item in sta)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine("
");
            // 取出顶部元素,不移除
            string ff = (string)sta.Peek();
            foreach (string item in sta)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine("
");
            Console.ReadLine();

 

Queue是一个对象,存什么类型都好


System.Collections.Queue类表示对象的先进先出集合,存储在 Queue(队列) 中的对象在一端插入,从另一端移除。


优点


1、能对集合进行顺序处理(先进先出)。

2、能接受null值,并且允许重复的元素。

 

Queue的构造器


构造器函数 注释
Queue () 初始化 Queue 类的新实例,该实例为空,具有默认初始容量(32)并使用默认增长因子(2.0)。
Queue (ICollection) 初始化 Queue 类的新实例,该实例包含从指定集合复制的元素,具有与所复制的元素数相同的初始容量并使用默认增长因子。
Queue (Int32) 初始化 Queue 类的新实例,该实例为空,具有指定的初始容量并使用默认增长因子。
Queue (Int32, Single) 初始化 Queue 类的新实例,该实例为空,具有指定的初始容量并使用指定的增长因子。

 

Queue的属性


属性名 注释
Count 获取 Queue 中包含的元素数。

 

Queue的方法


方法名 注释
Void Clear() 从 Queue 中移除所有对象。
Bool Contains(object obj) 确定某元素是否在 Queue 中。
Object Clone() 创建 Queue 的浅表副本。
Void CopyTo(Array array,int index) 从指定数组索引开始将 Queue 元素复制到现有一维 Array 中。
Object Dequeue() 移除并返回位于 Queue 开始处的对象。
Void Enqueue(object obj) 将对象添加到 Queue 的结尾处。
Object Peek() 返回位于 Queue 开始处的对象但不将其移除。
Object[]ToArray() 将 Queue 元素复制到新数组。
Void TrimToSize() 将容量设置为 Queue 中元素的实际数目。

 

示例:


Queue que = new Queue();
            // 添加元素
            que.Enqueue("111");
            que.Enqueue("222");
            que.Enqueue("333");
            que.Enqueue("444");
            foreach (string  item in que)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine("
");
            // 删除元素(取出)
            string qw = (string)que.Dequeue();
            Console.WriteLine(qw+"
");
            foreach (string item in que)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine("
");
            // 取出元素,但不删除
            qw = (string)que.Peek();
            foreach (string item in que)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine("
");
复制代码

 

 

SortedList类:


SortedList 类代表了一系列按照键来排序的键/值对,这些键值对可以通过键和索引来访问。


排序列表是数组和哈希表的组合。它包含一个可使用键或索引访问各项的列表。如果您使用索引访问各项,则它是一个动态数组(ArrayList),如果您使用键访问各项,则它是一个哈希表(存储键值)也就是说是两个数组,相互关联。集合中的各项总是按键值排序。

 

SortedList 类的方法和属性


下表列出了 SortedList 类的一些常用的 属性


属性 描述
Capacity 获取或设置 SortedList 的容量。
Count 获取 SortedList 中的元素个数。
IsFixedSize 获取一个值,表示 SortedList 是否具有固定大小。
IsReadOnly 获取一个值,表示 SortedList 是否只读。
Item 获取或设置与 SortedList 中指定的键相关的值。
Keys 获取 SortedList 中的键。
Values 获取 SortedList 中的值。


下表列出了 SortedList 类的一些常用的 方法


序号 方法名&描述
1 public   virtual void Add( object key, object value );   向 SortedList 添加一个带有指定的键和值的元素。
2 public   virtual void Clear();   从 SortedList 中移除所有的元素。
3 public   virtual bool ContainsKey( object key );   判断 SortedList 是否包含指定的键。
4 public   virtual bool ContainsValue( object value );   判断 SortedList 是否包含指定的值。
5 public   virtual object GetByIndex( int index );   获取 SortedList 的指定索引处的值。
6 public   virtual object GetKey( int index );   获取 SortedList 的指定索引处的键。
7 public   virtual IList GetKeyList();   获取 SortedList 中的键。
8 public   virtual IList GetValueList();   获取 SortedList 中的值。
9 public   virtual int IndexOfKey( object key );   返回 SortedList 中的指定键的索引,索引从零开始。
10 public   virtual int IndexOfValue( object value );   返回 SortedList 中的指定值第一次出现的索引,索引从零开始。
11 public   virtual void Remove( object key );   从 SortedList 中移除带有指定的键的元素。
12 public   virtual void RemoveAt( int index );   移除 SortedList 的指定索引处的元素。
13 public   virtual void TrimToSize();   设置容量为 SortedList 中元素的实际个数。

 

示例:


SortedList sort = new SortedList();
            sort.Add("1等奖", "都是比较快");
            sort.Add("3等奖", "删掉了");
            sort.Add("2等奖", "线程VB方法");
            for (int i = 0; i < sort.Count; i++)
            {
                // 获取键
                Console.WriteLine(sort.GetKey(i));
                // 获取元素值
                Console.WriteLine(sort.GetByIndex(i)+"
");
            }
            // 获取键值数组
            foreach (string item in sort.GetKeyList())
            {
                Console.WriteLine(item);
            }
            // 获取元素值
            foreach (string item in sort.GetValueList())
            {
                Console.WriteLine(item);
            }



目录
相关文章
|
1月前
|
算法 Java API
【用Java学习数据结构系列】对象的比较(Priority Queue实现的前提)
【用Java学习数据结构系列】对象的比较(Priority Queue实现的前提)
26 1
|
1月前
|
C语言
数据结构------栈(Stack)和队列(Queue)
数据结构------栈(Stack)和队列(Queue)
20 0
|
3月前
|
存储
数据结构——栈(Stack)
栈(Stack)是一种常见且重要的数据结构,它遵循后进先出(Last-In-First-Out, LIFO)的原则,即最后加入的元素会是第一个被移除的。
46 4
|
3月前
|
存储 C#
揭秘C#.Net编程秘宝:结构体类型Struct,让你的数据结构秒变高效战斗机,编程界的新星就是你!
【8月更文挑战第4天】在C#编程中,结构体(`struct`)是一种整合多种数据类型的复合数据类型。与类不同,结构体是值类型,意味着数据被直接复制而非引用。这使其适合表示小型、固定的数据结构如点坐标。结构体默认私有成员且不可变,除非明确指定。通过`struct`关键字定义,可以包含字段、构造函数及方法。例如,定义一个表示二维点的结构体,并实现计算距离原点的方法。使用时如同普通类型,可通过实例化并调用其成员。设计时推荐保持结构体不可变以避免副作用,并注意装箱拆箱可能导致的性能影响。掌握结构体有助于构建高效的应用程序。
116 7
|
4月前
|
Dart 算法 JavaScript
C#数据结构与算法入门教程,值得收藏学习!
C#数据结构与算法入门教程,值得收藏学习!
|
5月前
|
存储 人工智能 程序员
技术心得记录:堆(heap)与栈(stack)的区别
技术心得记录:堆(heap)与栈(stack)的区别
40 0
|
5月前
|
C语言 C++
【数据结构】C语言实现:栈(Stack)与队列(Queue)
【数据结构】C语言实现:栈(Stack)与队列(Queue)
|
6月前
|
存储 算法 C#
C#编程与数据结构的结合
【4月更文挑战第21天】本文探讨了C#如何结合数据结构以构建高效软件,强调数据结构在C#中的重要性。C#作为面向对象的编程语言,提供内置数据结构如List、Array和Dictionary,同时也支持自定义数据结构。文章列举了C#实现数组、链表、栈、队列等基础数据结构的示例,并讨论了它们在排序、图算法和数据库访问等场景的应用。掌握C#数据结构有助于编写高性能、可维护的代码。
56 3
|
6月前
|
存储
【数据结构】队列(Queue)的实现 -- 详解
【数据结构】队列(Queue)的实现 -- 详解
|
6月前
|
存储
【数据结构】栈(Stack)的实现 -- 详解
【数据结构】栈(Stack)的实现 -- 详解