数据结构
拾柒先生
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
第十五周 【项目1 - 验证算法】
用序列{57, 40, 38, 11, 13, 34, 48, 75, 6, 19, 9, 7}作为测试数据,运行并本周视频中所讲过的算法对应 程序,观察运行结果并深刻领会算法的思路和实现方法:(1)直接插入排序;(2)希尔排序;(3)冒泡排序;(4)快速排序;(5)直接选择排序;(6)堆排序;(7)归并排序;(8)基数排序。 (1)直接插入排序1.直接插入排序原创 2017-12-07 11:00:05 · 400 阅读 · 0 评论 -
第十一周 【项目3 - 图遍历算法实现】
1、深度优先遍历——DFS(程序中graph.h是图存储结构的“算法库”中的头文件,详情请单击链接…)#include #include #include "graph.h"int visited[MAXV];void DFS(ALGraph *G, int v){ ArcNode *p; int w; visited[v]=1; printf("%d原创 2017-11-09 10:24:59 · 260 阅读 · 0 评论 -
第十一周 【项目2 - 操作用邻接表存储的图】
【项目 - 操作用邻接表存储的图】 假设图G采用邻接表存储,分别设计实现以下要求的算法: (1)输出出图G中每个顶点的出度; (2)求出图G中出度最大的一个顶点,输出该顶点编号; (3)计算图G中出度为0的顶点数; (4)判断图G中是否存在边i,j>。 利用下图作为测试用图,输出结果。 提示:(1)分别设计函数实现算法;(2)不要全部实现完再测试,而是实现一个,测原创 2017-11-09 10:23:32 · 359 阅读 · 0 评论 -
第十一周 【项目1 - 图基本算法库】
图的存储结构主要包括邻接矩阵和邻接表,本算法库提供存储结构的定义,以及用于构造图存储结构、不同结构的转换及显示的代码。算法库采用程序的多文件组织形式,包括两个文件: 1.头文件:graph.h,包含定义图数据结构的代码、宏定义、要实现算法的函数的声明;#ifndef GRAPH_H_INCLUDED#define GRAPH_H_INCLUDED#define MAXV原创 2017-11-09 10:22:19 · 258 阅读 · 0 评论 -
第十三周 【项目1 - 验证算法】
1、认真阅读并验证折半查找算法。请用有序表{12,18,24,35,47,50,62,83,90,115,134}作为测试序列,分别对查找90、47、100进行测试折半查找#include #define MAXL 100typedef int KeyType;typedef char InfoType[10];typedef struct{ KeyType ke原创 2017-11-30 10:42:18 · 476 阅读 · 0 评论 -
第十三周 【项目3 - 是否二叉排序树?】
【项目 - 是否二叉排序树?】 设计一个算法,判断给定的二叉树是否是二叉排序树。[参考解答] int JudgeBST()是设计的算法对应的实现。#include #include #define MaxSize 100typedef int KeyType; //定义关键字类型typedef char InfoType;type原创 2017-11-30 10:44:56 · 189 阅读 · 0 评论 -
第十三周 【项目2 - 二叉树排序树中查找的路径】
【项目 - 二叉树排序树中查找的路径】 设计一个算法,输出在二叉排序中查找时查找某个关键字经过的路径。[参考解答] 专为本项目设计的算法体现在函数int SearchBST(…)和void SearchResult()中。#include #include #define MaxSize 100typedef int KeyType;原创 2017-11-30 10:43:46 · 214 阅读 · 0 评论 -
第十二周 Kruskal算法的验证
(图1) #include #include #include "graph.h"#define MaxSize 100typedef struct{ int u; //边的起始顶点 int v; //边的终止顶点 int w; //边的权值} Edge;void InsertSort(Edge E[],int n原创 2017-11-23 13:41:03 · 218 阅读 · 0 评论 -
第十二周 Prim算法的验证
#include #include #include "graph.h"void Prim(MGraph g,int v){ int lowcost[MAXV]; //顶点i是否在U中 int min; int closest[MAXV],i,j,k; for (i=0; i//给lowcost[]和closest[]置初值 {原创 2017-11-23 13:37:54 · 262 阅读 · 0 评论 -
第十二周 Dijkstra算法的验证
(图3) #include #include #include "graph.h"#define MaxSize 100void Ppath(int path[],int i,int v) //前向递归查找路径上的顶点{ int k; k=path[i]; if (k==v) return; //找到了起点则返回 Ppath(pa原创 2017-11-23 13:43:04 · 228 阅读 · 0 评论 -
第十二周 拓扑排序算法验证
[代码]#include #include #include "graph.h"void TopSort(ALGraph *G){ int i,j; int St[MAXV],top=-1; //栈St的指针为top ArcNode *p; for (i=0; in; i++) //入度置初值0原创 2017-11-30 10:11:23 · 336 阅读 · 0 评论 -
第十二周 Floyd算法验证
[Floyd算法实现] (程序中graph.h是图存储结构的“算法库”中的头文件,详情请单击链接…)#include #include #include "graph.h"#define MaxSize 100void Ppath(int path[][MAXV],int i,int j) //前向递归查找路径上的顶点{ int k; k=path[i][j];原创 2017-11-30 10:06:57 · 187 阅读 · 0 评论 -
第九周 【项目2 - 二叉树遍历的递归算法】
【二叉树遍历的递归算法】 实现二叉树的先序、中序、后序遍历的递归算法,并对用”A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”创建的二叉树进行测试。 [参考解答]#include stdio.h>#include "btree.h"void PreOrder(BTNode *b) //先序遍历的递归算法{ if (b!原创 2017-10-26 10:12:31 · 325 阅读 · 0 评论 -
第九周 【项目1 - 二叉树算法库】
二叉树的链式存储算法库采用程序的多文件组织形式,包括两个文件: 1.头文件:btree.h,包含定义二叉树的链式存储数据结构的代码、宏定义、要实现算法的函数的声明;#ifndef BTREE_H_INCLUDED#define BTREE_H_INCLUDED#define MaxSize 100typedef char ElemType;typedef struc原创 2017-10-26 10:08:47 · 225 阅读 · 0 评论 -
第八周(2) 项目3.2-稀疏矩阵的三元组表示的实现及应用
【项目 - 稀疏矩阵相加】 采用三元组存储稀疏矩阵,设计两个稀疏矩阵相加的运算算法 提示1:两个行数、列数相同的矩阵可以相加 提示2:充分利用已经建立好的算法库解决问题[参考解答1](程序中使用的头文件”tup.h”见稀疏矩阵的三元组表示算法库) #include #include "tup.h"bool MatAdd(TSMatrix a,TSMatrix b,T原创 2017-10-19 11:11:55 · 353 阅读 · 0 评论 -
第八周(2) 项目3.1-稀疏矩阵的三元组表示的实现及应用
稀疏矩阵的三元组表示相关的算法库采用程序的多文件组织形式,包括两个文件: 1.头文件:tup.h,包含定义稀疏矩阵的三元组表示数据结构的代码、宏定义、要实现算法的函数的声明;#ifndef TUP_H_INCLUDED#define TUP_H_INCLUDED#define M 6#define N 7#define MaxSize 100 //矩阵中非原创 2017-10-19 11:10:47 · 474 阅读 · 0 评论 -
第八周(2) 项目2.2 - 对称矩阵压缩存储的实现与应用
(2)设计算法,实现两个用压缩形式存储的对称矩阵A和B的加法和乘法。实现中请使用好前面设计的基本运算。 【项目 - 压缩存储的对称矩阵的运算】 设计算法,实现两个用压缩形式存储的对称矩阵A和B的加法和乘法。实现中请使用好前面设计的基本运算。[参考解答]#include #define N 4#define M 10int value(int a[],int原创 2017-10-19 11:08:20 · 244 阅读 · 0 评论 -
第十一周 【项目4(1) - 利用遍历思想求解图问题】
(程序中graph.h是图存储结构的“算法库”中的头文件,详情请单击链接…)1、是否有简单路径? 问题:假设图G采用邻接表存储,设计一个算法,判断顶点u到v是否有简单路径。#include #include #include "graph.h"int visited[MAXV]; //定义存放节点的访问标志的全局数组void ExistPath(ALGraph *G原创 2017-11-09 10:26:19 · 282 阅读 · 0 评论 -
第十一周 【项目4(2) - 利用遍历思想求解图问题】
(程序中graph.h是图存储结构的“算法库”中的头文件,详情请单击链接…)1、最短路径 问题:求不带权连通图G中从顶点u到顶点v的一条最短路径。#include #include #include "graph.h"typedef struct{ int data; //顶点编号 int parent;原创 2017-11-09 10:27:09 · 201 阅读 · 0 评论 -
第十五周 【项目4 - 英文单词的基数排序】
【项目 - 英文单词的基数排序】 设计一个基数排序的算法,将一组英文单词,按字典顺序排列。假设单词均由小写字母或空格构成,最长的单词有MaxLen个字母。[参考解答]#include #include #include #define MaxLen 9 //单词的最大长度#define Radix 27 //基原创 2017-12-07 11:02:46 · 263 阅读 · 0 评论 -
第十五周 【项目3 - 归并排序算法的改进】
【项目 - 归并排序算法的改进】 采用归并排序、快速排序等高效算法进行排序,当数据元素较少时(如n≤64),经常直接使用直接插入排序算法等高复杂度的算法。这样做,会带来一定的好处,例如归并排序减少分配、回收临时存储区域的频次,快速排序减少递归层次等。 试按上面的思路,重新实现归并排序算法。[参考解答]#include #include #include #incl原创 2017-12-07 11:02:03 · 202 阅读 · 0 评论 -
第十四周 【项目3 - B-树的基本操作】
【项目 - B-树的基本操作】 实现B-树的基本操作。基于序列{4, 9, 0, 1, 8, 6, 3, 5, 2, 7}完成测试。 (1)创建对应的3阶B-树b,用括号法输出b树。 (2)从b中分别删除关键字为8和1的节点,用括号法输出删除节点后的b树。 [参考解答]#include #include #define MAXM 10原创 2017-12-07 10:47:36 · 246 阅读 · 0 评论 -
第十四周 【项目2 - 用哈希法组织关键字】
【项目 - 用哈希法组织关键字】 已知一个关键字序列为if、while、for、case、do、break、else、struct、union、int、double、float、char、long、bool,共15个字符串,哈希函数H(key)为关键字的第一个字母在字母表中的序号,哈希表的表长为26。 (1)若处理冲突的方法采用线性探测法,请设计算法,输出每个关键字对应的H(key),输出原创 2017-12-07 10:46:04 · 182 阅读 · 0 评论 -
第十四周 【项目1 - 验证算法】
#include #define MaxSize 100 //定义最大哈希表长度#define NULLKEY -1 //定义空关键字值#define DELKEY -2 //定义被删关键字值typedef int KeyType; //关键字类型typedef char * InfoType; //其他数据类型原创 2017-12-07 10:43:58 · 204 阅读 · 0 评论 -
第十五周 【项目2 - 大数据集上排序算法性能的体验】
【项目 - 大数据集上排序算法性能的体验】 设计一个函数,产生一个至少5万条记录的数据集合。在同一数据集上,用直接插入排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序等算法进行排序,记录所需要的时间,经过对比,得到对复杂度不同的各种算法在运行时间方面的感性认识。提示1:这一项目需要整合多种排序算法,可以考虑先建设排序算法库,作为我们这门课算法库的收官之作; 提原创 2017-12-07 11:01:17 · 251 阅读 · 0 评论 -
数据结构年终总结
年华似水、岁月如梭、时光如水,时光飞逝,光阴似箭,光阴荏苒,日月如梭,转瞬即逝,斗转星移,流星赶月,日月如流,寒来暑往,时不我待,年深日久 ,似水流年,时日如飞,流星赶月,逝者如斯,白驹过隙,碎玉如梭,不知不觉中。。。我们已经跟随贺老学习了一个学期的数据结构课程,在这一个学期中,贺老教给我们的不仅是知识,更重要的是教给了我们学习的方法和技巧,从传统课堂到翻转课堂,从死板看书到课前视频,从书面作原创 2017-12-14 19:17:53 · 316 阅读 · 0 评论 -
第十一周 纸上谈兵:“知原理”检验题目
1、设图的邻接矩阵为,则该图为__。 A. 有向图 B. 无向图 C. 强连通图 D. 完全图 2、已知一个图,如图1所示,则从顶点a出发按深度优先遍历则可以得到的一种顶点序列为__。 A. a,b,e,c,d,f B. a,c,f,e,b,d C. a,e,b,c,f,d D. a,e,d,f,c,b (图1) 3、画出图1的邻接矩阵和邻接表存储的示意原创 2017-11-23 13:35:16 · 314 阅读 · 0 评论 -
第十一周 【项目5 - 迷宫问题之图深度优先遍历解法】
【项目 - 迷宫问题之图深度优先遍历解法】 设计一个程序,采用深度优先遍历算法的思路,解决迷宫问题。 (1)建立迷宫对应的图数据结构,并建立其邻接表表示。 (2)采用深度优先遍历的思路设计算法,输出从入口(1,1)点到出口(M,N)的所有迷宫路径。[模型建立] 将迷宫中的每一格作为一个顶点,相邻格子可以到达,则对应的顶点之间存在边相连。 例如,下面的原创 2017-11-23 11:24:14 · 428 阅读 · 0 评论 -
数据结构课程设计————内部排序性能分析
/************************************************************************************版权所有(C)2017,LiuTao。**文件名称:main.c*文件标识:无*内容摘要:该代码用于获取满足后缀要求的第一个文件*其它说明:无*当前版本:V1.0*作者:刘涛*完成日期:2017原创 2017-12-19 13:42:32 · 1680 阅读 · 1 评论 -
第七周 项目6 - 停车场模拟
设停车场是一个可停放n辆汽车的狭长死胡同,南边封口,汽车只能从北边进出(这样的停车场世间少有)。汽车在停车场内按车辆到达时间的先后顺序,最先到达的第一辆车停放在车场的最南端,依次向北排开。若车场内已停满n辆汽车,则后来的汽车只能在门外的候车场上等候,一旦有车开走,则排在候车场上的第一辆车即可开入。当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路(假定停车场内设有供车辆进出的便道,原创 2017-10-12 11:00:40 · 354 阅读 · 0 评论 -
第八周(2) 项目2.1 - 对称矩阵压缩存储的实现与应用
本文针对数据结构基础系列网络课程(5):数组与广义表中第2课时特殊矩阵的压缩存储。问题:用压缩形式存储对称矩阵,实现下面的操作并测试 void Init(int *&b);//为N阶对称矩阵初始化存储数据的一维数组bint Value(int b[], int i, int j);//返回存储在b[M]中,对应二维数组A[i][j]的值void Assign(int b[]原创 2017-10-19 11:05:56 · 229 阅读 · 0 评论 -
第十周 项目1 - 二叉树遍历非递归算法
【二叉树遍历的非递归算法】 实现二叉树的先序、中序、后序遍历的非递归算法,并对用”A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”创建的二叉树进行测试。 请利用二叉树算法库。[参考解答](btreee.h见算法库)#include #include "btree.h"void PreOrder1(BTNode *b){ BTNode原创 2017-11-09 10:01:10 · 283 阅读 · 0 评论 -
第七周 项目2 - 建立链队算法库
链队算法库采用程序的多文件组织形式,包括两个文件: 1.头文件:liqueue.h,包含定义链队数据结构的代码、宏定义、要实现算法的函数的声明;#ifndef LIQUEUE_H_INCLUDED#define LIQUEUE_H_INCLUDEDtypedef char ElemType;typedef struct qnode{ ElemType dat原创 2017-10-12 10:33:21 · 290 阅读 · 0 评论 -
第七周 项目1 - 建立顺序环形队列算法库
下图是数据存储结构设计及各种操作实现的要点: 顺序环形队列算法库采用程序的多文件组织形式,包括两个文件: 1.头文件:sqqueue.h,包含定义顺序环形队列数据结构的代码、宏定义、要实现算法的函数的声明:#ifndef SQQUEUE_H_INCLUDED#define SQQUEUE_H_INCLUDED#define MaxSize 5typed原创 2017-10-12 10:10:32 · 469 阅读 · 0 评论 -
第四周 项目3 - 单链表应用
项目 - 单链表算法】(程序中利用了已经实现的单链表算法,头文件LinkList.h及其中函数的实现见单链表算法库) 1、设计一个算法,将一个带头结点的数据域依次为a1,a2,…,an(n≥3)的单链表的所有结点逆置,即第一个结点的数据域变为an,…,最后一个结点的数据域为a1。实现这个算法,并完成测试。 [参考解答] (程序中利用了已经实现的单链表算法,头文件LinkLis原创 2017-09-21 10:47:22 · 326 阅读 · 0 评论 -
第四周 项目2 - 建设“单链表”算法库
按照“0207将算法变程序”部分建议的方法,建设自己的专业基础设施算法库。这一周,建的是单链表的算法库。 算法库包括两个文件: 头文件:linklist.h,包含定义顺序表数据结构的代码、宏定义、要实现算法的函数的声明; 源文件:linklist.cpp,包含实现各种算法的函数的定义 请采用程序的多文件组织形式,建立如上的两个文件,另外再建立一个源文件原创 2017-09-21 10:36:15 · 283 阅读 · 0 评论 -
第三周 项目3 求集合并集
假设有两个集合 A 和 B 分别用两个线性表 LA 和 LB 表示,即线性表中的数据元素即为集合中的成员。设计算法,用函数unionList(List LA, List LB, List &LC )函数实现该算法,求一个新的集合C=A∪B,即将两个集合的并集放在线性表LC中。提示: (1)除了实现unnionList函数外,还需要在main函数中设计代码,调用unionList进行原创 2017-09-20 10:53:51 · 393 阅读 · 0 评论 -
第八周(2) 项目1 - 猴子选大王(数组版)
一群猴子,编号是1,2,3 …m,这群猴子(m个)按照1-m的顺序围坐一圈。从第1只开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,最后一只出圈的猴子为大王。输入m和n,输出猴子离开圈子的顺序,从中也可以看出最后为大王是几号猴子。 要求采用数组作为存储结构完成。[参考解答1] 在一个数组中,数组中用1表示猴子在圈中,用0表示猴子已经出圈,数组下标对应与猴子编号对应原创 2017-10-19 11:04:51 · 315 阅读 · 0 评论 -
第五周 项目2 - 建立链栈算法库
链栈算法库采用程序的多文件组织形式,包括两个文件: 1.头文件:listack.h,包含定义链栈数据结构的代码、宏定义、要实现算法的函数的声明; #ifndef LISTACK_H_INCLUDED#define LISTACK_H_INCLUDEDtypedef char ElemType;typedef struct linknode{ ElemType d原创 2017-09-27 10:53:51 · 309 阅读 · 0 评论 -
第八周(1) 项目5 - 计数的模式匹配
【项目 - 计数的模式匹配】 采用顺序结构存储串,编写一个算法计算指定子串在一个字符串中出现的次数,如果该子串不出现则为0。提示:无论BF模式匹配算法,还是KMP算法,都是在找到子串substr后就退出了。解决这个问题,要查找完整个字符串,并将出现的次数记下来。改造这两个算法吧。 改造BF算法完成求解。#include #include "sqString.原创 2017-10-19 10:48:16 · 258 阅读 · 0 评论
分享