- 博客(14)
- 收藏
- 关注
原创 二叉树的建立以及判断度为1的节点
内容:编写程序,实现下述功能,并上机调试通过。1.按中序顺序建立一课二叉树;2.用非递归的方式遍历二叉树(先序,中序或后序),输出遍历序列本题有两个要求,首先,要用中序顺序建立二叉树。但问题在于,只用中序输入无法创建一个确定的二叉树,因为对于一个已知的中序遍历结果,由于根节点不确定性,所以可能会对应多种不同结构的二叉树,例子如下:所以我们要想办法解决根节点不确定的问题,对此有两个方向的想法。一是:在编译过程规定好根节点的标识符,当输入该字符时,直接将该字符定义为根节点,在遍历..
2021-12-11 02:12:24
2836
原创 从键盘接收一串电文字符,输出对应的Huffman(哈夫曼)编码,同时,能翻译由Huffman编码生成的代码串,输出对应的电文字符串。
要求 1.构造一棵Huffman树; 2.实现Huffman编码,并用Huffman编码生成的代码串进行译码 3.程序中字符串和权值是可变的,实现程序的灵活性。算法分析在电报通信中,电文是以二进制代码传送的。在发送时,需要将电文中的字符转换成二进制代码串,即编码;在接收时,要将收到的二进制代码转化为对应的字符序列,即译码。由于字符集中的字符被使用的频率是非均匀的,在传送电文时,要想使电文的总长尽可能短。因此,若对某字符集进行不等长的编码设计,则要求任意一个字...
2021-12-10 00:45:02
4858
4
原创 采用邻接矩阵的形式存储图,进行图的深度优先搜索并输出结果。
算法分析本题分为两点:一,首先要用邻接矩阵的形式存储图。定义好图的邻接矩阵,定义一维数组vexs[]用来表示与顶点有关的信息,二维数组arcs[][]用来表示图中不同边的权值。由于广度优先遍历需要的循环队列,所以也要构建队列,以及相关的初始化,入队,判空,出队等配套的函数。然后要创建邻接矩阵,并对邻接矩阵中顶点个数,边的个数,不同边的权值进行初始化。完成邻接矩阵的存储。二,进行深度优先搜索然后遍历。深度优先遍历是个递归过程,所以这个算法可以用递归实现。首先,若访问过顶点,则该标识设置为1,并输出当
2021-12-10 00:39:59
1848
原创 编写程序用三元组表实现稀疏矩阵的案例转置操作。
算法分析程序中设计了三个函数:>函数 InitSPNode()用来建立一个稀疏矩阵的三元组表。首先输入行数、列数和非零元的值,输入(-1,-1,-1)结束输入。>函数showMatrix()用来输出稀疏矩阵算法中按矩阵a的列进行循环处理,对a的每一列扫描三元组,找出相应的元素,若找到,则交换其行号与列号,并存储到矩阵b的三元组中。>函数TransposeSMatrix()用来完成稀疏矩阵的转置算法。算法主要的工作是在p和col的两重循环中完成,时间复杂度为O(n
2021-12-09 01:23:01
906
原创 求一个字符串在另一个字符串中第一次出现的位置。要求:利用键盘输入两个字符串,一个设定为主串,另一个设定为子串,对这两个字符串应用 KMP 算法,求出子串在主串中第一次出现的位置。
算法分析程序中设计了两个函数:>函数 GetNext()用来求next值。求模式串t的next函数值并存放在数组next中。>函数IndexKmp()用来实现模式匹配算法。子串中的每个字符依次和主串中的一个连续的字符序列相等,则称为匹配成功,反之称为匹配不成功。程序中函数 GetNext()是求出模式串t的next函数值并存入数组next中,函数 IndexKmp()为模式匹配函数,是利用模式串的next函数求t在主串s中第 pos个字符之前的位置。当某个位置匹配不成功的
2021-12-09 01:17:45
718
原创 采用顺序结构存储串,设计实现求串S和串T的一个最长公共子串的算法。
算法分析先固定字符串str1,取其第一个字符str1[0],(KMP算法)查找str1和str2中有没有以该字符开头的公共子串:即将str[0]与str2中的字符挨个比较,若遇到相等的,再接着比较str1和str2中相等字符的下一个位置,(i++,j++)直至遇到下一对不相等的字符,即完成一个公共子串的搜寻.将该子串存入串中,之后再依次取出str1中的第2个、第3个…第n个字符,重复上述操作,当str1中的所有字符均取出和str2中的字符遍历比较后,此时所记录下来的公共子串即为所求的最长公共子串。
2021-12-08 23:51:55
879
原创 在8*8的国际象棋棋盘上,安放8个皇后,要求没有一个皇后能够“吃掉”其他一个皇后,即任意两个皇后都不能处于同一行,同一列或同一条对角线上这样的格局称为问题的一个解。(后面有n*n皇后)
步骤: 由于任意两个皇后不能同行,及每一行只能放置一个皇后,因此将第i个皇后放置在第i行中。这样在放置第i个皇后时,只要考虑他与前i-1个皇后处于不同列和不同对角线位置即可。程序中设计了3个函数:1.函数Check()用来判断皇后所放位置(row,column)是否可行2.函数Output()用来输出可行解,及输出棋盘3.函数EightQueen()采用递归算法实现在row行放置皇后算法分析:对于八皇后求解可采用回溯算法,从上之下依次在每一行放置皇后,进行搜索,若在某一行的任意一..
2021-12-08 02:12:48
2804
原创 将十进制有理数num转换为r进制数,其转换方法为辗转相除法,要求用链栈实现。
步骤:程序中设计了五个函数:1.函数InitStack()用于初始化一个顺序栈2.函数Empty()用于实现栈的判空操作3.函数Pop()用于实现元素的出栈操作4.函数Convert_integer()用于实现有理数整数部分数制转换算法5.函数Convert_decimal()用于实现有理数小数部分数制转换算法算法分析:对待转换的数先进行小数和整数部分的分离操作,分离操作的重点在于int和double间进行转换时会有精度损失,再对分离后的小数以及整数部分分别判断正负,通过if...e
2021-12-08 02:07:34
353
原创 将十进制数num转换为r进制数,其转换方法为辗转相除法,要求用链栈实现。
步骤:程序中设计了四个函数:1.函数Push()用于初始化一个顺序栈2.函数Empty()用于实现栈的判空操作3.函数Pop()用于实现元素的出栈操作4.函数Convert()用于实现数制转换算法算法分析:对待转换的数先判断正负,通过if...else...算法分别实现正数和负数的转化,转换的思想利用了算数运算中的取余和取整操作,借助栈先进后出的操作,进行辗转相除来实现。流程图如下:源码如下:/*author:雷桂艺time:2021年12月6日17:12ver.
2021-12-08 02:03:54
647
原创 假设以带头结点的循环列表表示队列,并且只设一个指针指向队尾元素节点(注意不设头指针)试编写相应的置空队,判空对,入队,出队等算法。
注意不设头指针)试编写相应的置空队,判空对,入队,出队等算法。步骤:1.通过InitQueue()函数来置空队2.通过EmptyQueue()函数来判空队3.通过EnQueue()来入队4.通过DeQueue()来出队算法分析 置空:已知队尾元素节点指针,所谓置空即为头结点指向队尾元素,但当该队列中含有其他元素时通过循环语句将所有元素释放掉,回收空间。 判空:由于该队列是由循环链表来进行表示的,所以当该队为空时,头结点的next就会指向自己。入队:利用尾插法,再插...
2021-12-08 01:17:48
5331
原创 回文是指正读反读均相同的字符序列;如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符序列是否是回文。
步骤:1.通过InitStack()函数来初始化栈2.通过Push()函数来压栈3.通过Pop()函数来弹栈4.通过StackEmpty()函数来进行栈的判空5.通过Panduan()函数来进行回文判定算法分析 回文的判定关键在于字符串是否是关于中心元素对称的,即将字符串逆序在与原字符串进行比较。由于栈具有先进后出的特点,所以栈是该问题的最佳解决方法,将字符串入栈,然后再进行弹出操作,与原字符串进行比较,相同即为回文。 考虑到待测字符串会有长短的不同,短字符串用上述...
2021-12-08 01:09:01
8143
1
原创 顺序表练习
内容:多项式相加:完成两个多项式的相加操作。要求使用链式存储结构实现多项式相减:完成两个多项式的相减操作。要求使用链式存储结构实现以单链表示集合,假设集合A用单链表LA表示,集合B用单链表LB表示,设计算法求两个集合的差,既A-B。算法分析:多项式相加:利用以下的四个函数具体完成两个多项式的相加操作:1.函数Init( )用来初始化一个空链表;2.函数CreateFromTail()用来创建一个链表;3.函数Polyadd()用来实现两个多项式相加算法;4.函数Print()
2021-12-07 01:24:15
197
原创 由一个线性链表表示的线性表中含有 3 类字符的数据元素(如:字母,数字和其他字符),试编写算法将该线性链表分割为 3 个循环链表,其中每个循环链表均只含有一类字符。
算法分析: 半封装一个单链表LA,引用Creat()函数利用尾插法来生成链表,先输入n值来确定单链表中数据元素的个数,然后通过键盘输入元素,创建3个空链表来存放三种不同字符类型,通过Match()中的ASCII码值来判断字符类型,通过Insert()插入之前的三个空链表中。最后将三个空链表通过Circular()完成循环链表。程序流程图:程序如下:/*author:雷桂艺 time:2021年12月6日9:45 version:1.0 description:...
2021-12-07 00:43:36
2016
原创 分别用顺序表和单链表作为存储结构,实现将线性表(a0,a1,…,an-1)就地逆置的操作
算法分析:对于顺序表和单链表的逆置操作,二者的要求是实现就地逆置,要利用原表的存储空间实现逆置而不能在创建一个表,将原表的数据元素插入到新的表中。顺序表的逆置操作:先封装一个最大空间为50的顺序表,然后将一个数组赋值给该顺序表,将该顺序表以中心对称的两侧元素(分别用m,n来表示)对调位置,直到m,n两变量相等时结束循环,输出新的逆置后的顺序表。单链表的逆置操作:先封装一个单链表,定义一个能利用头插法随机生成链表元素的函数CreatListHead()和一个链表的输出函数showlis..
2021-12-07 00:38:16
6297
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅