- 博客(12)
- 收藏
- 关注
原创 采用邻接矩阵的形式存储图,进行图的深度优先搜索并输出结果。
一,首先要用邻接矩阵的形式存储图。定义好图的邻接矩阵,定义一维数组vexs[]用来表示与顶点有关的信息,二维数组arcs[][]用来表示图中不同边的权值。由于广度优先遍历需要的循环队列,所以也要构建队列,以及相关的初始化,入队,判空,出队等配套的函数。然后要创建邻接矩阵,并对邻接矩阵中顶点个数,边的个数,不同边的权值进行初始化。完成邻接矩阵的存储。二,进行深度优先搜索然后遍历。深度优先遍历是个递归过程,所以这个算法可以用递归实现。首先,若访问过顶点,则该标识设置为1,并输出当前顶点。若某个顶点没有被访问
2021-11-28 22:46:02
1723
原创 若用二叉链表作为二叉树的存储表示,设计算法求二叉树中度为1的节点数量。
某一节点的度即为该节点所拥有的子树数量,本题前置条件为二叉树,所以某一节点的度最多为2,度为1的节点即只有左子树,或只有右子树。想要达到题目要求找只有一个子树的结点,所以需要遍历整个二叉树,才能找出符合要求的节点数目,需要通过一个计数器来记下度为1的结点的数量。详细步骤:第一,我们需要判断当前结点的左右孩子的情况,若其有左右孩子,则直接先以左孩子的结点为根节点,继续判断,以此类推,直到某一结点的左右孩子都为空或者只有一个孩子,返回。当其只有左孩子时,即根节点本身度为1,所以先将度为1的情况+1,再将
2021-11-21 20:39:39
4303
原创 关于中序创建二叉树
内容:编写程序,实现下述功能,并上机调试通过。按中序顺序建立一课二叉树; 用非递归的方式遍历二叉树(先序,中序或后序),输出遍历序列本题有两个要求,首先,要用中序顺序建立二叉树。但问题在于,只用中序输入无法创建一个确定的二叉树,因为对于一个已知的中序遍历结果,由于根节点不确定性,所以可能会对应多种不同结构的二叉树,例子如下:所以我们要想办法解决根节点不确定的问题,对此有两个方向的想法。一是:在编译过程规定好根节点的标识符,当输入该字符时,直接将该字符定义为根节点,在遍历结果中,该字符..
2021-11-14 21:47:03
7651
6
原创 采用顺序结构存储串,设计实现求串S和串T的一个最长公共子串的算法。
先固定字符串str1,取其第一个字符str1[0],(KMP算法)查找str1和str2中有没有以该字符开头的公共子串:即将str[0]与str2中的字符挨个比较,若遇到相等的,再接着比较str1和str2中相等字符的下一个位置,(i++,j++)直至遇到下一对不相等的字符,即完成一个公共子串的搜寻.将该子串存入串中,之后再依次取出str1中的第2个、第3个…第n个字符,重复上述操作,当str1中的所有字符均取出和str2中的字符遍历比较后,此时所记录下来的公共子串即为所求的最长公共子串。#inc
2021-10-31 20:21:34
1984
原创 KMP算法的实现
问题描述:求一个字符串在另一个字符串中第一次出现的位置。要求:利用键盘输入两个字符串,一个设定为主串,另一个设定为子串,对这两个字符串应用 KMP 算法,求出子串在主串中第一次出现的位置。算法分析:程序中设计了两个函数:>函数 GetNext()用来求next值。求模式串t的next函数值并存放在数组next中。>函数IndexKmp()用来实现模式匹配算法。子串中的每个字符依次和主串中的一个连续的字符序列相等,则称为匹配成功,反之称为匹配不成功。程序中函数 GetNex
2021-10-31 12:37:02
306
原创 用三元组表实现稀疏矩阵的基本操作
程序中设计了三个函数:>函数 InitSPNode()用来建立一个稀疏矩阵的三元组表。首先输入行数、列数和非零元的值,输入(-1,-1,-1)结束输入。>函数showMatrix()用来输出稀疏矩阵算法中按矩阵a的列进行循环处理,对a的每一列扫描三元组,找出相应的元素,若找到,则交换其行号与列号,并存储到矩阵b的三元组中。>函数TransposeSMatrix()用来完成稀疏矩阵的转置算法。算法主要的工作是在p和col的两重循环中完成,时间复杂度为O(n*t)。如果
2021-10-31 12:33:45
2006
原创 假设以带头结点的循环列表表示队列,并且只设一个指针指向队尾元素节点(注意不设头指针)试编写相应的置空队,判空对,入队,出队等算法。
//算法如下//先定义链队结构typedef struct queuenode{ //结点类型的定义 Datetype data; struct queuenode *next;} QueueNode;typedef struct{ //只设一个指向队尾元素的指针 queuenode *rear;}LinkQueue;//置空队void InitQueue(LinkQueue *Q){ //置空队:就是使头结点成为队尾元素 QueueNo.
2021-10-27 20:03:36
1654
2
原创 半字符入栈的回文判定
回文是指正读反读均相同的字符序列;如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符序列是否是回文。(提示:将一半字符入栈) 算法分析:回文的判定关键在于字符串是否是关于中心元素对称的,即将字符串逆序在与原字符串进行比较。由于栈具有先进后出的特点,所以栈是该问题的最佳解决方法,将字符串入栈,然后再进行弹出操作,与原字符串进行比较,相同即为回文。 考虑到待测字符串会有长短的不同,短字符串用上述方法即可,但长字符串会造成时间的...
2021-10-27 19:10:15
1754
原创 八皇后问题解决,以及n皇后问题的拓展
八皇后问题:在8*8的国际象棋棋盘上,安放8个皇后,要求没有一个皇后能够“吃掉”其他一个皇后,即任意两个皇后都不能处于同一行,同一列或同一条对角线上这样的格局称为问题的一个解,写一个程序求出所有解。 由于任意两个皇后不能同行,及每一行只能放置一个皇后,因此将第i个皇后放置在第i行中。这样在放置第i个皇后时,只要考虑他与前i-1个皇后处于不同列和不同对角线位置即可。 对于八皇后求解可采用回溯算法,从上之下依次在每一行放置皇后,进行搜索,若在某一行的任意一列放置皇后...
2021-10-26 21:06:35
538
原创 C语言整数进制转换,以及有理数进制转换的实现
在实现进制转换前,我们要先了解进制转换的算法原理,以十进制转二进制为例:所采用的方法是“除二取余,逆序输出”,所以要借助栈进行逆序输出。而对于含有小数的有理数来说,整数部分仍遵循“除二取余,逆序输出”的规则,但小数部分的进制转换的算法不同,为“乘二取整,正序输出”的规则,由于是正序输出,所以不用借助栈,通过简单的循环语句也可打印输出。 当对整数进行进制转换时,对待转换的数先判断正负,通过if...else...算法分别实现正数和负数的转化(全部转化为正整数),转换的思想利...
2021-10-24 09:53:43
1074
1
原创 已知由一个线性链表表示的线性表中含有 3 类字符的数据元素(如:字母,数字和其他字符),试编写算法将该线性链表分割为 3 个循环链表,其中每个循环链表均只含有一类字符。
已知由一个线性链表表示的线性表中含有 3 类字符的数据元素(如:字母,数字和其他字符),试编写算法将该线性链表分割为 3 个循环链表,其中每个循环链表均只含有一类字符。#include "stdafx.h"#include "stdlib.h"//封装单链表typedef struct node{ char data; struct node *next;}LNode,*PLinkList;//尾插法创建链表 PLinkList Create(){ PLinkList
2021-10-07 17:52:34
1441
原创 顺序表和单链表的就地逆置
本题分为两部分,一是顺序表的逆置操作,二是单链表的逆置操作,二者的要求是实现就地逆置,要利用原表的存储空间实现逆置而不能在创建一个表,将原表的数据元素插入到新的表中。 顺序表的逆置操作:先封装一个最大空间为100的顺序表,然后将一个数组赋值给该顺序表,将该顺序表以中心对称的两侧元素(分别用m,n来表示)对调位置,直到m,n两变量相等时结束循环,输出新的逆置后的顺序表。 单链表的逆置操作:先封装一个单链表,定义一个能利用头插法随机生成链表元素的函数CreatListH...
2021-10-07 15:45:53
1749
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人