【数据结构】各种数据结构的简单特点

news/2024/5/20 6:20:54 标签: 数据结构, 列表, 数组, ,

                                          各种数据结构的简单特点

1、列表

包括

(1)数组

【1】会在内存中开辟一个连续的内存空间

【2】随机访问的效率比链表高。数组只要给定下标,则可以直接定位到该下标所对应的元素,而链表每次都是从头节点开始遍历。

【3】对元素的增删操作的效率比链表低。这里说的是从数组的中间插入或删除一个元素,并且数组中元素很多,实验证明,在数组头部或结尾增加或删除一个元素的效率和链表差不多。

为什么?

比如,每次对数组中间某一个元素进行删除的操作,则此元素后面的所有元素都得往前面移动,耗费大量的时间和性能。

而对链表中间某一个元素进行删除的操作,只需将此节点的指针与前驱结点和后继节点断开即可,元素并没有发生移动。

这个特点,可以解释ArrayList与LinkedList之间的区别

 

(2)链表

【1】通过一个个指针将节点串起来

【2】对于元素的随机访问,需要使用计数器来访问指定的元素,并且只能从头节点开始访问,每访问一个节点,计数器加1,直到给定的“下标”,此操作很耗时,时间复杂度为O(N)

【3】增加元素和删除元素的效率很高

 

(3)队列

【1】不支持随机访问

【2】先进先出

【3】线程池中的线程就是从任务队列中取出任务

 

(4)栈

【1】不支持随机访问

【2】后进先出

 

 

2、

(1)二叉

【1】每个节点最多只有两个子节点

(2)搜索

【1】二分查找,数组对半分的路径就是一个搜索

【2】不一定是二叉

(3)/优先队列

【1】按照顺序pop出元素

【2】优先队列中,以最小为例,或子根结点都是所在或子中最小的元素

 

3、栈、队列、优先队列中的元素弹出顺序

例 push(1)   push(3)   push(2)  pop()    pop()   pop()

(1)栈 

弹出顺序为 2,3,1   【后进先出】

(2)队列

弹出顺序为 1,3,2   【先进先出】

(2)优先队列

弹出顺序为 1,2,3   【从小到大,具有顺序性】

 

4、Map<K,V>和Set<K>接口

(1) HashMap/HashSet

【1】都基于哈希表的实现

【2】每个Object都有一个哈希值,上面两者实现类都基于这个哈希值

HashSet如何区分待插入元素重复?

先得到这个元素的hashCode,若HashSet中不存在此hashCode对应的元素,则直接将此元素插入到HashSet中

若HashSet中存在此hashCode对应的元素,将这些元素拿出来与待插入元素进行equals判断,若全相等,则不插入,否则插入

(2)TreeMap/TreeSet 

【1】K必须实现Comparable接口

【2】K被放入

 

 

5、图

(1)无向图

【1】每个节点都没有方向,边上可能有权重

(2)有向图

【1】每个节点是有方向的的

(3)有向无环图

【1】可以描述任务之间的关系

 

 

 


http://www.niftyadmin.cn/n/1705776.html

相关文章

十大优秀中间件解决方案

编者按&#xff1a;又经过一年的培育&#xff0c;中间件应用得到进一步普及。与去年本报开展中间件方案评析时相比&#xff0c;今年不管是中间件产品的成熟度&#xff0c;还是用户对产品的了解&#xff0c;都有了长足进步。这一点从专家和用户代表组成的评委会共同评选出来的下…

【数据结构】树的遍历

树的遍历 以前序遍历为例 &#xff08;1&#xff09;先遍历树根 &#xff08;2&#xff09;然后前序遍历左子树 &#xff08;3&#xff09;最后前序遍历右子树 对于这样的一个二叉树 前序遍历结果&#xff1a;ABDEGCF 遍历流程&#xff1a; 【1】首先遍历树根&#xff0c…

解决Eclipse自动补全变量名 空格 等号问题(转百度贴吧)

增强的补全功能设置&#xff1a; 打开 Eclipse-> Window -> Perferences找到Java 下的 Editor 下的 Content Assist , 右边出现的选项中&#xff0c;有一个Auto activation triggers for Java:会看到只有一个"."存在。表示&#xff1a;只有输入"."…

GROUP BY 和 WHERE 子句

可以在包含 GROUP BY 子句的查询中使用 WHERE 子句。在进行任何分组之前&#xff0c;将消除不符合 WHERE 子句条件的行。例如&#xff1a;use pubsselect type,avg(price)from title where advance > 5000group by type 转载于:https://www.cnblogs.com/ufo0303/archive/200…

【JAVA】volatile和synchronized的区别

共性&#xff1a; volatile与synchronized都用于保证多线程中数据的安全 区别&#xff1a; &#xff08;1&#xff09;volatile修饰的变量&#xff0c;jvm每次都从主存&#xff08;主内存&#xff09;中读取&#xff0c;而不会从寄存器&#xff08;工作内存&#xff09;中读…

C++带参数默认值的函数

定义形式&#xff1a; void fun(int a 1 ,int b 2 ,int c 3 ,int d 4){ //函数定义cout<<"a"<<a<<endl;cout<<"b"<<b<<endl;cout<<"c"<<c<<endl;cout<<"d"<<d…

【JAVA】Object类的方法简谈

Object类的方法简谈 Java中所有的类都继承自Object类&#xff0c;那我们今天来探讨一下Object类中的方法 PS:Object源码中&#xff0c;作者那一栏中&#xff0c;出现了这个 package java.lang;/*** Class {code Object} is the root of the class hierarchy.* Every class h…

使用widnows精灵

//你可以从下面的地址下载精灵//http://www.microsoft.com/msagent/downloads.htm//privateAxAgentObjects.AxAgent axAgent1; axAgent1.Characters.Load("Genie","Genie.acs");//导入精灵吉尼&#xff08;Genie&#xff09;AgentObjects.IAgen…