![](https://img-blog.csdnimg.cn/20200623104311761.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
自己编写代码,模拟实现底层数据结构
好汉不吃草
Accept your ordinary and try your best to be different.
展开
-
简单模拟ArrayList的实现
简单模拟ArrayListArrayList的底层本质是一个能够动态操作数据的Object数组,它实现了List接口(其提供了相关的添加、删除、修改、遍历等功能)。模拟建立List接口package com.data;/** * 线性表接口 */public interface List { //返回线性表的大小,即数据元素个数 public int size(); //返回线性表中序号为index的元素 public Object get(int in原创 2020-05-26 18:57:18 · 380 阅读 · 0 评论 -
简单模拟LinkedList的实现
LinkedList的底层本质是一个双向链表,它实现了List接口(其提供了相关的添加、删除、修改、遍历等功能)。此次模拟以简单的单链表为例。1.新建Node类,用来保存数据和指针,此时的data属性和next属性不加private修饰,方便同一包中的其它类访问。包及控制权限:修饰符\权限本类同包子类同包非子类不同包子类不同包非子类private√××××缺省√√√××private√√√√×private√√√√√原创 2020-06-19 16:40:52 · 267 阅读 · 0 评论 -
模拟栈的实现
栈(stack)又称堆栈,它是一种运算受限的线性表,其限制是仅允许在表的一端进行插入和删除操作,不允许在其他任何位置进行插入、删除、查找等操作。能进行插入和删除操作的一端称为栈顶(Top),栈顶保存的元素称为栈顶元素。相对的,表的另一端称为栈底(bottom)当栈中没有数据元素时称为空栈,向一个栈插入元素称为进栈或入栈,从一个栈删除元素称为出栈或退栈。由于栈的插入和删除仅在栈顶进行,后进栈的元素必然先出栈,所以又把栈称为后进先出表(Last In First Out简称LIFO)。使用Java完成栈原创 2020-06-20 10:49:08 · 610 阅读 · 0 评论 -
模拟队列的实现
队列(queue)简称对,它同堆栈一样,也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行删除。在队列中把插入元素的一端称为队尾(rear),删除元素的一端称为队首(front)。向队列中插入元素称为进队或入队,新元素入队后成为新的队尾元素。从队列中删除元素称为离队或出队,元素出对后,其后续元素成为新的队首元素。由于队列的插入和删除操作分别在队尾和队首进行,每个元素必然按照入队次序离队,也就是说先进队的元素必然先离队,所以队列成为先进先出表(First In First Ou原创 2020-06-20 12:15:17 · 400 阅读 · 0 评论 -
树与二叉树的基本概念
树的基本概念树(tree)是n(n>=0)个结点的有限集,它或是一颗空树(n=0),空树中不包含任何结点,或是一颗非空树(n>0),此时有且仅有一个特定的称为根(root)的结点。当n>1时,其余结点可分为m(m>0)个互补相交的有限集T1,T2,…Tm,其中每一个本身又是一棵树,并且称为根的子树(sub tree)。结点的度与树的度结点拥有的子树的数目称为结点的度(Degree),度为0的结点称为叶子(leaf)或终端结点。度不为0的结点称为非终端结点或分支节点。除根之外的分原创 2020-06-20 18:11:50 · 275 阅读 · 0 评论 -
二叉树的遍历概念及算法
遍历(Traverse)就是按照某种次序访问树中的所有结点,切每个结点恰好访问一次。 也就是说,按照被访问的次序,可以得到由树中所有结点排成的一个序列。树的遍历也可以看成是人为的将非线性结构线性化。这里的“访问”是广义的,可以是对结点的的各种处理,例如输出结点信息、更新结点信息等。(在现实操作中,并不是真的”访问“这些结点,而是得到一个结点的线性序列,以线性表的形式输出)将二叉树分为三部分:根结点、左子树、右子树,如果规定先遍历左子树、在遍历右子树。那么根据根结点的遍历顺序就会有三种遍历方式。先序原创 2020-06-21 15:28:26 · 441 阅读 · 0 评论 -
图的基本概念
图(graph)是一种网状数据结构,图是由非空的顶点集合和一个描述顶点之间关系的集合组成的。其形式定义如下:Graph = ( V,E )V = {x|x∈某个数据对象}E = {<u,v>|P(u,v)^(u,v ∈ V)}V是具有相同特性的数据元素的集合,V中的数据元素通常称为顶点(Vertex)E是两个顶点之间关系的集合。P(u,v)表示u,v之间特定的关联属性。有向图与无向图若<u,v>属于E,则<u,v>表示从顶点u到顶点v的一条弧,并称u为弧尾或原创 2020-06-22 11:15:29 · 541 阅读 · 0 评论 -
线性表查找
线性表的查找可以采用顺序查找和二分查找来完成,在进行查找操作时,与数据存储结构关系不大,即不论采用的是顺序表还是链表,查找的基本思路都是一致的。顺序查找逐个比较查询,如果找到,返回数据或索引,如果最后也没找到,返回null或-1,在各个节点查找概率相同的情况下,默认查询长度为一半长度,所以时间复杂度:T(n) = O(n)【在成绩中查询分数为100的第一个分数】package com.search;/** * 在分数数组中查询指定分数的索引 * 时间复杂度:T(n)=O(n) * 空间复杂原创 2020-06-22 19:01:39 · 904 阅读 · 0 评论 -
查找树
二叉查找/搜索/排序树BST(binary search/sort tree)二叉排序树可以是空树或具有以下性质的树:若它的左子树不为空,则左子树上的所有结点均小于它的根结点若它的右子树不为空,则右子树上的所有结点均大于它的根结点它的左、右子树也分别为二叉排序树。注意:对二叉排序树进行遍历,得到有序集合。平衡二叉树(Self-balancing binary search tree)自平衡二叉树,又称为AVL树(有别于AVL算法),它可以为一棵空树否则需满足以下性质:它的左、右两个子树原创 2020-06-22 19:01:55 · 471 阅读 · 0 评论 -
哈希表查找
前面查找方法的共同特点:通过关键字值与给定值进行比较,来确定位置。效率取决于比较次数。理想的方法是:不需要比较,根据给定值能直接定位记录的存储位置。这样需要在记录的存储位置与该记录的关键字之间建立一种确定的对应关系,使每个记录的关键字与一个存储位置相对应。哈希表的特点和结构hashtable也叫做散列表,有多种结构,其中最常见的是采用顺序表+链表,主结构采用顺序表,每个顺序表的节点单独引出一个链表。哈希表是如何添加数据的计算哈希码(调用hashCode()函数,结果是一个int型的值,整数的哈希码原创 2020-06-23 10:23:06 · 1191 阅读 · 0 评论 -
基础排序算法
冒泡排序原理:从第一个数开始,依次往后比较,如果前面的数比后面的数大就交换,否则不作处理。这就类似烧开水时,壶底的水泡往上冒的过程。选择排序插入排序原创 2020-06-23 18:27:11 · 170 阅读 · 0 评论 -
快速排序
快速排序是冒泡排序的改进版,也是最好的一种内排序,还涉及到分治和递归。原创 2020-06-24 11:38:27 · 156 阅读 · 0 评论