Java中常用的数据结构和算法

线性结构有:栈,队列,数组,单向链表,双向链表

栈:1. 栈中数据是按照"后进先出”方式进出栈的。

[if !supportLists]2. [endif]向栈中添加/删除数据时,只能从栈顶进行操作

栈通常包括的三种操作:入栈、返回栈顶、弹出栈。  

                                       入栈push -- 向栈中添加元素。

                                       返回栈顶peek -- 返回栈顶元素。

                                       弹出栈pop  -- 返回并删除栈顶元素的操作。


栈中的数据依次是30 --> 20 --> 10

出栈:


出栈前:栈顶元素是30。此时,栈中的元素依次是 30 --> 20 --> 10 出栈后:30出栈之后,栈顶元素变成20。此时,栈中的元素依次是 20 --> 10

入栈:


入栈前:栈顶元素是20。此时,栈中的元素依次是 20 --> 10入栈后:40入栈之后,栈顶元素变成40。此时,栈中的元素依次是 40 --> 20 --> 10



队列:1.队列中数据是按照"先进先出"方式进出队列的。2.队列只允许在"队首"进行删除操作,而在"队尾"进行插入操作。


集合中LinekedList就是队列的实现(LinekedList就是先进先出原则)

2. 出队列


出队列前:队首是10,队尾是30。出队列后:出队列(队首)之后。队首是20,队尾是30。


3. 入队列


入队列前:队首是20,队尾是30。入队列后:40入队列(队尾)之后。队首是20,队尾是40。

 

数组:

     数组的话长度是固定的,存储的是同一种类型的元素对象,随机访问速度快,查询速度快,增删速度慢

单链表:

单向链表(单链表)是链表的一种,它由节点组成,每个节点都包含下一个节点的指针。

表头为空,表头的后继节点是"节点10"(数据为10的节点),"节点10"的后继节点是"节点20"(数据为10的节点),...


单链表删除节点

删除"节点30"删除之前:"节点20" 的后继节点为"节点30",而"节点30" 的后继节点为"节点40"。删除之后:"节点20" 的后继节点为"节点40"。


单链表添加节点

在"节点10"与"节点20"之间添加"节点15"添加之前:"节点10" 的后继节点为"节点20"。添加之后:"节点10" 的后继节点为"节点15",而"节点15" 的后继节点为"节点20"。

单链表的特点是:节点的链接方向是单向的;相对于数组来说,单链表的的随机访问速度较慢,但是单链表删除/添加数据的效率很高。


表头为空,表头的后继节点为"节点10"(数据为10的节点);"节点10"的后继节点是"节点20"(数据为10的节点),"节点20"的前继节点是"节点10";"节点20"的后继节点是"节点30","节点30"的前继节点是"节点20";...;末尾节点的后继节点是表头。


双链表删除节

双向链表:

双向链表(双链表)是链表的一种。和单链表一样,双链表也是由节点组成,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。

双链表的示意图如下:

删除"节点30"删除之前:"节点20"的后继节点为"节点30","节点30" 的前继节点为"节点20"。"节点30"的后继节点为"节点40","节点40" 的前继节点为"节点30"。删除之后:"节点20"的后继节点为"节点40","节点40" 的前继节点为"节点20"。


双链表添加节点

在"节点10"与"节点20"之间添加"节点15"添加之前:"节点10"的后继节点为"节点20","节点20" 的前继节点为"节点10"。添加之后:"节点10"的后继节点为"节点15","节点15" 的前继节点为"节点10"。"节点15"的后继节点为"节点20","节点20" 的前继节点为"节点15"。

你可能感兴趣的:(Java中常用的数据结构和算法)