C#中泛型容器Stack<T>的用法,以及借此实现”撤销/重做”功能

王朝学院·作者佚名  2016-05-20
窄屏简体版  字體: |||超大  

C#中泛型容器Stack<T>的用法,以及借此实现”撤销/重做”功能

.Net为我们提供了众多的泛型集合。比如,Stack<T>先进后出,Queue<T>先进先出,List<T>集合元素可排序,支持索引,LinkedList<T>,双向链表的泛型实现,不支持索引;ISet<T>不允许被复制,他有2个实现,一个是HashSet<T>,不维持集合元素的排序,另一个是SortedSet<T>,支持集合元素的排序;IDictionary<TKey, TValue>是一个字典集合的泛型接口,SortedList<TKey,TValue>实现了IDictionary<TKey, TValue>,但同时也是集合,维持集合元素的排序,支持按键或按值索引。

本篇体验Stack<T>的用法。

基本用法

Stack<T>是Stack的泛型实现,提供了若干方法和属性,比如入栈、出栈、查看栈顶元素,查看栈内集合元素数量,等等。栈的最大特点是先进后出,可以把栈想像成一堆叠起来的盘子,入栈就是把一个个盘子放到最上面,出栈就是从最上面把盘子拿掉。用法比较简单:

class PRogram

{

static void Main(string[] args)

{

var customer1 = new Customer() {ID = 1, Name = "张三", Gender = "男"};

var customer2 = new Customer() { ID = 2, Name = "李四", Gender = "男" };

Stack<Customer> stackCustomers = new Stack<Customer>();

//入栈

stackCustomers.Push(customer1);

stackCustomers.Push(customer2);

//查看栈顶元素

Customer topCustomer = stackCustomers.Peek();

Console.WriteLine("栈顶元素是:" + topCustomer.Name);

//遍历所有栈内元素

foreach (var customer in stackCustomers)

{

Console.WriteLine("id is {0},name is {1}", customer.ID, customer.Name);

}

//出栈

Customer outCustomer = stackCustomers.Pop();

Console.WriteLine("正在出栈的是:" + outCustomer.Name);

Console.WriteLine("当前栈内元素数量为:" + stackCustomers.Count);

Console.ReadKey();

}

}

public class Customer

{

public int ID { get; set; }

public string Name { get; set; }

public string Gender { get; set; }

}

临摹一个泛型Stack<T>

泛型Stack类内部维护这一个泛型数组和索引指针,且指针的初始位置是-1。

入栈就是把指针往前提一位,并把入栈元素赋值给该栈内位置。另外,入栈要考虑是否达到容量上限,如果达到就要给数组扩容。

出栈就是让当前栈位置的元素值为入栈类型的默认值,并大指针后退一位。

获取栈顶元素就是获取栈当前索引位置对应的元素。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航