随笔分类 - 数据结构与算法分析
学习数据结构的笔记
摘要:树与二叉树介绍: https://www.cnblogs.com/lnlin/p/6896596.html 定义文件: 具体实现: 代码有点多,若此处查看不便,或查看后序可能的更改,请移步:https://github.com/wangmlshadow/SampleDataStruct/tree/m
阅读全文
摘要:简介: 用一组地址连续的存储单元依次存放从队列头到队列尾的元素 在实现过程中,使得这一组连续的存储单元在逻辑上成为一个环 此处与顺序队列不同,不能通过存储再分配来扩大数组空间,因为即使队列尾指向 数组最后一个单元,队列可用空间也不一定为0,这是由于逻辑上的环状结构,如果 此时队列头指向的并非数组第一
阅读全文
摘要:特点: 与栈相反,队列是一种先入先出(FIFO)的线性表 它允许在表的一端插入元素,在另一端删除元素 允许插入的一端是队尾(rear),允许删除的一端是队头(front) 用于测试的文件,以及测试结果以及其他简单数据结构的实现可以去作者GitHub上查看 (下面代码只是最初实现,后续如果有修改,由于
阅读全文
摘要:简介: 限定仅在表尾进行插入或删除操作的线性表 表尾端称为栈顶(top),表头端称为栈底(bottom) 特点: 在栈中,后入栈的元素先出栈 C语言版本 用于测试的文件,以及测试结果可以去作者GitHub上查看 (下面代码只是最初实现,后续如果有修改,由于太麻烦,不会再更改下文,仅仅更新Github
阅读全文
摘要:为什么使用双向循环链表? 在单链表中,查询一个结点的前驱需要从头指针出发,为克服单链表单向性的缺点,可以利用双向链表双向链表的结点中有两个指针域,其中一个指向前驱,一个指向后继 用于测试的文件,以及测试结果可以去作者GitHub上查看 (下面代码只是最初实现,后续如果有修改,由于太麻烦,不会再更改下
阅读全文
摘要:链表的一种特殊形式,最后一个结点的指针域指向头结点,整个链表形成一个环 由于其实现与链表相差不大,此仅给出循环链表定义,具体实现推荐去作者GitHub页面查看 (下面代码只是最初实现,后续如果有修改,由于太麻烦,不会再更改下文,仅仅更新Github上的代码文件)
阅读全文
摘要:相关内容: 线性表的顺序实现 链式实现(C语言) (推荐在GitHub上查看,下面代码只是最初实现,后续如果有修改,由于太麻烦,不会再更改下文,仅仅更新Github上的代码文件) 结点以及链表类的定义: 具体实现: 用于测试的代码及测试结果:
阅读全文
摘要:线性表(linear_list): n个数据元素的有限序列 每个数据元素由若干数据项(item)组成,常将数据元素称为记录(record),含有大量记录 的线性表又称为文件。 线性表的顺序实现: 用一组地址连续的存储单元依次存储线性表的数据元素。 再用C语言实现时,需要在线性表初始化时分配一定大小的
阅读全文
摘要:枚举算法: 又称为穷举法,在解决问题时,可能无法按照一定的规律从众多的答案中找出正确 答案,此时,可以从众多的候选解中逐一取出候选答案,并验证选取的答案是否为 正确答案。 缺点:运算量大,解题效率低。 优点:思路简单,程序编写调试方便。 例子: 逻辑推理题,问谁在说慌? 张三说李四在说谎,李四说王五
阅读全文
摘要:树属于非线性数据结构,它是一种层次结构:如果存在前驱节点,则是唯一的,如果存在后继节点,则可以是多个。即树的元素之间是一对多的关系。树是由n个节点构成的有限集合T,如果n = 0,则是空树,如果n不等于0,则一个非空树,有且只有一个根结点root,如果n>1,则除了根结点外,其余节点又可以划分为有限
阅读全文
摘要:转载自http://www.cnblogs.com/dolphin0520/ 十分感谢作者大大 KMP算法 KMP算法 在介绍KMP算法之前,先介绍一下BF算法。 一.BF算法 BF算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S
阅读全文
摘要:/* 数组的压缩储存: 在一些高阶矩阵中,非零元素非常少,此时如果使用二维数组将造成 储存空间的浪费,这时可只储存部分元素,从而提高储存空间的利用 率,通常的做法是为多个相同值的元素只分配一个储存单元,对值为 零的元素不分配储存单元。我们把非零元素个数远小于二维数组总元 素个数,或元素分布呈一定规律的(对称矩阵,三角矩阵,对角矩阵) 特殊矩阵压缩储...
阅读全文
摘要:/* 数组: 数组并不属于线性结构。数组是由类型相同的数据构成的有序集合 数组中的元素本身可以具有某种结构,而且元素的结构相同。数组 中的元素可以是一个单一的元素,也可以是一个线性表,因此数组 可以看做一般线性表的推广。 寻找数组中第k小的数 要查找第k小的数并不需要对整个数组进行排序,只需利用快速排序 的思想,每次将数据分成两堆,只要中间参...
阅读全文
摘要:/* 数据结构——串笔记 串:由零个或多个字符组成的有限序列。 串也有两种储存方式,顺序储存和链式储存 1.顺序表示的串——顺序串 一般使用字符型数组储存。 确定串的长度有两种方法。一是:在串的末尾加一个结束标记(在C语言 中系统自动在串值的末尾加一个'\0'作为结束标记 ),再使用 strlen 函数得...
阅读全文
摘要:/* 递推算法: 通过已知条件,利用特定关系得到中间结论,然后得到最后结果。 1.顺推法: 从已知条件出发,逐步推导出要解决问题的方法。 例如斐波拉契数列。 2. 逆推法 根据结果推导出已知条件 */ // 斐波拉契数列的递推实现 # include int main(void) { int Fn, ...
阅读全文
摘要:注意: 递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限
阅读全文
摘要:/* 队列:一种先进先出的线性表,它只允许在表的一端插入元素,另一端 删除元素,其中插入元素的一端叫做队尾,删除元素的一端叫做对头。 静态队列——使用一维数组储存队列中的元素,一个指针(front)指向 队头,一个指针(rear)指向队尾。 使用的数组必须是循环数组 */ # include # include # include #define LEN 6 // 定义队列长度...
阅读全文
摘要:/* 利用双向链表解决约瑟夫环问题(也可以使用循环链表) 问题描述: 将n个人围成一圈开始报数,每次报到m的人出列,它的下一个 人从1开始重新报数,直到所有玩家出列。 解决思路,使用一个双向循环链表模拟整个游戏成员,每一个节点 代表一玩家。 */ # include # include # include // 双向链表类型定义 typedef struct NOD...
阅读全文
摘要:// 数据结构 栈的实现 C语言, 只能从头部储存和销毁数据 # include # include # include // 线性储存部分 typedef struct NONE { int data; struct NONE * pNext; }None, * pNone; // 栈的头部和底部 typedef struct stack { pNone...
阅读全文
摘要:/* 顺序表示的线性表——顺序表 定义:线性表是由n个相同类型的数据元素组成的有限序列。线性表的数据 元素具有序偶关系,即数据元素之间具有一定次序。 线性表按照储存方式可以分成顺序储存和链式储存。线性表的顺序储存是指 将线性表中的元素储存在一组连续的储存单元中。例如数组。 顺序表的特点有:逻辑上相邻的元素在物理上也是相邻的。线性表的顺序储 存结构是一种随机存取的储存结构。 */ // 以...
阅读全文

浙公网安备 33010602011771号