随笔分类 - 算法与数据结构
编程之核心
摘要:一、介绍 堆,也是计算中一种很常用的数据结构,它以树的形式存在。 对于树的结构,因为有父节点和子节点的概念,所以一般通过父指针和子指针来实现。但是,也有一种特殊的树不需要使用指针而可以直接通过数组来实现,这种树就是完全二叉树(除了最后一层不用全满,其他层必须全满,而且最后一层的叶子结点都靠左对齐)。
阅读全文
摘要:一、简言 使用数组实现循环队列时,始终会有一个空余的位置预留着,作为一个判决队列已满的条件(当然也可以采用其他方式)。在前面已经用C++介绍了基本的算法,可以去回顾一下https://www.cnblogs.com/XYQ-208910/p/11700048.html。光说不练嘴把式,现在本文使用O
阅读全文
摘要:一、简言 在前面已经用C++介绍过链队列的基本算法,可以去回顾一下https://www.cnblogs.com/XYQ-208910/p/11692065.html。少说多做,还是上手撸代码实践一下才能更好的加深理解,本文采用OC面向对象的思想来实现一个链队列。 二、代码 Node LinkQue
阅读全文
摘要:一、介绍 正是因为队列从队头删除,从队尾添加的特点,所以在使用数组来表现队列时,元素的位置移动采用下标也即出队front++或者入队rear++的方式实现,这里会体现出一个局限性,资源空间的浪费。怎么理解呢? 草图所示: 图示解释: 一个数组队列是满的,arr[0]=a1 ,arr[1]=a2,ar
阅读全文
摘要:一、介绍 队列(Queue),计算机中一种常用的数据结构,具有先进先出FIFO的特点。 通俗一点,就跟生活中超市购物结账排队一样,靠前的结账先走,新来的排在后面等待。 对于队列中的元素,一般都在队头出队,在队尾入队,队头用Q.front表示,队尾用Q.rear表示。 队列的实现有两种方式,通过数组或
阅读全文
摘要:一、介绍 栈是一种数据存储结构,存储的数据具有先进后出的特点。栈一般分为动态栈和静态栈。 静态栈比较好理解,例如用数组实现的栈。动态栈可以用链表来实现。 方式:固定base指针,每次更改top指向入栈的节点,遍历时从top节点遍历即可。 判空:s.top == s.base && s.top ==
阅读全文
摘要:一、介绍 双向链表:每一个节点前后指针域都和它的上一个节点互相指向,尾节点的next指向空,首节点的pre指向空。 二、使用 注:跟单链表差不多,简单写常用的。循环链表无法形象化打印,后面也暂不实现了,但是要注意循环链表遍历时结束的标志。 循环链表遍历结束:tailNode.next == firs
阅读全文
摘要:一、概念 链表和数组都是一种线性结构,数组有序存储的,链表是无序存储的。 数组中的每一个元素地址是递增或者递减的关系,链表的每一个节点的地址没有此规律,它们是通过指针的指向连接起来。 链表种类:单链表、双向链表、循环链表、双向循环链表 单链表:一个数据域data、一个后继指针域next。也即:上一个
阅读全文
摘要:一、简单介绍栈是限定在表尾插入或删除操作的线性表。因此,对栈来说,表尾端有其特殊的含义,成为栈顶(top),相应地,表头端称为栈底(bottom)。 不含元素的空表称为空栈。栈的修改是按照后进先出的原则进行的,因此,栈又称为后进先出的线性表。 二、栈示意图 三、基本操作 1、栈的初始化: InitS
阅读全文
摘要:一、排序名称 内部排序:指待排序列完全存放在内存中所进行的排序过程,适合不太大的元素序列。其中快速排序的是目前排序方法中被认为是最好的方法。 1、插入排序:直接插入排序、(shell)希尔排序 2、交换排序:冒泡排序、快速排序 3、选择排序:简单选择排序、堆排序 4、归并排序 5、基数排序 外部排序
阅读全文
摘要:建立完整的单向链表
阅读全文
浙公网安备 33010602011771号