自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 图的最短路径——迪杰斯特拉算法(Dijkstra算法)、弗洛伊德算法(Floyd算法)和广度优先搜索(BFS)算法求最短路径(无权图)

一、迪杰斯特拉算法(Dijkstra算法)(1)算法从某一顶点到其余各项顶点的最短路径。引进三个辅助数组dist[]、path[]和set[]。dist[vi]表示当前已找到的从v0到vi的最短路径长度。path[vi]中保存从v0到vi最短路径上vi的前一个顶点。set[]为标记数组。/*邻接矩阵的结构定义*/#define maxSize 100typedef struct{ int edges[maxSize][maxSize]; //邻接矩阵定义 int n,

2021-07-25 21:30:31 1391 2

原创 最小生成树——普里姆算法(Prim算法)和克鲁斯卡尔算法(Kruskal算法)

一、普里姆算法(1)将v0到其他顶点的所有边当作侯选边;(2)重复一下步骤n-1次,使得其他n-1个顶点被并入到生成树中。①从侯选边中挑选出权值最小的边输出,并将与该边另一端相接的顶点v并入生成树中;②考查所有剩余顶点vi,如果(v,vi)的权值比lowcost[vi]小,则用(v,vi)的权值更新lowcost[vi]。/*邻接矩阵的结构定义*/typedef struct{ int no; //顶点编号 //char info; //顶点其他信息}VertexType;type

2021-07-23 22:23:10 2939

原创 图的遍历算法操作——深度优先搜索遍历和广度优先搜素遍历

一、邻接表存储表示的定义/*邻接表存储表示的定义*/typedef struct ArcNode{ int adjvex; //该边所指向的结点的位置 struct ArcNode *nextarc; //指向下一条边的指针 //int info; //该边的相关信息(如权值),这一句用得不多,题目不做特殊要求可以不写}ArcNode;typedef struct{ char data; //顶点信息 ArcNode *firstarc; //指向第一条边的指针}VNode;t

2021-07-22 16:22:13 609

原创 关于浮点型数组A[0,…,n-1],试设计实现下列运算的递归算法

关于浮点型数组A[0,…,n-1],试设计实现下列运算的递归算法(1)求数组A中的最大值思路:①如果数组A长度为1,则可以直接返回最大值。②否则将数组A视为两部分,即A[0]和A[1,…,n-1]。如果A[0]大于A[1,…,n-1]的最大值,则返回A[0],反之按照上一步的方法递归地处理A[1]大于A[2,…,n-1]。float findmax(float A[], int i, int j){ float max; if(i==j) return A[i]; else{

2021-06-25 14:50:36 1354 1

原创 给定一个稀疏矩阵A(float型),其尺寸为mxn,建立其对应的三元组存储,并通过三元组打印输出矩阵A

题目:给定一个稀疏矩阵A(float型),其尺寸为mxn,建立其对应的三元组存储,并通过三元组打印输出矩阵A。思路:扫描矩阵A,将矩阵A中非零元素的个数、非零元素的值、以及非零元素在原数组中的位置,存到建立的三元组B中。建立三元组B/*建立三元组B*/void createtrimat(float A[][maxSize], int m, int n, float B[][3]){ int k=1; for(int i=0;i<m;++i) for(int j=0;j&lt

2021-06-24 18:28:55 531

原创 中缀表达式转后缀、前缀表达式的方法

举一个中缀表达式的例子:a+b-a*((c+d)/e-f)+g中缀表达式转后缀表达式方法一:括号法①按照运算符的优先级,对所有的运算单位加括号。于是变成:(((a+b)-(a*(((c+d)/e)-f)))+g)②从最里面的括号开始,依次把运算符号移动到对应的括号的后面。于是变成:(((ab)+(a(((cd)+e)/f)-)*)-g)+③最后,把括号都去掉于是变成:ab+acd+e/f-*-g+方法二:利用语法树略。方法三:基于堆栈的算法具体转换方式:.

2021-06-03 11:25:16 7044 1

原创 字符型和整型之间相互转化

#include <stdio.h>int main(int argc, char **argv) { printf("字母f的大写字母是%c\n", 'f'+'A'-'a'); printf("将字符\'8\'转换成整型:%d\n", '8'-'0'); printf("字符\'8\'的ASCII编码:%d\n", '8'-0); printf("输出字符\'8\':%c\n", '8'-0); return 0;}...

2021-05-30 11:27:05 347

原创 栈的链式存储结构

链栈结点定义这里用带头结点的单链表作为存储体。typedef struct LNode{ int data; //数据域 struct LNode *next; //指针域}LNode; //链栈结点定义

2021-05-29 14:49:53 114

原创 栈的顺序存储结构

栈的顺序存储结构可描述为#define MaxSize 50 //定义栈中元素的最大个数typedef struct{ ElemType data[MaxSize]; //存放栈中元素 int top; //栈顶指针}SqStack;

2021-05-29 12:03:38 126

原创 一些单链表的题目(3)

17、题目:设计一个算法用于判断带头结点的循环双链表是否对称思路:让p从左向右扫描,q从右向左扫描,直到它们指向同一个结点或相邻结点为止。(p==q,p->next=q或q->next=p)。若它们所指结点值相同,则继续进行下去,否则返回0。typedef struct DNode{ //定义双链表结点的类型 ElemType data; //数据域 struct DNode *prior, *next; //前驱和后继指针}DNode, *DLinklist;int Sym

2021-05-27 22:44:52 602

原创 一些单链表的题目(2)

9、题目:给定一个带表头结点的单链表,设head为头指针,结点结构为(data,next),data为整型元素,next为指针,试写出算法:按递增次序输出单链表中各结点的数据元素,并释放结点所占的存储空间(要求:不允许使用数组作为辅助空间)思路:对链表进行遍历,在每次遍历中找出整个链表的最小值元素,输出并释放结点所占空间;再次查找最小值,输出并释放空间,如此下去,直至链表为空,最后释放头结点所占的存储空间。时间复杂度为O(n²)void Min_Delete(LinkList &head){

2021-05-25 14:34:32 985

原创 一些单链表的题目(1)

1、题目:设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点思路:需要借助一个递归工作栈,深度为O(n),时间复杂度为O(n)void Del_X(LinkList &L, ElemType x){ LNode *p; //p指向待删除的结点 if(L==NULL) //递归出口 return; if(L->data==x){ //若L所指结点的值为x p = L; //删除L结点 L = L->next; //并让L指向下一结点 free(p)

2021-05-20 09:45:01 506

原创 双链表的定义、初始化、插入、删除和销毁

1.双链表定义//双链表定义typedef struct DNode{ ElemType data; //数据域 struct DNode *prior, *next; //前驱和后继指针}DNode, *DLinkList;2.初始化双链表//初始化双链表bool InitDLinkList(DLinkList &L){ L = (DNode *)malloc(sizeof(DNode)); //创建头结点 if(L==NULL) return false; //内存

2021-05-15 11:38:13 575

原创 单链表的定义、插入(头插法和尾插法)、删除和查找

1.单链表的定义//单链表定义typedef struct LNode{ ElemType data; struct LNode *next;}LNode, *LinkList;2.单链表的插入操作(头插法和尾插法)(1)头插法(带头结点)//头插法(带头结点)LinkList List_HeadInsert(LinkList &L){ LNode *s; int x; L = (LinkList)malloc(sizeof(LNode)); //创建头结点 L

2021-05-13 17:15:56 692

原创 顺序表的定义和基本操作

1、顺序表的定义顺序表,即线性表的顺序存储,用一组地址连续的存储单元依次存储线性表中的各个元素,使得线性表中在逻辑结构上相邻的两个元素在物理位置上也相邻。注意:线性表中元素的位序是从1开始的,而数组中元素的下标是从0开始的。假定线性表的元素类型为ElemType,线性表的顺序存储可以是静态的,也可以是动态的。//静态分配#define maxSize 100; //定义顺序表的最大长度typedef struct{ Elemtype data[maxSize]; //顺序表的元

2021-05-03 14:31:56 4736

原创 输入今天的日期,输出明天的日期

题目:输入今天的日期,输出明天的日期#include <stdio.h>#include <stdbool.h>struct date { int month; int day; int year; };bool isLeap(struct date d);int numberOfDays(struct date d);int main(int argc, char **argv) { struct

2021-04-22 22:50:58 1927

原创 判断素数——构造素数表

题目:判断素数——构造素数表#include <stdio.h>int main(int argc, char **argv) { const int number = 25; int isPrime[number]; int i; int x; for(i=0; i<number; i++){ isPrime[i] = 1; } for(x=2; x<number; x++){ if(

2021-04-03 14:13:46 100

原创 输入一个数字key,找出key在数组a中的位置

题目:输入一个数字key,找出key在数组a中的位置#include <stdio.h>//查找函数int search(int key, int a[], int length){ int ret = -1; int i; for(i=0; i<length; i++){ if(a[i] == key){ ret = i; break; } } return

2021-04-03 11:26:10 842

原创 输出数量不确定的[0,9]范围内的整数,统计每一种数字出现的次数,输入-1表示结束

题目:输出数量不确定的[0,9]范围内的整数,统计每一种数字出现的次数,输入-1表示结束#include <stdio.h>int main(int argc, char **argv) { const int number = 10;//数组的大小 int x; scanf("%d", &x); int count[number];//定义数组 int i; //初始化数组 for(i=0; i<number; i

2021-03-07 11:24:02 498

原创 输入两个数a和b,输出它们的最大公约数

最大公约数(Greatest Common Divisor)缩写为GCD。使用辗转相除法(也叫欧几里得算法)求最大公约数。定理:两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。/*如果b等于0,计算结束,a就是最大公约数;否则,计算a除以b的余数,让a等于b,而b等于那个余数;回到第一步 a b t12 18 1218 12 612 6 06 0*/#include <stdio.h>int main(i

2021-03-01 22:31:10 5506

原创 输入一个非负整数,正序输出它的每一位数字

题目:输入一个非负整数,正序输出它的每一位数字#include <stdio.h>int main(int argc, char **argv) { // 13425 / 10000 ->1 // 13425 % 10000 ->3425 // 10000 / 10 ->1000 // 3425 / 1000 ->3 // 3425 % 1000 ->425 // 1000 / 10

2021-02-12 21:27:30 2811

原创 计算机给出随机数,猜数字大小

题目:让计算机来想一个数,然后让用户来猜,用户每输入一个数,就告诉它是大了还是小了,直到用户猜中为止,最后还要告诉用户它猜了多少次。#include <stdio.h>#include <stdlib.h>#include <time.h>int main(int argc, char **argv) { srand(time(0)); int num = rand()%100+1;//num的取值为1-100 int a, count =

2021-02-10 20:48:20 1187

原创 安装sublime text3插件的前期准备

首先首先,你得已经安装好了sublime text3。第一步  你需要 Package Control 来控制插件。有两种安装方法。第一种:点击快捷键  ctrl+` ,sublime底部会出现控制菜单,你把下面这一串代码复制进去,按回车键即可。第二种:下载这个插件。把它复制粘贴在 Installed Packages/ 这个文件夹下面。 第二步 安装插件安装好了P...

2018-12-14 10:57:43 136

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除