
数据结构
XIE_QAID
java后端
展开
-
图-邻接表的创建
话不多说直接上代码#include "pch.h"#include <iostream>#define MAX_VERTEX_NUM 20typedef enum{ DG,DN,UDG,UDN} GraphKind; // 图的类别typedef char VertexType[4];typedef struct ArcNode //边表结点{ int Adjve...原创 2019-04-15 20:57:00 · 651 阅读 · 0 评论 -
图---使用邻接矩阵创建图
编写一个算法,采用邻接矩阵创建一个有向网** 分析** :1.创建顶点信息,存储到一个向量中2.创建弧的信息,存在二维数组中,二维数组行号为起始顶点下标,列号为到达顶点的行号,权值存入数组中;第一步: 根据输入有向图的顶点数,弧数和各个顶点创建一个一维数组第二步: 输入每条弧的弧尾、弧头、权值代码:vs2017环境下编译通过#include "pch.h"#include <...原创 2019-04-14 11:16:13 · 2072 阅读 · 2 评论 -
图-Dijkstra迪杰斯特拉算法
问题:找出如下图中v0 到各点的最短距离,并输出距离及路径程序运行截图:分析:在图中找到V0到各点的最小短距离路径:** 使用dijkstra算法求单源最短路径**用dist[]数组来存储v0到各点的最短距离,path[]来存储路径,path[w]= v即w点经过v,collected[]记录该点是否被收入s第一步:初始化,所有dist设置为无穷大,path设置为-1第二步:...原创 2019-04-18 10:13:56 · 365 阅读 · 0 评论 -
图-最小生成树-Prim算法
问题:使用Prim算法从以下图中构造最小树。最小生成树:构造连通网的最小代价生成树—无回路,v个顶点一定有v-1条边,边的权重系数最小算法实现思路:Prim算法:每次在与树相邻接的点中选择权值最小的边,从一个小树慢慢长大MST[]数组用来存储各顶点是否被收入,初始化为0,收入为1;dist[]数组用来表示各点到树的距离,树里的点为0,和树邻接的点为E(v,w);parent[]为每一个...原创 2019-04-18 20:30:09 · 496 阅读 · 0 评论 -
图-拓扑排序
拓扑排序如果从V->W有一条有向路径,则v一定排在w之前。满足次条件的顶点序列为拓扑序列。获得拓扑序的过程叫做拓扑排序**AOV网:**用弧表示活动间优先关系的有向图成为顶点表示活动的网。 —>应用于学生排课拓扑排序解决办法:(1)在有向图中选择一个没有前驱的顶点输出;(2)从图中删除该顶点和所有以它为尾的弧;问题:将以下表示课程优先关系的有向图按拓扑排序输出。话不多说,...原创 2019-04-19 16:30:09 · 402 阅读 · 0 评论 -
哈希表
给定一组元素的关键字hash[] = {78,90,66,70,155,82,123,231},利用除留余数法和线性再探测散列法将元素存储再哈希表中,并查找给定的关键字,求平均查找长度。分析:主要考察哈希表的构造和冲突解决办法代码:#include "pch.h"#include <iostream>#include<stdio.h>#include<s...原创 2019-05-04 15:44:34 · 168 阅读 · 0 评论 -
插入排序
**问题:**任意给定一组元素序列,利用直接插入排序、折半插入排序和希尔排序对该序列进行排序分析:插入排序最好可以类比为打扑克牌时,我们摸完牌后再将牌插到合适得位置。主要有几个操作:从未排序的序列里摸一张牌,也就是把未排序的第一张牌取出来;和前面牌完序的牌进行大小比较,如果手里的牌比前面的小,就一直交换位置。直接插入排序void Insertion_sort(SqList *L)...原创 2019-05-04 20:05:09 · 342 阅读 · 0 评论 -
冒泡排序和快速排序
冒泡排序和快速排序都是以交换位置为基础的排序,快速排序是对冒泡排序的改进。冒泡排序:交换相邻两个元素话不多说直接上代码:void Bubble_Sort(SqList *L)/*冒泡排序*/{ for (size_t p = L->Length-1; p >0; p--) { for (int i = 0; i < p; i++) { if (L-&g...原创 2019-05-04 22:44:15 · 145 阅读 · 0 评论 -
堆排序和简单选择排序
简单选择排序就是每次从i到N-1中选择最小的数,然后放在第i个位置,其算法复杂度为O(N2);堆排序是简单选择排序的改进,通过建立最大堆,每次将最大堆的根节点取出放在最后的位置,然后再重新调整为最大堆,时间复杂度为O(NlogN)。简单排序算法void Select_Sort(SqList *L)/*简单选择排序,算法复杂度为O(N2),不稳定*/{ int postion; f...原创 2019-05-06 11:29:36 · 489 阅读 · 0 评论 -
归并排序
归并排序:归并排序的核心是将两个有序的子列合并成一个有序的序列。归并排序的主要方法有递归的归并排序和使用非递归的归并排序。1.递归的归并排序采用分而治之的策略,将一段序列分成两段,分别排序和再进行合并。这排序方法的时间复杂度为O(NlogN),空间复杂度为O(N),我们需要借助一个和待排序序列同等大小的Tmp顺序表,因此这种方法多用于外部排序。合并两个子列:使用分别进行比较,小的放进Tmp...原创 2019-05-06 16:45:14 · 150 阅读 · 0 评论 -
基数排序
基数排序和其他排序方法不同,实现基数排序不需要对元素之间进行比较,它主要是利用多个关键字进行排序。1.桶排序例如,年纪有1000个人,他们的学习成绩在0-100分之间,那么,对这1000个人排序我们只需要按照分数0,1,2,… ,99,100,建立101个桶,然后依次把每个学生的成绩放入桶内,这样就完成了排序。算法分析:首先我们知道学生的成绩范围,ScanForMax(SqList L)...原创 2019-05-07 11:17:18 · 230 阅读 · 0 评论 -
数据结构---霍夫曼编码
霍夫曼编码算法的实现从键盘输入字符序列及对应的权重,输出霍夫编码分析:构造树结点,输入带编码字符及对应的权值;在树结点中选择parent = 0, 且权值最小的两个结点构造Huffman树并求出编码代码:#include "pch.h"#include<iostream>#include<cstdio>#include<cstring>...原创 2019-04-12 15:09:35 · 246 阅读 · 0 评论 -
树---二叉树,线索二叉树,中序遍历线索二叉树
问题:创建一个线索二叉树,并将其中进行线索化。任给一个结点找到结点的中序前驱和中序后继。算法分析:第一步创建二叉树结构:根据输入一个广义表来创建二叉树(A(B(D,E(H)),C(F(,I),G))),使用二叉树的链式表示,左右孩子表示法;用一个栈来存“(”后面的字母的指针,遇见“)”回退top–,再等于向top-1的指针遍历广义表字符串,令pre指向树的头结点,开始遍历,遇见“(”...原创 2019-04-08 21:48:32 · 697 阅读 · 0 评论 -
数据结构---链表
链表的创建,显示,插入,删除完整代码 1 /* 创建一个链表,手动输入节点*/ 2 /*完整的显示链表*/ 3 #include<stdio.h> 4 #include<stdlib.h> 5 6 //定义结点 7 struct student 8 { 9 long no;//学号 10 char name[20...原创 2019-01-20 23:07:50 · 128 阅读 · 0 评论 -
数据结构--链表习题
从表a中删除自第i个元素起共len个元素后,将它们插入到表b中第j个元素之前。#include <stdio.h>#include<stdlib.h>typedef int ElemType;struct Student { ElemType data; struct Student *next;} ;typedef struct St...原创 2019-01-25 20:31:44 · 291 阅读 · 0 评论 -
约瑟夫问题解法。
问题:有n个小朋友,编号反别为:1,2,3,…,,n,按编号围成一个圈,他们按顺时针方向从编号为k的人开始报数,报数为m的人出列,编一个算法,输入n,m,k,按照出列顺序输出编号。分析:(1)创建循环链表(2)找到看第k个小朋友;(3) 报到m的人节点删除;代码:// DoubleLinkedList.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//...原创 2019-03-13 21:39:39 · 654 阅读 · 0 评论 -
链表---两个一元多项式相乘
// PolynMultiplyPolyn.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include "pch.h"#include<stdlib.h>#include<stdio.h>typedef struct polyn{ int expn; float coef; struct polyn * next;...原创 2019-03-14 15:27:47 · 1519 阅读 · 0 评论 -
栈---求解迷宫问题
问题:在迷宫中寻找一条路径算法分析:将迷宫数值化,使用二维数组来表示迷宫,墙单元用0,通道单元用1; 如果能够通过继续前进,如果不能通过则退回到上一个单元,因此用栈来存储通过的路径; 用0,1,2,3来分别表示4个方向代码:#include "pch.h"#include <iostream>#include<stdio.h>#include ...原创 2019-03-20 11:25:55 · 313 阅读 · 0 评论 -
队列——舞伴问题
问题描述:假设舞会上,男女排成一队进入舞厅时各自排成一队,开始跳舞时。依次从男队和女队的队头上各出一人配成舞伴,若两队初始人数不同,则较长的那一队中未配对者等待下一轮舞曲。编写一算法模拟配对问题。算法分析:根据记录创建男队和女队,男女队头依次出队直到有一个队为空,输出剩下的队的人数及队头人代码:头文件:#pragma once#include <stdio.h&g...原创 2019-03-20 19:18:03 · 1887 阅读 · 0 评论 -
串---删除字符串中的所有子串
问题:要求编写一个删除字符串"abcdeabdbcdaaabdecdf"中所有"abd"的程序。算法分析:创建两个字符串,使用gets();使用删除字符串的基本操作:DeleteString(SeqString *S, int pos, int len )首先找到要删除的起始字符位置,采用遍历的方式,如果第一个字符相同,则比较第二个,依次进行下去代码:顺序串头文件:“SeqStr...原创 2019-03-30 14:03:24 · 1604 阅读 · 0 评论 -
串---堆串的基本操作
顺序串为静态顺序存储表示,在串的插入,连接过程中如果长度超过了MaxSize就会截掉一部分。因此可以使用动态分配存储表示串头文件#pragma once#include<iostream>#include<stdio.h>#include<stdlib.h>typedef struct{ char *str; int length;} H...原创 2019-03-30 15:25:58 · 1419 阅读 · 0 评论 -
串---字符串模式匹配
问题:查找子串在主串中出现的位置算法:Brute-force:从主串中第pos个字符开始与模式串的第一个字符比较,如果相等则继续逐个比较后续字符;否则从主串的下一个字符开始比较,依次类推。KMP:在每一趟出现字符不相等时,不需要退回主串的指针,而是利用已经得到的前面部分匹配的结果,将模式串向右滑动若干个字符后继续与主串的当前字符进行比较。代码:1.顺序串基本操作的头文件:#pra...原创 2019-03-30 20:21:20 · 182 阅读 · 0 评论 -
数组---数组的基本操作
问题:利用数组的基本运算队数组进行初始化,然后输出数组的值涉及到数组的基本操作:初始化,赋值,定位,销毁等代码:头文件“SeqArray.h"#pragma once#define MaxArraySize 3#include<stdarg.h>#include <stdio.h>#include<stdlib.h>typedef st...原创 2019-03-31 15:18:21 · 342 阅读 · 0 评论 -
稀疏矩阵---三元组表示的矩阵相加减
问题:设有采用三元组顺序表存储的两个稀疏矩阵M和N,试着编写一个算法,实现M和N相乘:算法:1.头文件:”TriSeqMatrix.h”该文件夹中包含着三元稀疏矩阵的创建、初始化、转置、销毁等操作#pragma once#include <stdio.h>#include<stdlib.h>#define MaxSize 200typedef struc...原创 2019-04-01 20:22:28 · 4702 阅读 · 0 评论 -
设顺序表中的数据元素递增有序,试着写一算法,将x插入到顺序表上的适当位置上,以保持该表的有序性。
算法分析首先应该创建一个顺序表,从键盘输入数据;显示顺序表在插入之前先找到插入的位置;将插入位置后面的数据往后移动;完整的代码#include<stdio.h> 2 #include<stdlib.h> 3 4 #define LIST_INIT_SIZE 100 5 #define LISTINCREMENT 10 6 typedef s...原创 2019-01-20 22:53:58 · 27399 阅读 · 5 评论