![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 59
《数据结构》代码笔记
April_Winter
这个作者很懒,什么都没留下…
展开
-
复习:图的实现
图的两种存储结构及实现方式一个图包括两个部分:顶点信息以及顶点之间边的信息。下面介绍两种常用的存储结构——邻接矩阵和邻接链表。一、邻接矩阵实现图一维数组vertex[maxsize]:存储图中的顶点二维数组edge[maxsize]:存储图中的边(顶点的邻接关系,邻接矩阵)①邻接矩阵的类定义const int MaxSize = 10;//定义图中最大的顶点数(要比实际的顶点数要大)template<typename DataType>class MGraph{ public原创 2021-11-15 23:20:12 · 187 阅读 · 0 评论 -
复习:最短路径
一、基本概念最短路径:在非网图中,最短路径是指两顶点之间经历的边数最少的路径;在网图中,最短路径是指两顶点之间经历的边上权值之和最少的路径。源点:路径上的第一个顶点。终点:路径上最后一个顶点。二、Dijkstra算法(值适用于简单路径,不适合回路)Dijkstra算法用于求单元点最短路径问题,给定有向网图G=(V,E)和源点v属于V,求v到G中其余各个顶点的最短路径。①基本思路:将顶点集合V分成两个集合,集合S存放源点v和已经确定最短路径的顶点,另一个集合V-S存放为确定最短路径的顶点。原创 2021-11-22 21:35:26 · 818 阅读 · 0 评论 -
复习:最小生成树
一、基础概念生成树:在连通图中,包含图中全部顶点的一个极小连通子图(n个顶点的生成树有且仅有n-1条边,因为n个顶点至少要有n-1条边才能够保证连通)。生成森林:在非连通图中,由每个连通分量都可以得到一棵生成树,这些生成树就组成了非连通图的生成森林。生成树的代价:无向连通网的生成树上各边的权值纸盒称为该生成树的代价。最小生成树:在图中所有生成树中,代价最小的生成树。MST性质:二、Prim算法(从顶点的角度出发)设G=(V,E)是无向连通网,T=(U,TE)是G的最小生成树。①基本思想:设原创 2021-11-22 18:05:44 · 430 阅读 · 0 评论 -
二叉树的相关操作
1、计算二叉树的叶子结点的个数template<typename DataType>int BiTree<DataType>::Count(BiNode *bt){ int count; if(bt == NULL) count = 0; else if(bt->lchild==NULL&&bt->rchild==NULL) count = 1; else count = Count(bt->lchild)+Count(b原创 2021-11-11 20:07:52 · 362 阅读 · 0 评论 -
二叉树的遍历
一、二叉树的递归遍历二叉链表存储二叉树,二叉链表的结点结构如下:template<typename DataType>struct BiNode{ DataType data; BiNode<DataType>*lchild,*rchild;}1、前序遍历递归算法template<typename DataType>void BiTree<DataType>::PreOrder(BiNode<DataType>*bt){原创 2021-11-05 13:28:36 · 90 阅读 · 0 评论 -
数据结构1014小测
1024小测数组 Q[n]用来表示一个循环队列,front 为队头元素的前一个位置,rear 为队尾元素的位置,计算队列中元素个数的公式为______ 。答案: (rear-front+n)%n解答: 循环队列中,rear-front 的结果可能是负整数,而对一个负整数求模,其结果在不同的编译器环境中可能会有所不同。二维数组 A 中行下标是 10~20,列下标是 5~10,按行优先存储,每个元素占 4 个存储单元,A[10][5]的存储地址是 1000,则元素 A[15][10]的存储地址原创 2021-10-29 23:14:19 · 1912 阅读 · 0 评论 -
栈队列的实现
两个栈实现队列操作利用两个栈去设计并实现一个自定义队列MyQueue。自定义队列MyQueue应当支持一般队列支持的所有操作(push , pop , peek, empty)。栈应当选择1中的顺序栈,自定义队列可自行考虑是否需要设置头尾指针。简单起见,只需考虑int数据类型的情况。实现MyQueue类:void push(int x)将元素x推到队列的末尾int pop() 移除并返回队列开头元素int peek() 返回队列开头元素int empty() 如果队列为空返回1否则返回0思原创 2021-10-29 21:56:16 · 93 阅读 · 0 评论 -
循环链表的拼接
两个循环链表拼接成一个链表两个循环链表testA和testB,first1和first2分别是指向循环链表的头指针,编写算法函数merge(Node *first1, Node *first2),其功能是将循环链表testB链接到循环链表testA之后,使链接后的链表仍是循环链表。输出的参考样张如下所示思路:建立两个指针p,q分别遍历到两个循环链表A、B的末尾,p指向B链表的第一个结点(注意是第一个结点,不是头结点),q指向A链表的头结点。代码如下:void merge(Node *first1,原创 2021-10-29 21:40:49 · 591 阅读 · 0 评论 -
树的前序遍历和后序遍历
非二叉树的前后序遍历采用按层次序来建立树的孩子兄弟表示法(一个指针指向第一个孩子,一个指针指向第一个右兄弟)存储结构,实现前序和后序遍历树的操作,并编写算法求树的深度。输出的参考样张如下所示。PS:①这个样例没有显示深度,此样例深度为4②样例输入采用层次序输入结点对的方式。思路:①首先要明确,此树并非是二叉树,一个结点可能有多个兄弟节点,因此不管是遍历还是深度的计算都要包括所有的兄弟节点。②前序遍历:根节点->前序遍历左子树->前序遍历右子树后序遍历:后序遍历左子树->后序原创 2021-10-29 21:01:00 · 1539 阅读 · 0 评论 -
KMP算法的应用——碱基序列匹配
;;原创 2021-10-29 20:31:17 · 2107 阅读 · 0 评论