随笔分类 -  数据结构与算法

摘要:1. 队列:先进先出 队列的基本操作: 入队enqueue(),放一个数据到队列尾部; 出队dequeue(),从队列头部取一个元素; 如下,和栈的对比图: 所以,队列和栈一样,也是一种操作受限的线性表数据结构。 注:作为一种非常基础的数据结构,队列的应用广泛,特别是一些具有某些额外特性的队列,比如 阅读全文
posted @ 2020-05-06 21:02 Vincent-yuan 阅读(200) 评论(0) 推荐(0) 编辑
摘要:1.栈主要包括两个操作 出栈和入栈;也就是在栈顶插入一个数据和从栈顶删除一个数据; 具有后进先出、先进后出的特性。 栈是一种操作受限的线性表,只允许在端插入和删除数据。 为什么会有栈这种数据结构? 适合特定场景。从功能上说,数组或者链表都可以替代栈,但是,因为特定的数据结构是对特定场景的抽象,而且数 阅读全文
posted @ 2020-05-05 15:36 Vincent-yuan 阅读(598) 评论(0) 推荐(0) 编辑
摘要:1.数组和链表的内存分布 数组需要一块连续的内存空间,而链表则通过“指针”将一组零散的内存块串联起来 2.三种常见的链表 单链表、双向链表、循环链表 2.1 单链表 链表通过指针将一组零散的内存块串联在一起。其中内存块称为结点,并且还有一个记录下个结点地址的指针,叫做后继指针next。 其中,第一个 阅读全文
posted @ 2020-05-05 11:29 Vincent-yuan 阅读(243) 评论(0) 推荐(0) 编辑
摘要:之前有记录一版快速排序算法。 这里记录对它优化的一个版本。 之前快速排序一个缺点,就是使用递归算法对规模非常大的数据项进行排序可能会引起栈溢出,导致存储错误。 而且上面的代码的实现方式中,对枢纽的不同的选择,会造成不一样的算法的执行效率。 理想情况下,应该选择被排序的数据项的中值数据项作为枢纽。即对 阅读全文
posted @ 2020-05-05 10:42 Vincent-yuan 阅读(374) 评论(0) 推荐(0) 编辑
摘要:快速排序算法本质上是通过把一个数组划分为两个子数组,然后递归的调用自身为每一个子数组进行快速排序来实现的。 这里首先讲递归的快速排序算法。 1.递归的排序算法 public void recQuickSort(int left, int right){ if(right-left<=0){ //如果 阅读全文
posted @ 2020-05-01 22:48 Vincent-yuan 阅读(248) 评论(0) 推荐(0) 编辑
摘要:1.数组定义 数组:是一种线性数据结构,用连续的内存空间,来存储相同类型的数据 2.线性表与非线性表 线性表:数组、链表、队列、栈等 非线性表:二叉树、堆、图等 如下图 3.数组特性 3.1 随机访问 3.1.1 数组为什么支持随机访问 因为数组是线性并且占用连续的内存空间的相同类型的数据。 3.1 阅读全文
posted @ 2020-04-26 22:09 Vincent-yuan 阅读(292) 评论(0) 推荐(0) 编辑