首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么不是System ... Stack <T>实现为链接列表?

这个问题是关于C#编程语言中的泛型Stack实现。在C#中,Stack<T>是一个泛型类,用于表示一个后进先出(LIFO)的数据结构。这个问题中提到的“为什么不是System ... Stack <T>实现为链接列表?”,可能是指为什么Stack<T>没有使用链表(LinkedList)作为其内部实现。

实际上,Stack<T>在.NET Framework和.NET Core中使用数组(Array)作为其内部实现。这是因为数组在内存中是连续分配的,这使得Stack<T>的性能在执行入栈和出栈操作时非常高效。而链表在内存中是非连续分配的,因此在执行入栈和出栈操作时可能会导致内存访问速度较慢。

尽管链表在某些情况下可能更适合实现Stack<T>,但是考虑到性能和内存分配的因素,使用数组作为内部实现是更好的选择。如果需要使用链表实现的Stack<T>,可以自行实现一个链表结构,并在其上实现入栈和出栈等操作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java中的集合-您必须知道的13件事

大多数编程语言都支持各种类型的集合,例如List, Set, Queue, Stack等。 1.什么是Java Collections Framework?...某个编程语言都使用了Collections,当Java出现时,它也带有一些Collection类-Vector,Stack,Hashtable和Array。...因此,我们可以将更多的放置业务逻辑上,而不是设计集合API。 提高质量 –使用经过良好测试的核心集合类可以提高我们的程序质量,而不是使用任何自行开发的数据结构。...通常,集合类不是线程安全的,并且其迭代器是fast-fail的。 4.1)HashSet类 Java HashSet是由HashMap支持的Set接口的基本实现。...4.4)LinkedList类 List和Deque接口的双链接列表实现。实现所有可选的列表操作,并允许所有元素(包括null)。 所有操作均按双链表的预期执行。

87340
  • Java 容器 & 泛型(2):ArrayList 、LinkedList和Vector比较

    注意,此实现不是同步的。如果多个线程同时访问一个 ArrayList 实例,而其中至少一个线程从结构上修改了列表,那么它必须 保持外部同步。...(结构上的修改是指任何添加或删除一个或多个元素的操作,或者显式调整底层数组的大小;仅仅设置元素的值不是结构上的修改。)这一般通过对自然封装该列表的对象进行同步操作来完成。...除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。...*/ public class Stack { private LinkedList storage = new LinkedList(); /** 入栈 */...; System.out.println(stack.toString()); Object obj=stack.peek(); System.out.println

    42710

    数据结构思维 第六章 树的遍历

    作为第一步,我们将构建一个读取维基百科页面的爬虫,找到第一个链接,并跟着链接来到另一个页面,然后重复。...然后我们将讨论两个 Javainterfaces,它们定义了栈的方法:Stack和Deque。 栈是与列表类似的数据结构:它是维护元素顺序的集合。栈和列表之间的主要区别是栈提供的方法较少。...为什么栈和队列是有用的,可能不是很明显:它们不提供任何列表没有的功能;实际上它们提供的功能更少。那么为什么不使用列表的一切?...stack.isEmpty()) { Node node = stack.pop(); if (node instanceof TextNode) {...DFS 的迭代版本的一个优点是,更容易实现为 JavaIterator;你会在下一章看到如何实现。

    82820

    进入Linux内核前的准备

    我们把为什么给ds赋值说清楚了,那ds的值为什么是0x07c0呢?之前我们不是说Bios将数据复制到内存中的0x7c00吗,这里为为什么刚好差了16倍呢?...此时sp寄存器被赋值为0xff00,所以目前栈顶地址是ss:sp所指向的之地0x90000+0x0FF00,栈顶地址0x9FF00,具体表现为栈段寄存器ss为0x9000,栈基址寄存器sp为0xFF00...模块给占用了,这个system模块就是除了bootsect和setup之外的全部程序链接在一起的结果,可以理解为操作系统的全部。...先让我们回忆一下在加载启动区时,为什么要给ds赋值0x07c0但是实际在内存中的基址是0x7c00,我们当时说,这是为了x86能够在16位模式下访问20根地址线,会把给ds寄存器的值左移4位得到基址再加偏移地址来进行计算...那既然一模一样,为什么还需要重新设置gdt呢?

    5.6K20

    Java中用Deque接口代替Stack接口完成栈功能

    参考链接: Java Deque接口 引言  之前在有需要用到栈功能的时候,都是通过使用Stack接口完成的,也就是:  Stack stack = new Stack () ​ 但今天突然发现...原因  那么为什么要这么做呢?首先,我们可以发现deque的是继承自队列,而栈是继承自向量,这就比较奇怪了。   矢量是由数组实现的集合类,他包含了大量集合处理的方法。...链表实现所有可选的列表操作,并允许所有的元素包括空。   ...除了实现列表接口外,LinkedList的类还为在列表的开头及结尾得到,删除和插入元素提供了统一的命名方法这些操作允许将链接列表替换为可用的、、或双端的。...所有操作都是按照双重链接进行的。列表的需要执行的。在列表中编索引的操作初始化开头或结尾遍历列表(从靠近指定索引的一端)。   同时,与ArrayList一样此实现不是同步的。

    1.7K30

    一文了解stack和queue类的实现

    优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的顶部。...4.2 为什么stack、queue和priority_queue称作为容器适配器 虽然stack、queue、priority_queue中也可以存放元素,但在STL中并没有将其划分在容器的行列,而是将其称为容器适配器...4.3 为什么选择deque作为stack和queue的底层默认容器 stack是一种后进先出的特殊线性数据结构,因此只要具有push_back()和pop_back()操作的线性结构,都可以作为stack...T,class Con=deque> class Stack { public: Stack(){} void Push(const T& x){ _c.push_back(x); } void...("pause"); } int main() { TestStack(); system("pause"); return 0; } 4.4.2 模拟实现queue #include<iostream

    53620

    C#语言各种集合介绍

    ,也不是集合的元素类对象,它是一个独立的类对象。...IDictionary可称为字典、映射或散列表,它根据键(任意类型)来访问值 2.System.Collections中可以直接使用的集合类有: 1)ArrayList 实现了接口:IList、ICollection...实现了接口:ICollection、IEnumerable Stack是堆栈,后进先出的访问各个元素 可以调用Stack对象的GetEnumerator()方法,得到IEnumerator对象,来遍历堆栈中的各个元素...3.上面提到的几种集合类,他们都是通用的集合类,他们所接受的元素大都是Object类型,当对象放入 了集合之后,都失去了原有的类型信息-即这些通用集合类都不是强类型的 解决办法是使用强类型的集合类 System.Collections...,就是O(n) 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/120757.html原文链接:https://javaforall.cn

    61221

    《逆袭进大厂》第四弹之C++重头戏STL30问30答

    为什么使用红黑树?...当一个元素被插入到一个STL列表(list)中时,列表容器自动为其分配内存,保存数据。考虑到要将STL容器放到共享内存中,而容器却自己在堆上分配内存。...stack这种单向开口的数据结构很容易由双向开口的deque和list形成,只需要根据stack的性质对应移除某些接口即可实现,stack的源码如下: template <class T, class...代码运行过程是:首先根据键值和值做出一个元素,这个元素的值未知,因此产生一个与值型别相同的临时对象替代: value_type(k, T()); 再将这个对象插入到map中,并返回一个pair:...(k, T()))).first); //解引用 (*((insert(value_type(k, T()))).first)).second; //取出值 由于这个值是以引用方式传递,因此作为左值或者右值都可以

    1.5K20
    领券