ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

c#进阶之数据结构(栈篇)----Stack

2026/8/8 14:07:26 拓冰建站 浏览量
c#进阶之数据结构(栈篇)----Stack

1、定义

        实际上就是栈的一个上层封装。它也是可扩容的,但是我们都知道其实栈的地址是连续的,和固定数组一样,因此他和动态数组不太一样的地方就在于,栈的容量就是当前的元素数量

        那么关于栈就必须要明白这一点,栈是属于特殊的线性结构,不允许随机访问,只允许遍历访问,因此访问某一个元素的事件复杂度为O(n),但是插入不涉及元素的移动,因此插入的时间复杂度为o(1),删除和修改基本都为O(n)

        其实用处和普通的栈都是一样的,目前市面上常用的应该是作用于回退或者匹配。

2、构造函数

        

 2.1、Stack()

        基本描述如上图所示,但是必须要明白一个点在于我new出来这个类型实例以后,他的元素确实为空,但是它的容量并不一定是空的,他是具有一个默认容量的

        这个构造函数的时间复杂度为O(1)

2.2、Stack(Icollection)

        其实可以参考一下这个是ArrayList这个是浅拷贝还是深拷贝,这里放出源码。

        

        通过这个构造函数源码我们可以得出以下结论:

        1、如果使用的是泛型,那么该方法可以构造类型相同的任意一个聚合,因为这个构造方法通过的是迭代器实现。

        2、对于当前栈的元素实际上是元素的一个浅拷贝,也就是说如果这里修改了元素,那么原来结构的元素肯定也会受到波及。

        3、此构造函数时间复杂度为O(n)

2.3、Stack(Int)

        和描述一致,时间复杂度为O(1)

3、属性

        属性只有三个:和动态数据保持一致,Capacity做了隐藏,代表当前的数据结构根本不需要进行数据裁剪。

        

4、方法

        同样这里只介绍几种常用且特殊的。和动态数组相同的就不再介绍了。

4.1、peek

        获得顶层元素,但是不会将顶层元素pop出去,时间复杂度为o(1)

4.2、Pop

        出栈,时间复杂度o(1)

4.3、Push

        进栈,时间复杂度o(1),但是同样需要判断内存,如果需要重新分配那就是o(n)了。