
数据结构与算法
一杯清泉
坚持初心,不负梦想!!!
展开
-
算法的时间复杂度
一、算法的复杂度计算机在执行程序的时候是需要一定时间的,实现同一个功能不同的代码执行的时间不同,如何衡量代码的执行时间与计算机执行效率之间的平衡,引进了算法的复杂度,算法的复杂度又分为时间复杂度和空间复杂度。时间复杂度:评估执行程序所需的时间。可以估算出程序对处理器的使用程度。 空间复杂度:评估执行程序所需的存储空间。可以估算出程序对计算机内存的使用程度。二、时间复杂度1、时间频...原创 2018-08-05 14:37:19 · 1127 阅读 · 0 评论 -
java数据结构——哈希表
哈希表,是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表,也称为哈希表。下面将以数组来实现哈希表结构。1、哈希表节点哈希表节点一般包括两个变量,key和data,其中key用来存储和查找,data表示存储的数据,使用java语言表述如下;pu...原创 2018-10-13 09:42:53 · 2349 阅读 · 0 评论 -
java数据结构——环形队列
ArrayQueue存在一个问题,假设当尾部插入元素满了,头部又删掉了一些元素,这种情况下,就误认为空间满了,造成了假溢出,实际上头部删除了元素留出了空间。这时候环形队列就解决了这样的一个问题,环形队列的front指针始终指向当前队列的最后位置;end指针始终指向第一个元素的前一个位置为-1,存储元素的时候头部和尾部都可以相互移动,而不必造成假溢出现象,节省了内存空间。如下:1、构造...原创 2018-09-24 11:11:32 · 8633 阅读 · 7 评论 -
java数据结构——双端队列
普通队列是一端进,另一端出的FIFO形式,而双端队列就没有这样的限制级,也就是我们可以在队列两端进行插入或者删除操作。接下来使用双端链表来实现一个双端队列。1、引进双向链表地址:https://blog.csdn.net/yoonerloop/article/details/815161662、构造方法public class DoublesEndQueue { ...原创 2018-09-15 10:27:56 · 616 阅读 · 0 评论 -
java数据结构——队列
队列是一种可以实现“先进先出”的数据结构,属于线性表的一种。它具有如下特点: 队列中的数据元素遵循“先进先出”的原则,简称FIFO结构。 在队尾添加元素,在队头删除元素。 以下连篇文章将分别介绍队列的数组实现、链表实现,双端队列、环形队列、优先队列。一、数组实现队列注意:队尾、队头指的是元素的位置,而不是元素的值,位置具有唯一性,值可能重复1、构造方法...原创 2018-09-10 21:21:36 · 417 阅读 · 0 评论 -
java数据结构——二叉树
一、树概述树是一种特殊的数据结构,他可以用来描述有分支的结构是由一个或者一个以上的有限集合组成,具有两个属性:一是存在一个特殊的节点,成为树根;二是其余节点分为n>=0个互斥集合,T1,T2,T3,……,Tn,每个集合成为子树。常用属性如下:1、根节点根节点是一个没有双亲结点的结点,一棵树中最多有一个根节点。2、结点的深度是指从根节点到该节点的路径长度。3、结点的高度...原创 2018-10-07 20:08:07 · 635 阅读 · 0 评论 -
java数据结构——双向链表
链表是非常常见的一类线性结构的数据结构,每个节点包含有指针域和数据域,常见的包括单项列表、双向列表、循环列表。这篇文章将详细介绍双向链表。双端链表不同于单向链表仅有一个指针域指向下一个节点,而是同时持有下一个和上一个指针域,分别指向下一个和上一个节点,如下:本文将介绍双向链表的插入节点、根据位置插入节点、删除头结点、删除尾节点、删除指定位置节点,查看链表元素、查看头结点、查看尾节点、查...原创 2018-08-11 16:07:42 · 665 阅读 · 2 评论 -
算术表达式的求值法
如(6*2+5*9)/2的这类表达式称为中序表示法,这是一般人所习惯的的写法。不过由于中序法优先权和结合性的问题,在计算机编译程序的处理上很不方便,所以在计算机的上的解决之道是将其换成后序法(较常用)和前序法,这种表达式的种类,依据运算符在表达式中的位置,可以将其分为中序法、前序法、后续法。中序法:<操作数1><运算符><操作数2> 前序法:<运算符...原创 2018-09-04 21:37:10 · 1759 阅读 · 0 评论 -
java数据结构——栈
栈是一种特殊的线性表,仅能在线性表的一端操作,栈顶允许操作,栈底不允许操作,遵循“后进先出”的特点。数据结构图如下:基本操作包括创建栈、入栈、出栈、获取栈顶元素、获取栈的大小等。栈的实现分为两种,一种是通过数组实现;一种是通过链表来实现。二者的区别是数组实现栈简单简洁,而使用链表实现比较复杂;组数的实现容量有限,需要指定初始容量,而链表的实现栈的容量是无限的,不需要指定初始容量。接下来分别...原创 2018-09-01 22:21:01 · 809 阅读 · 1 评论 -
java数据结构——单向链表
链表是非常常见的一类线性结构的数据结构,每个节点包含有指针域和数据域,常见的包括单项列表、双向列表、循环列表。这篇文章将详细介绍单向链表。单向链表每个节点包含当前节点的数据域和一个指向下一个节点的指针域,如下:本文将介绍链表的尾节点插入、头结点插入、指定位置插入、删除头结点、删除尾节点、删除指定节点、删除指定元素,链表反转、链表是否为空、链表长度、获取头结点、获取尾节点。链表的节点...原创 2018-08-09 22:05:12 · 4798 阅读 · 2 评论 -
hash冲突的解方法
hashCode的生成中不同的key生成的hashValue可能是一样的,尽管这种可能比较小,一旦生成的hashCode相同了,那么获取到的值就出现错乱,这种情况下就需要解决hash冲突问题,通常hash冲突的解决有两种方法,一种是开放地址法,另一种是链表地址法,下面分别介绍这两种方法。一、开放地址法当出现hashCode相同的时候,将数组的按照某种方法继续探测哈希表中的其他存储单元...原创 2018-10-16 21:29:17 · 484 阅读 · 0 评论