基本数据结构(List、Map、set)

范某某 发布于 2016/10/05 19:22
阅读 2K+
收藏 0

数据逻辑结构,包括线性、集合、树形、图形。
list是线性的,又是一个集合,如何去理解?集合和其他结构如何区分? 
map属于什么数据结构,算是用链表实现的?那TreeMap呢?
set呢
栈、队列、堆、散列 有常用的实现例子么?
能用一句话来描述么?比如:list是一个通过顺序存储实现的线性结构的集合

加载中
2
中山野鬼
中山野鬼

哈,“list是线性的,又是一个集合” 这个观点还是有些不妥当。因为集合分有序集合和无序集合。 同时,集合,如上面网友说的,是个逻辑的,准确说是个理论上描述的术语,它没有存储空间的概念。而list要解决两个问题。第一,所存储元素之间“序”的关系,即便是“无序集合”,你也要能描述清楚,第一个存储元素和第二个存储元素之间实际存储的位置关联关系,通常在链表索引时会需要用到,第二个问题是,存储空间的组织。这和集合又没有关系了,属于工程时自然出现的问题。例如, 集合是可以无限增长的,存储空间不可能,退回来具体的问题是,一个集合你可以再加10个元素,而一个工程上的存储空间,“再加10个存储空间”,就会引发一些具体问题。

哈,说这么多,只是想说,list和集合不一样。list是工程上针对线性存储(存储关系或数据之间关系,或它们两个都是 ,是一维有序的)。

而至于树和图,树本身是图的一种特例(子集)。说白了是不构成无向回路的全连通有向图(这话太绕了,哈)。除了一些有特殊约束的树,典型的是“二叉树”,树的组织表达方式,基本和图一样通用。

至于栈,先进后出,最大的优势就是简单,操作成本低。而特别是存在嵌入逻辑时,你自然需要用栈。典型的应用就是函数调用函数再退出来,你父函数的现场保护。

队列是先进先出,说白了就是管道,极端的说,处理的数据单元之间不存在规范格式时,任何流,都可以看做“队列”。

堆可以看做多块。为啥用堆,最大的好处是存储空间与元素结构尽可能无关,使得你在维护存储空间的工作可以更高效。

散列的优势在于通过多次索引,提高元素查找效率,说白了是分类存储的概念,栈和队列是折腾时序上的逻辑,散列是折腾集合元素之间的逻辑。哈

说一句,上面不是教科书的语言,算是从94年看数据结构到现在还在做代码的实践总结。不介意有人说我不懂装懂,哈。我倒建议说我不懂装懂的人,好好在实际工作中,结合图论及数论的理论只是,感悟一下上面的观点。


最后喷一个工程观点,无论什么数据组织结构,在工程上的组织逻辑,绝大多数情况下是越简单,效率越高。哈。


1
xpbob
xpbob
数据逻辑结构的集合是一种相互不联系的数据组织,有点类似hashset,java中只要能存储东西的都叫集合,汉字一样,意义不一样。TreeMap是红黑树,应该在树里,treeset也是红黑树。线程的直接看jdk的源码吧,集合这块不难看
范某某
范某某
原来此集合非彼集合,感谢感谢
0
求是科技
求是科技
https://my.oschina.net/u/2312022/blog/748813
0
m
mzfanggong
本意是来学习的。
0
eechen
eechen
还是PHP设计得好,统一为关联数组(哈希表),键能用字符串和数字,但不能用数组和对象作为键.
乌龟壳
乌龟壳
回复 @eechen : php跑起来才知道
honey_fansy
honey_fansy
回复 @eechen : 谁跟你说基本变量,我说的结构是树形结构,链式结构,队列结构,这些自定义的结构
eechen
eechen
回复 @honey_fansy : PHP一个var_dump就能告诉你它是什么类型的变量,一个$GLOBALS就能知道都有哪些可用变量,就是这么简单.
honey_fansy
honey_fansy
这也叫好?Java和C++,随便一个变量我几秒就能看出什么结构,给你一个php变量,给你几分钟你能看出是什么结构吗?
0
莫扎特的代码
莫扎特的代码
“list是线性的,又是一个集合,如何去理解”,不是一个层次的概念,list是线性的是从它的物理实现角度看,集合是从应用层角度去看,list可以包装秤集合、队列、栈等等
0
刘大神
刘大神
现在的年轻人好可怕,总是喜欢把一堆东西都搞到一起
返回顶部
顶部