首页 新闻 赞助 找找看

c#内置的Stack、Queue、Dictionary为什么都是用数组实现而非使用链表?

0
[待解决问题]

c#内置的Stack、Queue、Dictionary为什么都是用数组实现而非使用链表?

Marble的主页 Marble | 菜鸟二级 | 园豆:201
提问于:2019-04-30 10:12
< >
分享
所有回答(4)
0

我个人觉得数组比较简单。我刚看了下源码,很多操作都需要新建数组,感觉就是空间换时间吧。另外像Queue这种,感觉数组会比链表方便很多,链表查询一头方便,查询另一头要遍历所有元素,而数组可以随机读取

会长 | 园豆:12401 (专家六级) | 2019-04-30 10:24

查询一头方便,查询另一头要遍历所有元素。

支持(0) 反对(0) liuzhijie3 | 园豆:200 (初学一级) | 2020-10-02 16:31

链表查询一头方便,查询另一头要遍历所有元素。可以在了链表上加一个属性什么的,直接指向那一头。

支持(0) 反对(0) liuzhijie3 | 园豆:200 (初学一级) | 2020-10-02 16:33

链表查询一头方便,查询另一头要遍历所有元素。可以在了链表上加一个属性什么的,直接指向那一头。所以我也不明白为什么用数组而不是链表。

支持(0) 反对(0) liuzhijie3 | 园豆:200 (初学一级) | 2020-10-02 16:33

@liuzhijie3: 比如链表有1000个元素,要查询第100个,需要从第一个开始找,找100此。数组用下标定位就好了。链表的好处是插入和删除元素效率高,只需要更改一个或两个指针。如果是数组,想在中间插入一个元素,需要把后面元素的位置都往后移动一位

支持(0) 反对(0) 会长 | 园豆:12401 (专家六级) | 2020-10-10 09:20
0

C#很少会用到指针吧

王站住 | 园豆:236 (菜鸟二级) | 2019-04-30 11:15
0

猜测是为了性能:

If Count is less than the capacity of the stack, Push is an O(1) operation. If the capacity needs to be increased to accommodate the new element, Push becomes an O(n) operation, where n is Count. Pop is an O(1) operation.

来源: https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.stack-1?redirectedfrom=MSDN&view=netframework-4.8#remarks

不如隐茶去 | 园豆:559 (小虾三级) | 2019-04-30 13:24
0

数组可以不按顺序查找,比如想获取数组中第5个数据,则 var a=b[4];,链表是按顺序查找的不能直接获取,比如想获取第5个数据,需要从第一个找起,因为每个元素的位置信息在上一个元素中,印象中好像是这样,不对请见谅

jqw2009 | 园豆:2439 (老鸟四级) | 2019-04-30 17:21

一般情况下Stack和Quene也不需要访问第5个元素呀!

支持(0) 反对(0) liuzhijie3 | 园豆:200 (初学一级) | 2020-10-02 16:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册