![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构和算法
上官云霆
好好码砖,攒钱娶老婆。
展开
-
图的路径遍历和层级遍历
图的路径遍历可以得到图的所有路径图,层级遍历可以得到这个图有多少层,方便我们系统逐级加载数据 程序的主要功能 输出路径图。首选获得所有的路径图,以list展示 按层级展示(层级之间存在重复字段)。将这些路径图按层级进行归并。由于同一个字段可能以不同层级存在于一个字段,故两个层级之间存在重复字段) 按层级展示。将第二步中的字段,从高层开始向下层开始遍历,如果存在重复字段,则删除底层的重复字段。 import lombok.Getter; import lombok.Setter; import lomb原创 2021-11-22 13:42:09 · 1415 阅读 · 0 评论 -
多叉树的样例
工作中有关于菜单的处理,菜单即为多叉树的结构。该样例支持如下功能: 1.获取所有节点; 2.获取当前节点的所有子节点; 3. 获取当前节点的所有父节点 ; 4.获取同级字段; package express.tree; import com.alibaba.fastjson.JSONObject; import java.io.Serializable; import java.util.*; import java.util.stream.Collectors; public class Node原创 2021-07-30 18:22:35 · 191 阅读 · 0 评论 -
2.2.2笔记-线性表合并
数据结构笔记三 把顺序线性表合并,在教材P26中有个算法2.7。算法2.7的大致意思是:已知顺序线性表La和Lb的元素按值非递减排列,然后要求归并La和Lb得到新的顺序线性表Lc,Lc的元素也要按值非递减排列。下面程序的时间复杂度O(La.length+Lb.length)。 备注:若以线性表表示集合并进行集合的各种运算,应先对表中元素进行排序。(教材P26) 源代码原创 2015-12-14 12:15:58 · 790 阅读 · 0 评论 -
2.3.1笔记-线性表的链式表示和实现
和顺序表相比,链表存储结构在实现插入、删除的操作时,不需要移动大量数据元素(但不容易实现随机存取线性表的第i个数据元素的操作)。所以,链表适用于经常需要进行插入和删除操作的线性表,如飞机航班的乘客表等。线性链表中单链表的结构(教材P28)struct LNode{//线性表的单链表结构 ElemType data; LNode *next; };下面程序中用到的单链表是带有头结点的单原创 2016-01-18 13:32:51 · 1961 阅读 · 0 评论 -
1.3抽象数据类型的表示与实现
记得大二的时候学习严蔚敏大神的《数据结构》,满本书的抽象结构,抽象这个,抽象那个,直接整蒙了。最困难的就是概念本来就晦涩难懂,而且书里面也没有可以直接运行的代码,真头疼。好在最近发现高一凡编写的《数据结构算法解析》,里面是全是按照严奶奶的《数据结构》一书编排的代码。终于可以把数据结构全部转化成代码的形式了,趁着现在有时间再把数据结构以代码的形式梳理一遍,再提高一点点能力。 今天原创 2015-12-06 15:00:54 · 9877 阅读 · 2 评论 -
2.2.1笔记一线性表的顺序表示和实现
线性表的顺序表示和实现 线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素,以第一个单元的存储地址作为数据元素的存储位置(教材P21)。 线性表中的顺序表,是表中相邻的元素ai和ai+1 赋以相邻的存储位置LOC(ai)和LOC(ai+1)。以元素在计算机内“物理位置相邻”来表示线性表中的数据元素之间的逻辑关系(教材P22)。 下面的程序主要原创 2015-12-14 11:59:33 · 997 阅读 · 0 评论 -
2.3.2笔记-归并有序链表
教材《数据结构》第31页继续讨论如何将两个有序链表并为一个有序链表 假设头指针为La和Lb的单链表分别为线性表LA和LB的存储结构,现要归并La和Lb得到单链表Lc,之前已经在2.2笔记线性表合并中提到过合并(算法2.7(P26)),相同点都是要La和Lb是有序链表,然后判断pa->datadata时,则将pa所指结点链接到pc所指结点之后,否则将pb所指结点链接到pc所指结点之原创 2016-02-15 16:47:56 · 1234 阅读 · 0 评论 -
2.3.3笔记-不带头结点的单链表
单链表有两种形式:带头结点的单链表和不带头结点的单链表。带头结点的单链表的表示已经在 2.3笔记-线性表的链式表示和实现中做了解释。现在再在这次笔记里对不带头结点的单链表做个解释。不带头结点的单链表L是把头结点去掉,然后关于单链表L的基本操作跟带头结点的单链表的基本操作稍有不同,特别的是在ListInsert函数和ListDelete函数中都加入了对第一个结点的判断,因为在插入和删除中第一原创 2016-02-16 18:17:26 · 1593 阅读 · 0 评论 -
2.3.4笔记-循环链表
循环链表,在严蔚敏《数据结构》第35页中做了简略的提及 ,没在算法程序方面做过多的讲解。循环链表的特点是最后一个结点的指针域指向头结点,整个链表形成一个环。由此,从表中任一结点出发均可找到表中其他结点。(P35) 单链的循环链表结点的存储结构和单链表结点的存储结构一样。这两者的不同点在于,循环链表的最后一个结点的next域指向头结点,而不是“空” NULL。这样做的原原创 2016-02-17 13:06:20 · 561 阅读 · 0 评论 -
2.3.5笔记-双向链表
严蔚敏所著《数据结构》第35页中提到双向链表。双向链表主要是为了克服单链表单向性的缺点。单向性是指要找某个结点A的后继,只得从某个结点B出发顺指针往后寻查该结点A。若要寻查某个结点的直接前驱,则需从表头指针出发来寻找。 //线性表的双向链表存储结构 typedef struct DuLNode{ ElemType data; DuLNode *prior, *next; }DuLNode原创 2016-02-20 21:03:19 · 644 阅读 · 0 评论 -
台阶问题学习笔记
最近浏览CSDN的帖子看到了SillyBenzhu的关于列举走楼梯的解决方案,感觉挺好玩,所以试一下。 首先这个问题如果想很简单的解决就用递归法来解决,或者用SillyBenzhu的回溯加递归的方法。 递归法 修改SillyBenzhu的回溯+递归的方法,使之可以直接适用于Windows的VC++编译器。 /* * N阶楼梯上楼问题:一次可以走两阶或一阶,请把所有行走方式打原创 2015-04-05 21:02:31 · 700 阅读 · 0 评论 -
算法学习--查找(一)
找X 时间限制:1秒 内存限制:32M 特殊判题:否 题目描述: 输入一个数n,然后输入n个数值各不相同,再输入一个值x,输出这个值在这个数组中的下标(从0开始,若不在数组中则输出-1) 输入: 测试数据有多组,输入n(1 输出: 对于每组输入,请输出结果 样例输入 2 1 3 0 样例输出: -1 来源:2010年哈尔滨工业大学计算机研究生机原创 2015-12-02 19:22:46 · 434 阅读 · 0 评论 -
算法学习---查找(二)-二分查找
二分查找 题目:查找学生信息 时间限制:1秒 内存限制:32M 特殊判题:否 题目描述: 输入N个学术的信息,然后进行查询 输入: 输入的第一行为N,即学生的个数(N 接下来的N行包括N个学生的信息,信息格式如下: 01 李江 男 21 02 刘唐 男 23 03 张军 男 19 04 王娜 女 19 然后输入一个M(M 02 0原创 2015-12-02 19:26:53 · 851 阅读 · 0 评论 -
贪心算法实例
题目:有m元钱,n种物品;每种物品有j磅,总价值f元,可以使用0到f的任意价格购买相应磅的物品,例如使用0.3f元,可以购买0.3j磅物品。要求输出用m元钱最多能买到多少磅物品。 算法思想:本例基于贪心思想,我们每次都尽可能的多买性价比高的物品直到该物品被买完或者金钱耗尽。 实现过程:每次都买剩余物品中性价比(即重量价格比)最高的物品,直到该物品被买完或者钱被耗尽。若该物品已经被买完,则我们继原创 2015-06-07 19:36:25 · 1017 阅读 · 0 评论 -
动态规划法求最长公共子串长度
题目:求解两个字符串的最长公共子串长度 有两个字符串S1和S2,求一个最长公共子串,即求字符串S3,它同时为S1和S2的子串,且要求它的长度最长,并确定这个长度。这个问题就是最长公共子序列问题。 源代码 #include #include int dp[101][101]; int max(int a,int b){return a>b?a:b;}//取最大值函数 int main(){原创 2015-06-07 21:48:07 · 875 阅读 · 0 评论