数据结构
文章平均质量分 63
三金C_C
我一路向北,离开有bug的季节…
展开
-
数据结构实验九(排序算法)
数据结构主要排序的算法,主流算法,希望有所收获,并且此处也汇总了前面所有的数据结构实验!原创 2021-12-17 23:13:42 · 2247 阅读 · 1 评论 -
稀疏矩阵算法专项提高
稀疏矩阵的三元组表示法、十字链表示法解析,希望有所帮助!原创 2021-12-15 22:33:34 · 690 阅读 · 0 评论 -
二叉树的算法专项提高
二叉树的专项练习巩固,为你的数据结构添砖加瓦!原创 2021-12-12 20:03:23 · 1424 阅读 · 2 评论 -
数据结构实验八(平衡二叉树+Hash)
平衡二叉树的查找、折半查找的实现、Hash表的实现(除留余数法)原创 2021-12-08 21:15:07 · 659 阅读 · 0 评论 -
数据结构实验七(查找)
题目描述:为班级30个人的姓名设计一个哈希表,假设姓名用汉语拼音表示。要求用除留余数法构造哈希函数,用线性探测再散列法处理冲突,平均查找长度的上限为2。编写数据结构和算法来实现。并在此基础上通过适当修改,采用顺序查找和二分查找对姓名进行查找,计算两种方法的查找长度。本次有文档操作,故直接放本次文件百度网盘提取提取码:2t3x你的三连就是我创作的最大动力!解答:1.顺序查找算法的实现/*顺序查找法*/int SeqSearch(RecordList l,string cname){ l.原创 2021-12-04 14:45:29 · 3231 阅读 · 3 评论 -
最短路径详细解析(Dijkstra+Floyd)
最短路径是非常重要的算法,其中Floyd算法代码比较简单,但是时间复杂高;而Dijkstra算法比较快,然而比较复杂。下面则通过实例更加理解其中的算法。目录DijkstraFolydDijkstra因为Dijsktra比较复杂,这里给出一些解释。分别引入了dist[],path[],set[],解释在图下。本次算法以下图为例,其中上图已给出dist,path,set数组的正确值。话不多说,直接放代码。#include <iostream>#define INFINITY 6原创 2021-11-27 22:54:23 · 1555 阅读 · 1 评论 -
数据结构实验六(AOE关键路径详细版)
数据结构AOE关键路径,关于这个有些知识点需要涉及,一个是关于拓扑排序,一个是寻找关键路径。下面给出图例。此次代码每一步相应给出了解释,因为部分算法书上是错误的。关于拓扑排序就不用多说了,比较简单,下面给出一个AOE的关键路径求法。当然答主关于图的很多算法有很多,这里就不再一一列出,但注意的是,可以点击此处查看最小生成树的求法与代码。下面开始我们的数据结构题目题目描述:按照图的“邻接表”存储结构表示AOE网,实现求其关键路径的算法,并验证如下图1所示AOE网的关键路径。不过想说句题外话,西安电子原创 2021-11-22 20:52:27 · 3789 阅读 · 1 评论 -
最小生成树(Prim+Kruskal)
最小生成树算法,应用有哪些,其实很多,例如规划路线费用最小,就是其中的例子,下面以其中2个著名算法为代表编写。以下算法均以下图为例目录Prim普里姆算法Kruskal克鲁斯卡尔算法分析与比较Prim普里姆算法需要遍历顶点,时间复杂度O(n^2),n为顶点数。lowcost[]数组存放当前生成树到剩余各顶点最短边的权值。vset[i]指顶点i没有进入树执行过程:1.将v0到各边为候选边2.重复以下步骤n-1次,使n-1顶点进入生成树中从侯选边选出最小的边输出,并将与该边另一端的顶点v并入原创 2021-11-20 23:19:11 · 1070 阅读 · 0 评论 -
深搜广搜专训一
最近学了图的遍历,关于其中的算法详情请见此处关于深搜和广搜是非常重要的,对一些矩阵和图的遍历起到不错的作用。下面以一些题目来训练,其中每道题都尽量给出深搜和广搜的2种做法。习题目录Red and Black (hdu1312)Oil Deposits(poj 1241)Red and Black (hdu1312)题目描述1:输入由多个数据集组成。一个数据集以包含两个正整数W和h的行开始;W和H分别是x和y方向上的块数。W和H不超过20。 数据集中还有H行,每行包括W个字符。每个字符表示一个瓷砖的颜原创 2021-11-14 17:24:03 · 453 阅读 · 0 评论 -
数据结构实验五(图的遍历)
题目描述:分别用邻接矩阵和邻接表实现图的深度优先遍历和广度优先遍历。下面邻接矩阵和邻接表均以下图为例,其中已标注了正确的dfs,bfs顺序图和相关的表示法。几句话明白深度与广度搜索:深度优先就像你被困在了迷宫里面,想要出去必须一路走到底,直到走不通了才回溯,重点是回溯。而广度优先就像你丢了眼睛,看不清的时候满地寻找,辐射范围大。上次实验四哈夫曼树全部完整代码见此处邻接矩阵存储图MGraph.cpp#include <iostream>#include <queue>原创 2021-11-13 23:18:18 · 2048 阅读 · 1 评论 -
数据结构实验四(哈夫曼编码)
最近拖更了好久,在忙一些琐事,有时间继续加更!上次实验三二叉树递归与非递归版本已经全部公开,请点击此处。数据结构实验四要求题目描述:对任意输入的一段英文,为每个字符编制其相应的哈夫曼编码,并利用该编码为任意输入的0、1序列进行解码。操作提示:一个完整的系统应具有以下功能:(1)初始化:从终端读入一段英文字符,统计每个字符出现的频率,建立哈夫曼树,并将该树存入某文件;(2)编码: 利用建好的哈夫曼树对各字符进行编码,用列表的形式显示在屏幕上,并将编码结果存入另一文件中;(3)解码: 利用保存的哈原创 2021-11-10 18:56:22 · 2955 阅读 · 1 评论 -
算法设计工具——STL
C++中已经实现了数据结构中的很多容器和算法,它们构成了C++库的子集,即标准模板类库。STL是一个功能强大的基于模板的容器库。遵循“尽可能使用STL而不是自己实现”,下面整理STL的一些使用方法便于搜索。(之前已经整理了一些例如map)持续更新中ing,未完待续(只能抽时间来写)你的三连就是我创作的最大动力。目录STL概述STL迭代器顺序容器vectorstringSTL概述STL只要由容器,算法和迭代器。迭代器用于存放元素。下面给出常用的数据结构。算法主要由数据结构说明原创 2021-11-04 23:04:36 · 516 阅读 · 1 评论 -
数据结构实验三(二叉树)
完整递归程序私信后台递归算法头文件#pragma once#ifndef BITREERC_H#define BITREEC_H#include <iostream>#include <malloc.h>using namespace std;typedef struct Bitree { char data; struct Bitree* Lchild; struct Bitree* Rchild;}Bitree,*Bit;//创建二叉树void原创 2021-10-20 18:57:00 · 1185 阅读 · 0 评论 -
数据结构实验二
题目描述 商店货架以栈的方式摆放商品。生产日期越近的越靠近栈底,出货时从栈顶取货。一天营业结束,如果货架不满,则需上货。入货直接将商品摆放到货架上,则会使生产日期越近的商品越靠近栈顶。这样就需要倒货架,使生产日期越近的越靠近栈底。 分析:典型的栈使用,简单地分析一下,就是先按生产日期较小的进入栈A,然后等到输入完毕后,此时生产日期大的就是在栈顶,题目要求此要在栈底,很明显,对栈A进行出栈操作,进入栈B(存储数据),按照先进后出的原则,此时生产日期大的就在栈顶了,故题目基本完成。不过,想要让程序更好原创 2021-10-15 21:45:23 · 581 阅读 · 0 评论 -
数据结构实验一
题目描述: 将若干城市的信息,存入一个带头结点的单链表。结点中的城市信息包括:城市名,城市的位置坐标。要求能够利用城市名和位置坐标进行有关查找、插入、删除、更新等操作。并且实现1)给定一个城市名,返回其位置坐标;2)给定一个位置坐标P和一个距离D,返回所有与P的距离小于等于D的城市。 分析:比较基础的链表题目。主要分为以下几个步骤:初始化并创建列链表,输入有用信息,查找相关信息并输出。 本次实验采用C++面向对象特性进行编写,为方便同学理解,同时编写C语言代码,注意:本次完整代码在10月16号后原创 2021-10-09 16:15:37 · 789 阅读 · 2 评论 -
串运算C与C++
题目描述 写一个函数将顺序串s1中的第i个字符到第j个字符之间的字符用s2串替换思路分析: 类比插入,在插入函数中,要留出位置插入要插入的字符串,所以要保留原位置的数据,而对于替换,只需要插入,不用管原先的位置即可。 然而有很多情况,这里考虑情况较少,下面附C++与C代码不同语言编写,同时一个使用链串一个使用顺序串,以此巩固学习。 C++代码,建立LinkString Class,其中用到运算符重载,作用是赋字符串。#include <iostream>#define MA原创 2021-09-27 18:23:45 · 350 阅读 · 1 评论 -
括号匹配问题(栈)C++
题目描述 在一个表达式中含有圆括号或方括号等来表示运算的优先级,将这些括号提取出来就构成了括号序列 例如:表达式[(A+B)*C]-[E-F] 其括号序列为[()][]合法的括号序列称为匹配序列,不合法的括号序列称为不匹配序列。匹配序列示例:([()]) [] ()[()] ,不匹配序列示例:([()] ] (][()],那么如何判断一个括号序列是否为匹配序列呢?请用栈的结构来进行验证。分析抓住栈的特性:先进后出,后进先出。即一边遍历一边判断,将左类型括号如( [ {,进行入栈操作,当遇到右类型括原创 2021-09-21 10:32:09 · 1231 阅读 · 0 评论 -
关于循环链表的快慢指针C++
题目描述1、设计一个尽可能高效的算法,找到单链表的中间结点。2、设计算法,判断单链表是否有环。(提示:通过快慢指针判断)分析: 题目暗示使用快慢指针进行编译,什么叫快指针慢指针?顾名思义,就是快与慢的区别,不过根据问题一,可以假定快指向head->next->next,而慢指向head->next,这样当快指针指向NULL时,慢指针就到中间了。不过写的算法中有些小瑕疵,当长度为奇数时正确,当是偶数的时候我选择返回中间后面一个,而不是两个。 什么叫单链表有环,通俗来说,假定有原创 2021-09-15 17:54:27 · 286 阅读 · 1 评论 -
顺序表插入与插入排序
题目描述:设顺序表va中的数据元素递增有序。试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性。(习题来源于数据结构C语言版,严蔚敏,清华大学出版社,最后附该习题标答) 关键词:顺序表、递增有序(可以联想到步长的数学定义)下面附代码,以int数据为例,方法不唯一,总体思路都基本一致,先初始化并创建该顺序表,此算法本质就是插入算法,将x从最后(最大的开始)进行开始比较,当最先发现x大于某一个数时,此时x则停止比较,插入到该数的后面,将后面的数全部往后移一位,同时数组长度也将增加1。 通原创 2021-09-06 18:17:47 · 1013 阅读 · 0 评论 -
C++复数运算
C++复数运算探究题目说明 抽象数据类型(ADT)的定义与实现: 复数a+bi,a为实部,b为虚部,请用C或C++语言定义和实现复数抽象数据类型。 要求能够输入两个实数作为实部和虚部,用于初始化(创建)一个复数,对任意的两个复数,能够按照复数运算规则进行加、减、乘运算,定义求复数的模,求共轭复数的算法,并实现两个复数相除,并输出对应的计算结果。Author:Lee X;Operating environment:Microsoft Visual Studio 2019 对于此次的题目,首原创 2021-09-01 15:28:32 · 9403 阅读 · 5 评论 -
比较不同算法的时间复杂度
如何度量一个算法所需要的时间呢?一般来说,在不考虑计算机性能与环境的差异时,采用时间复杂度与空间复杂度来进行比较。时间复杂度与渐进复杂度执行时间的这一变化趋势可表示为输入规模的一个函数,记为时间复杂度,可记作T(n)。...原创 2021-07-28 17:03:01 · 563 阅读 · 0 评论