![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法与数据结构
大叔是个唐僧肉
一个爱打篮球的程序员
展开
-
Java数据结构与算法之数组
一、前言谈及数组,大家应该都很熟悉。数组是一种基础的线性表,在实际的编程过程及面试过程中数据的也是高频出现的数据结构之一,而且应用场合也涉及的非常广。而对于数组这种基本的数据结构,到底掌握了多少?二、数组的特点先简单回忆下数组:String [] arr1 = new String [5];int [] arr2 = {1,2,3};从上面的代码中来分析下数组的基本特点:...原创 2019-04-21 13:24:59 · 264 阅读 · 0 评论 -
Java数据结构与算法之顺序表的实现
一、前言上一篇中内容中,我们从存储结构、性能以及试用场景几个方面分析了数组这种最基本的数据结构。顺序表的也是由数组实现的。在实际的开发过程中,我们也经常使用一个与数组类似的顺集合容器—ArrayList。ArrayList的底层实现就是数组,但是它把数组的特性进行了封装,调用起来更方便,同时优化了数组的痛点(不支持自动扩容)。下面我们就利用上一篇学到的知识,试着完成一个简单的顺序表。如图:...原创 2019-05-12 00:23:51 · 411 阅读 · 0 评论 -
Java数据结构与算法之双向链表
一、学习过单链表和单向循环链表之后,对于链表结构特点应该已经相当熟悉。而在链表中还有一种双向链表,来第一步看图说话:从图中可以看出双链表和单链表相比有如下特点:1、双链表除了拥有后继结点next外还有一个前驱结点prev;2、存储同样数据多的数据,双链表要不单链表占用更多的空间(双链表要比单链每个结点要多存储一个前继指针prev);3、支持双向遍历,比单链表更灵活。二、具体...转载 2019-05-15 23:21:22 · 137 阅读 · 0 评论 -
Java数据结构与算法之栈(Stack)
一、栈的概述栈是一种特殊线性表,与数组和链表最大的区别就是,栈只允许在栈顶操作,不允许在栈底操作,也就是出栈和入栈都在发生在栈顶。这就有点类似叠落在一起的盘子,每次放盘子都是从下到上一个一个的放,取盘子也是从上到下一个一个的取。如下图:从栈的操作上我们可以看出,栈是一种“受限制”的线性表,只允许从一端插入或者删除。人栈或出栈基本的操作原则是“先进后出或后进先出”,也就是第一个进入栈的元...原创 2019-05-19 00:12:29 · 227 阅读 · 0 评论 -
Java数据结构与算法之队列(Queue)
一、前言从上一篇内容中我们知道了栈最基本的操作是“出栈”和“入栈”,特点是“先进后出,后进先出”。而队列有很多相似的地方,最基本的操作是“入队”和“出队”,不过特点和栈恰恰相反,“先进先出,后进后出”。最形象的就是排队买票,排在最前的会先买到票,而排在后面的也就后买到票了。上面的图是不是更新是一个水管子,队列的入栈和出栈就是像是水管中的水,最先进入水管子中的水,最先流出水管子。队列和栈...原创 2019-05-25 14:43:40 · 301 阅读 · 0 评论 -
Java数据结构与算法之单链表
一、前言数组对于内存的要求比较高,需要一块连续的内存空间来存储,如果你申请的一个100M大小的数组,当内存中没有连续的,足够大的存储空间时,即便剩余内存可用空间大于100MB,申请仍然会是失败的。第二方面在当顺序表中内存容量不足时,则必须重新申请一个数组,将原来的数据复制到新的数组中,数据搬移消耗了大量的性能和时间(数据达到一定量级)。在顺序表中元素的插入和删除也可能存在数据的搬移,也会消耗一...原创 2019-05-12 16:41:24 · 199 阅读 · 0 评论 -
Java数据结构与算法之单向循环链表
一、前言上篇内容中主要介绍了普通的单链表,这篇内容主要介绍下一种特殊的单链表——单向循环列表。下面先从图例中对单向循环链表有一个整体的概念。从图例中可以看出,单向循环链表和普通的单链表区别主要在于尾结点,单链表的尾结点指向一个空的地址,从而表示这是最后的结点,而单向循环链表是将尾结点的指针指向了头结点,首尾相连。二、单向循环列表的特点分析:1、空表的循环列表是头结点的后继指针指...转载 2019-05-13 23:53:10 · 700 阅读 · 0 评论 -
Java排序算法之冒泡排序、插入排序、选择排序
一、前言排序是日常中最常见的一种算法,常见的算法有:冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、快速排序、基数排序、桶排序。那么该怎样分析和学习排序算法呢?二、算法的分析课在上述的八种排序方法中,根据时间复杂度和是否基于比较可以为三种:排序算法 时间复杂度 是否基于比较 冒泡、插入、选择 O(n2) 是 ...原创 2019-05-26 22:12:33 · 452 阅读 · 0 评论