- 博客(44)
- 收藏
- 关注
原创 中缀与前缀后缀表达式的转换
中缀转换为前缀和后缀 与 后缀转换为中缀在这位博主写的博客里:https://blog.csdn.net/balalalalalalala/article/details/8294582下面写一下前缀转换会中缀:前缀转换为中缀是从后向前找,找到一个运算符就拿出后面的两个数进行运算,运算之后的再放入后面数的最前端。依次向前找。...
2020-12-19 11:43:04
254
1
原创 最大子数组问题(分治法)
问题描述:对给定数组A,寻找A的和最大的非空连续子数组。输入格式:输入的第一行包括一个整数n,代表数组中的元素个数,接下来的一行包含n个整数(可以包含负数),以空格分隔。输出格式:一个整数,表示最大的连续子数组的和。样例输入:92 4 -7 5 2 -1 2 -4 3样例输出:8解题思路:使用分治法分:将数组分成两半,直到只有一个元素治...
2019-11-27 22:21:47
6747
5
原创 普里姆算法(Prim)
普里姆算法是归并顶点的算法,与边数无关,所以适用于稠密图。构造最小生成树一定有下面两个特点:1、尽量选取最小的权值的边,并且不能有回路2、n个顶点只选取n-1条边。普里姆算法是由最小生成树(简称为:MST)的一条性质引出来的:假设N=(V,E)是一个连通图,U是顶点集V的一个非空子集。若(u,v)是一条具有组小权值的边,其中u∈U,v∈ V-U,...
2019-05-07 14:42:25
42887
9
原创 Floyd算法(转载)
注:此博客前半部分转载于:https://www.cnblogs.com/wangyuliang/p/9216365.html暑假,小哼准备去一些城市旅游。有些城市之间有公路,有些城市之间则没有,如下图。为了节省经费以及方便计划旅程,小哼希望在出发之前知道任意两个城市之前的最短路程。 上图中有4个城市8条公路,公路上的数字表示...
2019-04-28 21:15:09
8256
1
原创 数据结构——图
一、图的存储结构1、邻接矩阵用邻接矩阵表示法表视图,出了一个用于存储邻接矩阵的二维数组外,还需要用一个一位数组来存储顶点信息。#define MaxInt 32767 //表示极大值#define MVNum 100 //最大顶点数typedef char VerTexType; //假设顶点的数据类型为字符型typedef int Ar...
2019-04-28 21:00:39
1080
原创 二叉树搜索树(即:二叉排序树,二叉查找树)
1、定义:二叉排序树或者是一颗空树,或者是具有下列性质的二叉树:(1)若它的左子树不空,则左子树上的所有结点的值均小于它的根结点的值。(2)若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值。(3)它的左、右子树叶分别是二叉排序树。二叉排序树是递归定义的。由定义可得:中叙遍历二叉排序树是可以得到一个结点值递增的序列。二叉排序树的二叉链表存储表示:...
2019-04-13 16:39:22
4240
2
原创 字符串匹配算法的改进(数组下标从0开始)包括BF算法和KMP算法
在数据结构课程中我们学习的BF算法和KMP算法都是忽略0位置,从1位置开始的。这就给我们带来了很多麻烦,在标准输入流中都是从零位置开始输入的,所以需要改进一下BF算法,使其从0位置开始比较。下面是书本上从1位置开始的BF算法:int Index_BF(SString S,SString T,int pos){ int j=1; int i=pos; //初始化i...
2019-04-12 15:50:35
916
3
原创 二叉树的非递归遍历(前,中,后)
1、中序遍历(1)递归中序遍历void OrderTree(BinTree T){ if(T){ cout<<T->key; OrderTree(T->lchild); OrderTree(T->rchild); }}(2)非递归中叙遍历根据中序遍历的顺序,对于任一结点,优先访问其...
2019-04-09 23:26:51
165
1
原创 URL重写
URL重写:一种修改URL管理会话的技术。 一种通过修改URL传递数据给下一个组件(Servlet或JSP)的技术 一般URL重写多是为了追加参数,参数名随便取,但是要有意义。...
2019-04-04 16:27:39
131
原创 字符类型与整形之间的转换
字符类型存储的是字符的ASCII码。所以字符类型可以以整数形式输出。将整数赋值给字符类型,然后以字符类型输出,就是输出ASCII对应的整形的字符;但是将整形赋值给字符类型之后以整形输出,输出的不一定是原来赋值的整形。因为ASCII码只规定了-128〜127之间,在这之内,以什么整形赋值的就是以什么整形输出的。但是超过这个范围,就会自动进行转换,不会在输出原来的数值。 将字符类型赋值...
2018-12-04 11:32:09
8624
2
原创 判断素数的高效的方法
以前判断素数的方法是:将每个值传入一个函数,这个函数里面用 for循环判读是否为素数。这种方法的效率比较低,所以经过在网上查找资料和大佬的整理,出现里另外一种效率较高的判断素数的方法——孪生素数法。 首先我们要知道什么是孪生素数:素数对(p, p + 2)称为孪生素数。 孪生素数中有一个定理:大于3的素数只分布在6n-1和6n+1两数列中。(n非0自然数)。...
2018-11-18 15:22:29
5499
9
原创 KMP算法的nextval数组
nextval数组是在next数组缺陷的情况下提出的,例如:模式“aaaab”在和主串"aaabaaaab"匹配时,当i=4,j=4时s.ch[i]!=T.ch[j],由于next[j]=3的指示,会模式串右滑一位进行i=4,j=3的比较,接着有根据next数组的指示会进行i=4,j=2,i=4,j=1的比较。实际上,因为模式串1~3个字符和第四个字符都相等,因此不需要再和主串中第第四个字符比较,...
2018-11-10 21:44:52
1790
1
原创 7-16 银行排队问题之单队列多窗口服务 (25 分)
7-16银行排队问题之单队列多窗口服务(25分)假设银行有ķ个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙。当有窗口空闲时,下一位顾客即去该窗口处理事务。当有多个窗口可选择时,假设顾客总是选择编号最小的窗口。本题要求输出前来等待服务的Ñ位顾客的平均等待时间,最长等待时间,最后完成时间,并且统计每个窗口服务了多少名顾客。输入格式:输入第1行给出正整数N(≤1...
2018-11-08 23:54:38
11909
2
原创 KMP算法
怎么说呢,KMP算法确实有难度。我一开始就是搞不明白,半懂不懂的,后来看了大神的帖子才有点小明白。特此写个博客,加深一下印象,并且希望能够理解的更透彻一些。大神博客:http://www.cnblogs.com/tangzhengyue/p/4315393.html要了解KMP算法,首先需要了解BF算法。一、BF算法——最简单最直观的模式匹配算法首先,要说明的是模式匹配不一定是从主...
2018-11-03 21:49:22
249
原创 递归算法求单链表的操作
#include<stdio.h>typedef struct Node{ int data; struct Node *next;}Node,*LinkNode;int maxLinkNode(LinkNode L);int AllNode(LinkNode L);float AverageNode(LinkNode L,float sum,float ...
2018-10-28 19:21:47
609
原创 用递归算法求点链表中的最大整数
算法:int maxLinkNode(LinkNode L,int max){ if(L==NULL) //结束标志,如果L指向的当前结点为NULL,则返回最大值max return max; if(L->data>max){ //如果当前结点的整数大于max max=L->data; ...
2018-10-28 17:33:09
2949
原创 以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素。P85 T(6)
循环链表表示队列,只设一个队尾结点。因为是循环链表,队尾结点的下一个就是头结点,所以可以从队尾结点得知头结点的位置。判断队空的:队尾指针指向头结点一、初始化bool InitQueue(LinkQueue Q){ Q->next=Q; //头结点指针指向自己实现循环链表 Rear=Q; //队尾指针指向头结点,表示队空 ...
2018-10-28 16:57:54
1943
1
原创 链队的实现及操作
链队通常用单链表来表示。所以需要两个分别用来指向队头和队尾的指针。为了便于插入和判断链队的队空(没有队满),还需要增加一个头结点。初始化是使头指针和尾指针都指向头结点,表示队空。链队的存储结构:typedef int QElemType;typedef struct QNode{ QElemType data; struct QNode *next;}QNode,*...
2018-10-27 21:44:35
322
原创 循环队列的实现及操作
普通的顺序队列实现有弊端(P71),用循环队列实现用来解决这一弊端,同时循环队列实现需要空出一个空间来,依次来区分队满和队空。他的指针是不是真正的指针变量,而是int型的,用来记录数组下标,起到了指针的作用。因为只有这样才能实现取模循环注意:循环队列的尾指针始终指Rear向下一个空间,即为指针的上一个才是存放数据的空间。 循环队列的头指针Front始终指向最后一个有...
2018-10-27 20:51:16
450
原创 用栈实现判断回文
用栈实现判断回文利用了栈先进后出的特性。即只要把一般放进栈里面,然后利用栈的特性,后进先出,然后一个一个弹出来和后面的比较即可。但是这需要先把字符串存到一个数组中,计算出字符串的长度,然后再将一半存入栈中。#include<stdio.h>#include<string.h>typedef struct { char a[100]; int...
2018-10-27 19:36:35
1899
原创 在一个数组中实现两个堆栈
题目要求:。将编号为0和1的两个栈放于一个数组空间V [米]中,底栈分别处于数组的两端当第0号栈的栈顶指针顶[0] = - 1时该栈为空;当第1号栈的栈顶指针顶[1] = M时,该栈为空。两个栈从两端向中间增长试编写双栈初始化,判断栈空,栈满,进栈和。 。出栈等算法的函数双栈数据结构的定义如下:typedef struct { int top[2],bot[2]; //栈顶和...
2018-10-24 21:25:01
875
原创 链栈的实现
typedef int ElemType;typedef struct StackNode{ ElemType data; //当前结点的的数据域 struct StackNode *next; //指向前一个结点的指针}StackNode,*LinkStack;链栈的实现是先定义一个结点指针,使其为NULL。这个作为判断是否空栈的标志。链栈...
2018-10-23 21:08:09
293
原创 顺序栈的实现
//栈的存储结构typedef struct stacknode{ SElemType *base; //栈底指针 SElemType *top; //栈顶指针 int stacksize; //栈可用的最大容量}顺序栈和顺序表一样都是借助数组实现的,只不过顺序栈只能在尾部进行增加或者删除。base指针始终指向栈底位置,若base为NULL,则表明栈...
2018-10-23 20:49:42
235
原创 一个函数被调用系统之前系统做的三件事和被调函数返回调用函数的之前系统做的三件事
在一个函数被调用之前系统做的三件事:1、将所有的实在参数,返回地址等信息传递给被调用函数保存。2、为被调用函数的局部变量分配存储区。3、将控制入口转移到被调函数的入口。 以上第二步可见,在被进入调用函数之前就已经对其内部的局部变量进行分配空间,所以调用函数内部最好不要有重复的局部变量(这里重复的局部变量比如第一个if条件句里面定义了一个int p;然后又在一下一个if()条件句...
2018-10-23 19:14:08
780
原创 malloc(),calloc(),realloc()函数的区别
一,malloc()函数malloc()的原型为void * malloc(unsigned int num_bytes)num_byte为要申请的空间大小,需要我们自己去计算,比如我们要20个INT型的空间大小,就可以使用:p =(int *)malloc(20 * sizeof(int)); 二,calloc()函数ccallo()函数的原型是: void * callo...
2018-10-23 18:29:36
274
原创 遍历链表确定链表中的最大值
Position Find( List L, ElementType X ){ for(int i=0;i<L->Last;i++) if(L->Data[i]==X) return i; return ERROR;}
2018-10-19 14:44:49
1310
原创 将两个非递减的有序链表合并为一个非递增的有序链表,要求使用原来两个链表的存储空间,表中允许有重复的数据。
#include<stdio.h>#include<stdlib.h>#define MAXSIZE 20;typedef struct LNode{ int data; struct LNode *next;} LNode,*LinkList;LinkList mergelinklist(LinkList La,LinkList Lb);in...
2018-10-19 14:38:41
14315
2
原创 将两个有序递增链表合并成一个有序递增链表,要求结果仍使用原来两个链表的存储空间,不另外占有空间。
#include<stdio.h>#include<stdlib.h>#define MAXSIZE 20;typedef struct LNode{ int data; struct LNode *next;} LNode,*LinkList;LinkList mergelinklist(LinkList La,LinkList Lb);in...
2018-10-19 14:15:18
16581
4
原创 单链表逆序
//这个算法是没有头结点的情况List Reverse( List L ){ //这里的L是原链表的表头. List head,next,prev;//head用来存储当前结点的地址,next存储下一个结点的地址,prev存储上一个 head=L; //当前结点是首元结点 prev=NULL;//上一个结点应该是NULL while(head!=NULL){ next=he...
2018-10-17 22:44:06
104
原创 PTA 线性表元素的区间删除 -----时间复杂度O(n)
PTA题目链接:https://pintia.cn/problem-sets/1042077620734685184/problems/1045141813475319808题目要求删除线性表中中所有值大于minD并且小于MaxD的元素,并且保持剩余元素按照原来顺数存储。 看到题目后我最开始想的便是for循环判断,然后找到后再for循环移动删除,但是这样时间复杂度是O(n方)发现有一个...
2018-10-17 20:35:09
2534
1
原创 Java的数组
Java的引用类型:类,数组,接口。一、一维数组1、数组的静态初始化 数组的静态初始化就是在数组实例化的时候就赋值,不用写数组的空间大小。 int []intArry =new int []{1,2,3,4,5};//这就是创造一个5个储存空间的数组 //这里的intArry[]就是引用变量,后面就是实例化和简单方式的实例化.//也可以...
2018-10-10 20:36:41
146
原创 Java的访问权限
外部类只可以带两种访问权限:public,default(是默认的,class前面什么都不加就是default)访问权限标识符:private,protected,public访问权限:private,default,protected,publicdefault是包访问权限,只能在同一个包内访问。private是私有权限,只有在该类里能访问。public是公开的所有都可以访问...
2018-10-10 20:25:14
195
原创 Java的this关键字
this表示调用方法的当前对象。this的用法:1、如果在类的方法中调用同一个类的成员变量或成员方法时,不必使用this,直接使用就可以。 如果方法的参数或局部变量与成员变量同名,即产生歧义,这种情况下必须使用this。 2、如果一个类中定义了多个构造函数,为了避免重复代码可以在一个构造函数里调用另一...
2018-10-10 20:11:34
122
原创 java的构造方法
构造方法的特点:与类同名,没有返回值 在我理解中构造函数就相当于malloc函数,而类名定义的引用变量,就是一个指针。构造函数就是申请一块空间,将指针赋值给引用变量。这就是实例化,类似于C语言的指针赋值。而构造函数传参数赋值的功能。构造函数的作用:1、实例化时调用 2、初始化对象如果没有定义构造函数,系统会分配一个默认的构造方法,这个构造函数没有参数,只会申请一块空间进行实例化。...
2018-10-10 19:40:21
171
原创 Java基础
Java程序的构建模块:类,数据类型,类成员,包。定义类应遵循的特殊规定:1、类名只能有:数字,字母,下划线,$2、类名不能以数字开头。3、类名是唯一的4、类名不能含关键字命名类的约定(以提高程序的可读性):1、类的第一个字母应该大写2、类名应为名字3、如果类名包含几个单词,则每一个单词的第一个字母都应该大写 类:类的成员:变量,方法,构造方法/构造...
2018-09-28 15:14:38
91
原创 数据结构的基础概念和术语
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。即:数据结构就是一个数据元素及其对应的相互之间的关系的集合。------------------------------------------数据的基本概念----------------------------------数据:在计算机中是指所有能输入到计算机中并被计算机程序处理的符号的总称。数据元素:是数据的基本单位...
2018-09-13 20:54:06
355
原创 数组循环右移/左移
一、数组循环右移#include<stdio.h>int main(){ int n,m,a[100],i; //n是数组的大小,m是数组要右移的位数。 scanf("%d %d",&n,&m); for(i=0;i<n;i++) scanf("%d",&a[i]); while(m...
2018-08-26 23:22:14
3919
原创 Java的运算符
一、+ - * / %【+:当+遇到字符串的时候 不再代表算术加法 而是追加链接,只要+两面有一面是字符串就是追加链接,但是若都不是就是算术加法】【*: 注意容易溢出】【/:整数除以整数结果一定是整数,取整】【%:最终结果的符号位 取决于参与运算的第一个数 即第一个数是整数结果就是正,第一个是负结果就是负。与第二个数无关】 二、+= -= *= ...
2018-08-23 21:57:06
169
原创 java的基本数据类型
Java的数据类型有 四类 八种 :boolean char byte short int long float double布尔型:boolean [数值只能是true/false] *:不允许使用数字赋值字符型:char 采用unicode 16位(2字节)字符型的几种赋值形式:1、char c1='a'; ...
2018-08-23 21:12:02
89
原创 浮点型数据在计算机底层的存储方式
浮点型在计算机存储包括三个部分:符号位(1位)+幂指位(8位或者11位)+数值位(23位或者52位)float 32 = 1 + 8 + 23double 64 = 1 + 11 + 52将浮点型转化成二进制分为三步。以35.25为例1>将数值转化成二进制表示 整数部分:35 => 32 + 2 + 1 => 100011 ...
2018-08-23 20:43:41
996
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人