数据结构
骑码找马
学习编程
展开
-
【leetcode】整数变换后越界问题
问题:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转,假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[−231, 231− 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。先看代码: int reverse(int x) { int res = 0; while(x!=0) { //每次取末尾数字 int tmp = x%10; /...原创 2020-05-31 10:22:14 · 457 阅读 · 0 评论 -
链表、二叉树、图的建立与初始化C源代码
注:为了省去输入的麻烦,以下程序所用数据均从文件读取1、链表建立与初始化建立如下链表建立一个名为data的txt文件,将此文件放在本程序所在文件夹目录下,文件内容为:#include <stdio.h>#include <stdlib.h>typedef struct LNode{ int data; struct LNo...原创 2019-07-13 20:19:11 · 1506 阅读 · 0 评论 -
考研常考算法总汇
二叉树前序递归与非递归遍历算法 二叉树中序递归与非递归遍历算法 二叉树后序递归与非递归遍历算法 二叉树层次遍历算法 树的前序遍历算法 树的后序遍历算法 霍夫曼树建立与霍夫曼编码算法 KMP算法 DFS深度遍历算法 BFS广度遍历算法 普里姆(Prim)最小生成树算法 克鲁斯卡尔(Kruskal)最小生成树算法 Dijkstra最短路径算法 Floyd最短路径算法 拓扑排...原创 2019-04-07 22:47:36 · 4468 阅读 · 0 评论 -
【Java-48】Java与数据库连接
Java与数据库连接依次经历以下几步:1.下载安装数据库以MySQL为例,下载安装访问https://mp.csdn.net/postedit/866795042.下载MySQL可视化数据库管理用户端工具Navicat下载安装包访问https://pan.baidu.com/s/1zCS4EaEz8nBLIYdMrFUGMQ,下载好了之后进入软件进行“连接”,建立一个项目,项目底下...原创 2019-01-28 16:53:13 · 481 阅读 · 0 评论 -
MySQL下载安装
1.下载https://pan.baidu.com/s/1I0mUnaojMFHl9AFSP4ySPw2.安装 https://www.jb51.net/article/140957.htm原创 2019-01-28 16:37:56 · 350 阅读 · 0 评论 -
【Java-37】基于Java的队列与栈的实现
在Java中,我们使用双端队列模拟队列与栈,如上图所示,双端队列只从队的头进(便于理解我们假设只从一头进),但是头与尾都可以出,如果从头出那么就是栈,如红线虚框,从尾出就是队列,如蓝线虚框1.模拟栈栈是先进后出,那么从双端队列的队头进入元素即为进栈,从双端队列队头出队即为出栈 Deque<String> deque=new LinkedList<String&...原创 2019-01-22 19:50:31 · 148 阅读 · 0 评论 -
图的逆邻接表及由邻接表导出逆邻接表代码
1.图的邻接表与逆邻接表直接看下图理解:2.由邻接表导出逆邻接表代码:void Reverse(ALGraph A,ALGraph &B){ int i,k; ArcNode *p1,*p2; B.vn=A.vn; B.en=A.en; for(i=1; i<=A.vn; i++) { scanf(...原创 2018-12-14 10:48:57 · 6658 阅读 · 7 评论 -
广义表
相关计算:存储结构:表头、表尾表示法//表头、表尾表示法typedef struct GLNode{ ElemTag tag; union { AtomType atom; struct { struct GLNode*hp,*tp; } ptr;...原创 2018-12-12 11:36:38 · 421 阅读 · 0 评论 -
大数外部排序
题意:将百万级数据排序,已知内存最大处理4K数据 4K内存容量是4000字节,也就是说能处理1000个数假如说现在有N数据进行排序,N为百万级,而内存一次只能处理1000个数据,我们做法是分部做,即先把N分成N/1000份数据,这样每份数据就都能用内部排序方法实现(本题使用2路),每份数据存在一个文件里然后再把这些文件合并。 具体实现过称为:假设原文件存储在test.txt中分别从...原创 2018-12-13 00:37:50 · 332 阅读 · 0 评论 -
Dijkstra算法和Floyd算法的正确性证明——数学归纳法
Dijkstra算法正确性证明命题:当算法进行到第 k 步时,对于S 中每个结点 i,dist [i] = short [i]归纳基础k = 1, S = {s}, dist [s] = short [s] = 0.归纳步骤证明:假设命题对 k 为真,则对 k+1命题也为真.归纳步骤证明:假设命题对k为真,考虑 k+1步算法 选择顶点v (边&lt;u,v&gt;)。需要证明若存...原创 2018-12-06 00:33:48 · 4414 阅读 · 0 评论 -
数据结构中的串
C语言中有个字符串,数据结构中有个串,联系是二者都是存储字符的,区别在于前者我们直接定义数组存储,以\0结尾,如char str[size];而后者我们是把字符串看成一个线性表,定义成结构体形式,结尾用length控制,可以用链表,也可以是顺序表,以下是顺序表定义:如typedef struct Str{ char elem[SIZE];//elem数组用来存放串的元素 ...原创 2018-12-08 12:10:20 · 7780 阅读 · 0 评论 -
判断后缀表达式正确性,并把后缀表达式转为前缀表达式
转载自:weixin_41133154 https://me.csdn.net/weixin_41133154指针从最后边扫描起,遇到操作符则存入栈中并且从表达式中删除该操作符,同时标记其匹配的操作数为0,如果遇到操作数,则应该对栈顶的操作符的配对操作数加一,当新来一个操作符时,对前面操作符的操作数配对期望降低,转而对新来的操作符先行配对操作数。当一个操作符成功配对两个操作数时,其配对期望...转载 2018-12-07 23:58:01 · 1844 阅读 · 0 评论 -
中缀、前缀、后缀表达式相互相互转换与求值
转载至:https://www.cnblogs.com/nzbbody/p/3335226.html表达式转化(中缀,后缀,前缀)1、为什么要把中缀表达式转化为后缀,前缀?计算机没法计算带有括号,以及区分优先级的表达式,或者说很难计算。使用后缀,前缀,消除了括号和优先级。2、中缀如何计算后缀,前缀表达式?计算后缀:从左到右遍历后缀表达式,遇到操作数,放进栈,遇到操作符,栈顶两个数出栈,进...转载 2018-12-07 21:33:56 · 1431 阅读 · 0 评论 -
跳出课本学KMP算法
KMP算法用于串的模式匹配,主串S,子串T(也叫模式串),模式匹配意思是从S中找出跟T一样的子串,就是说判断S是否包含T,时间复杂度O(m+n),实现这个算法关键有两步,第一步,求next数组,第二步KMP主算法如何理解next数组,**next[j]表示当子串T中第j个字符与主串中相应字符“失配”时,在子串T中需要重新和主串S中该字符进行比较的字符的位置。**例子:求:主串S=“ababca...原创 2018-12-05 12:15:57 · 207 阅读 · 0 评论 -
栈应用:中缀表达式求值
后缀表达式求值比较简单,基本过程为:遇到数字则进栈,遇到运算符则出栈俩数字然后计算结果,再把结果入栈,过程比较简单,不再复习了,下面着重记录中缀表达式求值中缀表达式求值可以先将中缀转后缀,再用后缀计算结果,但是,有点太麻烦,而另一种方式是利用两个栈直接求值,思想与上一个笔记中缀转后缀几乎一样,但稍有差别,中缀表达式求值基本过称为:定义两个栈,stack1存储数字,stack2存储运算符,将字符...原创 2018-12-02 00:43:39 · 26770 阅读 · 25 评论 -
栈应用:中缀转后缀,中缀转前缀
没多大技巧,严格按照规则,记住即可:转换过程需要用到栈,具体过程如下:1)如果遇到操作数,我们就直接将其输出。2)如果遇到操作符,则我们将其放入到栈中,遇到左括号时我们也将其放入栈中。3)如果遇到一个右括号,则将栈元素弹出,将弹出的操作符输出直到遇到左括号为止。注意,左括号只弹出并不输出。4)如果遇到任何其他的操作符,如(“+”, “*”,“(”)等,从栈中弹出元素直到遇到发现更低优先级...原创 2018-12-01 23:04:03 · 9778 阅读 · 2 评论 -
图,十字链表与邻接多重表存储方法
对于考研来说,这两个图存储方法属于低频考点,但是,一旦考了可就要了亲命了,以防万一,总结如下:十字链表主要用于存储有向图,临界多重表主要用于存储无向图,首先复习临界表画法: 十字链表结构根据有向图画十字链表**画图策略:**先从各个顶点结点画第二个指针,因为第二个指针为尾指针,尾指针画法与临界表一样 ,之后再分别从各个顶点画第一个指针,即指向头的边3. 储存代码...原创 2018-11-28 17:27:38 · 1753 阅读 · 0 评论 -
顺序表查找设置哨兵
既高端又俗气的名字:哨兵哨兵用于顺序表查找,所谓“哨兵”就是用一个特殊值来作为数组的边界,使用“哨兵”可以少用一条判断语句(少了i&amp;amp;lt;n这句),所以可以提高程序的效率。//普通查找代码int Search_1(int *a,int n,int key){ int i; for(int i=0; i&amp;amp;lt;n; i++) { if(a[i]==ke...原创 2018-12-02 15:30:58 · 7877 阅读 · 5 评论