java数据结构和他们的API

数据结构(java篇):

内容要求:这一部分需要自己先去学习一遍数据结构,然后自己写出来。掌握之后,再去查看api文档,最后学会如何使用api里的数据结构写算法。下面介绍的主要是每个数据结构与api的对应方式。此文为初级算法总结的子篇第三章——数据结构。

1、基础数组、线性表:

(1)数组:

Java数组的定义:int[] arr = new int[n];

                   或者int[] arr = new int[]{1,2,3};

                  Int arr = { 1,2,3 };

API:Arrays提供二分法查找、比较、复制、填充某个数(fill)、排序、返回字符串等功能。具体功能查询Arrays。

(2)线性表:

API:ArrayList中提供加入(add),删除(remove),重置(set),返回索引(indexof),裁剪(sublist)具体功能查询API帮助文档。

2、链表:

自己实现参照:数据结构(java)——单链表、双端链表和双向链表

链表是以节点类为基础的,每个节点类有一个成员变量是下一个节点。

API:LinkedList提供添加删除获取索引元素等操作,具体查看api帮助文档。

3、集合:

API:Collections接口提供:排序,二分查找,逆序,随机打乱,填充,copy,max,min,比较,指定元素出现次数等操作。用法直接collections.max(链表或者数组)。

这个接口提供了很多常用方法,具体如何使用可以参照帮助文档。

4、向量:(可增长数组)

API:Vector接口提供方法与数组类似,具体查看API帮助手册。

5、栈:

自己实现参照:数据结构(java)——栈和队列

API:Stack接口提供查看,移除,压入,查找,判空操作

6、队列、双端队列、优先队列:

(1)队列:数据结构(java)——栈和队列

API:Queue接口在LinkedList类上加入了查看队头,移除队头,加入元素等特殊操作。用LinkedList类来实例化队列。

(2)双端队列:

API:Deque接口提供双端的插入删除操作,具体查看api。同样用LinkedList类来实例化。

(3)优先队列:

API:PriorityQueue类实现了以自然顺序排列的队列(注意 不是先排序再出,而是出队的时候选择最小的先出)。可默认比 较器(最小的有最高优先度),也可用其他比较器,如 Collections.reverseOrder()提供的逆序比较器进行优先出队。具 体怎么用查看api帮助文档。

7、哈希表(映射表):

API:

(1)Hashmap提供了键—值对应的功能,keyset返回包含键的视图(可用来for遍历),values返回包含值的视图,put,remove,size,isempty,get,containkey(value)等常规操作。

(2)TreeMap提供了可排序的映射表,构造方法可以加入比较器comparator。entrySet返回键视图,values返回值视图。

8、树:

树没有api,可以用上面学过的东西去实现它,参照:数据结构(java)——二叉树的插入、遍历、删除、高度、叶子节点个数、判完全二叉树等操作

如何构造树包括以下几点:

(1)节点:数据域,左右孩子,是否背访问等信息;

(2)(二叉查找树)插入节点:第一次插入直接,直接插到root; 然后比较大小循环左右走,newNode > now就插右边,否则插 左边。

(3)二叉树拷贝:递归,拷贝root,左子树,右子树。

(4)查找节点:和插入一样

(5)前中后序遍历:递归(跟-左子树-右子树or等等),非递归(利用栈,先压root,然后对顶元素根据前中后遍历方式决定先看左/右/跟,如果是孩子就压入,是跟就弹出)。

(6)层序遍历:用队列,先压root,弹一个就压他的左右进去。

(7)中序后继节点:某节点的右孩子的一直左孩子下去的节点。方法是定义3个节点,del和delp(del的父节点,最开始也指向del)和now(del的right),然后delp = del;del = now;now=now.left;一直到now为空,del就是中序后继节点。

(8)删除节点:

        1.删叶子:分左右直接。

        2.删有一个孩子的节点:分是左孩子还是右孩子,还要 分删除的节点是左还是右。

        3.删除有两个孩子的节点,找中序后继节点替换。中序 后继节点应该在找的时候吧下面的连接处理好。

(9)求k层节点的个数:递归左子树的第k-1层+右子树k-1层。

(10)叶子节点个数:递归,左子树的叶子+右叶子。

(11)树高度:max:左子树高度+1 or 右子树高度+1。

(12)检测完全二叉树:层序遍历,在某个节点(没有双子或右孩子)后全是叶子节点

9、图:

图也是没有api的,用之前学过的结构可以构造。

如何构造图包括以下几点,详见:

(1)顶点类:名称,值,是否背访问。

(2)图类:顶点数组、邻接矩阵、栈、队列、最大顶点

(3)添加点和边:加进顶点数组和邻接矩阵

(4)获取相邻顶点:遍历邻接矩阵的那一行,==1返回.

(5)深度优先搜索DFS:利用栈,访问标记压入0号,看栈顶得到周边,访问标记并压入,没有了能访问的就弹出。搜索完吧访问记录删除。

(6)广度优先BFS:用队列,访问标记压入0号,循环找不到周边就弹出,找得到就访问标记并压入。

 

猜你喜欢

转载自blog.csdn.net/likunkun__/article/details/81272446