
数据结构
基于数据结构第二版(严蔚敏 李冬梅 吴伟民 等著)的课后习题和oj题目编撰
Yvonnae
素履之往 一苇以航
展开
-
图的最小生成树 Prim&Kruskal
Prim算法struct//辅助数组的定义,用来记录从顶点集U到V-U的权值最小的边 { char adjvex;//最小的边在U中的那个顶点 int lowcost;//最小的边上的权值 }closedge[MVNum];int Min(AMGraph G)//普里姆算法中的Min { int i,//次数 a,//用于记录最小值的位置 min = MaxInt;//先使min设为最大值 for(i=0;i<G.vexnum;i++) { if(clo.原创 2022-01-27 11:35:44 · 258 阅读 · 0 评论 -
有向图的最短路径 弗洛伊德和迪杰斯特拉算法
均基于图的邻接矩阵表示一、迪杰斯特拉算法void ShortestPath_DIJ(AMGraph G,int v0)//用Dijkstra算法求有向图G的v0到其余顶点的最短路径 { int i,n,v,min,w;//下面所用到的所有变量 n = G.vexnum;//顶点个数 bool S[n];//辅助数组S[]的定义 int D[n],Path[n];//辅助数组D[]和Path[]的定义 for(v=0;v<n;v++)//辅助数组的初始化 { S.原创 2022-01-27 11:29:12 · 399 阅读 · 0 评论 -
基于链表的简单选择排序
描述试以单链表为存储结构,实现简单选择排序算法。输入多组数据,每组数据两行。第一行为序列的长度n,第二行为序列的n个元素(元素之间用空格分隔,元素都为正整数)。当n等于0时,输入结束。输出每组数据输出一行,为从小到大排序后的序列。每两个元素之间用空格隔开。输入样例 154 5 3 2 961 3 5 7 9 20输出样例 12 3 4 5 91 2 3 5 7 9#include<iostream>using namespace s原创 2022-01-27 10:24:47 · 3649 阅读 · 2 评论 -
二维数组中的元素查重
描述设二维数组a[1..m, 1..n] 含有m*n 个整数。写一个算法判断a中所有元素是否互不相同。输入多组数据,每组数据有m+1行,第一行为二维数组的行数m和列数n,之后m行为输入的二维数组。当n=0且m=0时输入结束。输出对于每组数据分别输出一行,若二维数组中存在相等元素则输出“YES”,否则输出“NO”。输入样例 14 31 2 34 5 67 8 910 11 123 41 2 3 45 6 7 81 9 10 110 0输出样例 1N.原创 2022-01-27 10:22:19 · 2493 阅读 · 0 评论 -
字符串的插入
描述编写算法,实现下面函数的功能。函数void insert(char*s,char*t,int pos)将字符串t插入到字符串s中,插入位置为pos(插在第pos个字符前)。假设分配给字符串s的空间足够让字符串t插入。(说明:不得使用任何库函数)输入多组数据,每组数据有三行,第一行为插入的位置pos,第二行为要被插入的字符串s,第三行为待插入的字符串t。当pos为“0”时输入结束。输出对于每组数据输出一行,为t插入s后的字符串。输入样例 11abcdeabc2acd.原创 2022-01-27 10:20:38 · 6439 阅读 · 0 评论 -
递归实现字符串的逆序存储
描述写一个递归算法来实现字符串的逆序存储,要求空间复杂度为O(1)。输入多组数据,每组数据有一行,为要求逆序存储的字符串。当输入字符串为“0”时,输入结束。输出对于每组数据输出一行,为逆序存储后的字符串。输入样例 1ABCDE123450输出样例 1EDCBA54321#include<iostream>#include<string.h>#include<string>using namespace st.原创 2022-01-27 10:18:33 · 747 阅读 · 0 评论 -
统计字符出现的频度
描述写一个算法统计在输入字符串中各个不同字符出现的频度并将结果输出(字符串中的合法字符为A-Z之间的26个字母和0-9之间的10个数字)。输入多组数据,每组数据有一行,为待统计字符频度的字符串。当字符串为“0”时,输入结束。输出对于每组数据输出n行,每一行为一个字符出现的频度(只输出存在的字符,格式为:字符:频度),字符排列顺序按照ASCII码从小到大的顺序。输入样例 1LITTLE5ILOVEYOUAREYOUOKNUMB900770输出样例 15:1E:2.原创 2022-01-27 10:17:06 · 2977 阅读 · 0 评论 -
病毒感染监测问题
描述医学研究者最近发现了某些新病毒,通过对这些病毒的分析,得知它们的DNA序列都是环状的。现在研究者收集了大量的病毒DNA和人的DNA数据,想快速检测出这些人是否感染了相应的病毒。为方便研究,研究者将人的DNA和病毒的DNA均表示成由一些小写字母组成的字符串,然后检测某种病毒的DNA序列是否在患者的DNA序列中出现过,如果出现过,则此人感染了病毒,否则没有感染。注意:人的DNA序列是线性的,而病毒的DNA序列是环状的。输入多组数据,每组数据有一行,为序列A和B,A对应病毒的DNA序列,B对应人的原创 2022-01-27 10:14:34 · 1393 阅读 · 0 评论 -
Ackermann函数的求值 递归/非递归
Ackermann函数的递归求值描述已知Ackermann函数定义, 写出计算Ack(m,n)的递归算法。输入多组数据,每组数据有一行,为两个整数m和n。当m和n都等于0时,输入结束。输出每组数据输出一行,为Ack(m,n)。输入样例 13 53 100 0输出样例 12538189#include<iostream>using namespace std; int Ack(int m,int n){ if(m==0) r原创 2022-01-26 13:34:12 · 2237 阅读 · 0 评论 -
基于两端操作的循环队列的实现
描述如果允许在循环队列的两端都可以进行插入和删除操作。构造一个循环队列,实现从队头入队,从队尾出队并输出。约定从队头入队时向下标小的方向发展,从队尾入队时则向下标大的方向发展。输入多组数据,每组数据有两行。第一行为一个整数n,n表示入队序列A的长度(n个数依次连续入队,中间没有出队的情况),第二行为序列A(空格分隔的n个整数)。当n等于0时,输入结束。输出对应每组数据输出一行。依次输出队列中所有的整数,每两个整数之间用空格分隔。输入样例 151 2 3 4 521 4.原创 2022-01-26 13:30:41 · 1263 阅读 · 0 评论 -
附加判定标志的循环队列的基本操作
描述假设以数组Q[m]存放循环队列中的元素,同时设置一个标志tag,以tag==0和tag ==1来区别在队头指针(front)和队尾指针(rear)相等时,队列状态为“空”还是“满”。试编写与此结构相应的插入(enqueue)和删除(dlqueue)算法。输入多组数据,每组数据有两行。第一行为一个整数n,n表示入队序列A的长度(n个数依次连续入队,中间没有出队的情况),第二行为序列A(空格分隔的n个整数)。当n=0时,输入结束。输出对应每组数据输出一行。依次输出队列中所有的整数,...原创 2022-01-26 13:28:34 · 3842 阅读 · 0 评论 -
基于循环链表的队列的基本操作
描述用带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(不设头指针)。实现该队列的入队出队以及判断队列是否为空操作。输入多组数据,每组数据有两行。第一行为两个整数n和m,n表示入队序列A的长度(n个数依次连续入队,中间没有出队的情况),m表示出队序列B的元素数量(m个数依次连续出队,中间没有入队的情况)。第二行为序列A(空格分隔的n个整数)。当n和m都等于0时,输入结束。输出对应每组数据输出一行。每行包括m+1个整数,前m个数代表出队序列B的各个整数,最后一个整数表示队列是否原创 2022-01-26 13:24:07 · 1830 阅读 · 0 评论 -
基于栈的可操作判断
描述假设I和O分别代表入栈和出栈操作。栈的始态和终态均为空。入栈和出栈的操作序列可以表示为仅由I和O组成的序列,称可操作的序列为合法序列,否则称为非法序列。请设计一个算法,判断所给的操作序列是否合法。若合法输出“true”,反之输出“false”。输入多组数据,每组数据为一行长度不定的操作序列A。当A为“0”时,输入结束。输出对应每组数据输出一行。若序列A为合法序列输出“TRUE”,反之输出“FALSE”。输入样例 1IOIOIOIIOOOO0输出样例 1TRUE原创 2022-01-26 13:22:31 · 993 阅读 · 1 评论 -
基于栈的后缀算术表达式求值
描述从键盘上输入一个后缀表达式,试编写算法计算表达式的值。规定:后缀表达式的长度不超过一行,以“=”作为输入结束,操作数之间用空格分隔,操作符只可能有+、−、*、/四种运算。输入多组数据,每组数据一行,对应一个后缀算术表达式,每个表达式均以“=”结尾。当表达式只有一个“=”时,输入结束。输出对于每组数据输出一行,为表达式的运算结果。输入样例 11 2+8 2-7 4-/*=1 2+=1 2/==输出样例 16.003.000.50...原创 2022-01-26 13:19:24 · 2152 阅读 · 0 评论 -
入栈和出栈的基本操作
描述输入一个整数序列a1,a2,a3...,an。当ai不等于-1时将ai进栈;当ai=-1时,输出栈顶元素并将其出栈。输入多组数据,每组数据有两行,第一行为序列的长度n,第二行为n个整数,整数之间用空格分隔。当n=0时输入结束。输出对于每一组数据输出若干行。每行为相应的出栈元素。当出栈异常时,输出“POP ERROR”并结束本组数据的输出。输入样例 151 2 -1 -1 151 -1 -1 2 20输出样例 1211POP ERROR#i原创 2022-01-26 13:17:41 · 3079 阅读 · 1 评论 -
基于栈的回文字符序列判断
描述回文序列是正反读均相同的字符序列,如“abba”和“abdba”均是回文,但是“good”不是回文。请设计一个算法判定给定的字符序列是否为回文。输入多组数据,每组数据有一行。每一行为一个长度不定的字符序列A。当A为“0”时,输入结束。输出对于每组数据输出一行。若字符序列A是回文序列,则输出“YES”,否则输出“NO”。输入样例 1abbaabdbagood0输出样例 1YESYESNO#include<iostream>usi.原创 2022-01-26 13:15:03 · 1592 阅读 · 0 评论 -
双栈的基本操作
描述将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别处于数组的两端。当第0号栈的栈顶指针top[0]等于-1时该栈为空;当第1号栈的栈顶指针top[1]等于m时,该栈为空。两个栈均从两端向中间增长(见下图)。试编写双栈初始化,判断栈空、栈满、进栈和出栈算法的函数。函数调用次序依次为:进栈、栈满的判断、出栈、栈空的判断。双栈数据结构的定义如下:typedef struct{ int top[2], bot[2]; //栈顶和栈...原创 2022-01-26 13:13:03 · 2575 阅读 · 1 评论 -
基于栈的中缀算术表达式求值
描述输入一个中缀算术表达式,求解表达式的值。运算符包括+、-、*、/、(、)、=,参加运算的数为double类型且为正数。(要求:直接针对中缀算术表达式进行计算,不能转换为后缀或前缀表达式再进行计算,只考虑二元运算即可。)输入多组数据,每组数据一行,对应一个算术表达式,每个表达式均以“=”结尾。当表达式只有一个“=”时,输入结束。参加运算的数为double类型。输出#include <iostream>#include <stdlib.h>#i..原创 2022-01-26 13:10:07 · 3103 阅读 · 1 评论 -
基于二叉链表的二叉树最长路径的求解
描述设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写算法求出该二叉树中第一条最长的路径。输入多组数据。每组数据一行,为二叉树的先序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。输出每组数据输出一行,第一行为二叉树的最长路径长度,第二行为此路径上从根到叶结点的各结点的值。输入样例 1abcd00e00f00ig00h00abd00e00cf00g000输出样例 14abcd3a...原创 2022-01-25 14:05:44 · 3019 阅读 · 1 评论 -
基于二叉链表的二叉树高度的计算
描述设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度。输入多组数据。每组数据一行,为二叉树的前序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。输出每组数据分别输出一行,为二叉树的高度。输入样例 1abcd00e00f00ig00h00abd00e00cf00g000输出样例 143//基于二叉链表的二叉树高度的计算 #include&...原创 2022-01-25 14:08:16 · 1484 阅读 · 0 评论 -
基于二叉链表的二叉树结点个数的统计
描述设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法分别对二叉树的结点(度为0、1、2)个数进行统计。输入多组数据。每组数据一行,为二叉树的前序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。输出每组数据输出一行,每行三个数分别为二叉树的度为0、1、2的结点个数。每两个数用空格分隔。输入样例 1abcd00e00f00ig00h00abd00e00cf00g000输...原创 2022-01-25 14:04:22 · 3341 阅读 · 0 评论 -
基于二叉链表的二叉树最大宽度的计算
描述设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写算法计算该二叉树的最大宽度(二叉树的最大宽度是指二叉树所有层中结点个数的最大值)。输入多组数据。每组数据一行,为二叉树的先序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。输出每组数据输出一行。为二叉树的最大宽度。输入样例 1abcd00e00f00ig00h00abd00e00cf00g000输出样例 144/...原创 2022-01-25 14:07:02 · 3175 阅读 · 0 评论 -
基于二叉链表的二叉树的双序遍历
描述设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法实现该二叉树的双序遍历(双序遍历是指对于二叉树的每一个结点来说,先访问这个结点,再按双序遍历它的左子树,然后再一次访问这个结点,接下来按双序遍历它的右子树)。输入多组数据。每组数据一行,为二叉树的先序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。输出每组数据输出一行,为双序遍历法得到的二叉树序列。输入样例 1ab000ab00c0...原创 2022-01-25 14:06:04 · 2664 阅读 · 1 评论 -
基于二叉链表的二叉树左右子结点的交换
描述设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法交换该二叉树的左右孩子。输入多组数据。每组数据一行,为二叉树的先序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。输出每组数据输出一行。为交换左右孩子后的二叉树的先序序列。输入样例 1abcd00e00f00ig00h00abd00e00cf00g000输出样例 1aihgbfcedacgfbed//基于二叉链...原创 2022-01-25 14:05:06 · 1677 阅读 · 0 评论 -
基于二叉链表的树结构相等的判断
描述设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,按此方法创建两棵二叉树,然后编写递归算法判断这两棵树是否相等。输入多组数据,每组数据有两行。每行为一个二叉树的先序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。输出每组数据输出一行。若两个二叉树相等输出“YES”,否则输出“NO”。输入样例 1abcd00e00f00ig00h00abcd00e00f00ig00h00abd00e00cf00g00ab...原创 2022-01-25 14:05:20 · 1839 阅读 · 0 评论 -
基于哈夫曼树的数据压缩算法
描述输入一串字符串,根据给定的字符串中字符出现的频率建立相应哈夫曼树,构造哈夫曼编码表,在此基础上可以对待压缩文件进行压缩(即编码),同时可以对压缩后的二进制编码文件进行解压(即译码)。输入多组数据,每组数据一行,为一个字符串(只考虑26个小写字母即可)。当输入字符串为“0”时,输入结束。输出每组数据输出2n+3行(n为输入串中字符类别的个数)。第一行为统计出来的字符出现频率(只输出存在的字符,格式为:字符:频度),每两组字符之间用一个空格分隔,字符按照ASCII码从小到大的顺..原创 2022-01-25 14:04:51 · 8399 阅读 · 3 评论 -
基于邻接矩阵的边的删除
描述给定一个无向图,在此无向图中增加一条边。输入多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。顶点编号为1到n。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有两个数字f和g,代表删除的边所依附的两个顶点。当n和m都等于0时,输入结束。输出每组数据输出n行。为删除边后的邻接矩阵。每两个数字之间用空格隔开。输入样例 13 21 22 33 23 11 21 20 0输出样例 10 1 2 31 0 .原创 2022-01-25 14:09:04 · 1238 阅读 · 0 评论 -
基于邻接矩阵的新边的增加
描述给定一个无向图,在此无向图中增加一条边。输入多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。顶点编号为1到n。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有两个数字f和g,代表增加的边所依附的两个顶点。当n和m都等于0时,输入结束。输出每组数据输出n行。为增加边后的邻接矩阵。每两个数字之间用空格隔开。输入样例 13 21 22 33 13 11 21 30 0输出样例 10 1 2 31 0 1.原创 2022-01-24 13:08:26 · 1348 阅读 · 0 评论 -
基于邻接矩阵的顶点的删除
描述给定一个无向图,在此无向图中删除一个顶点。输入多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。顶点编号为1到n。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有一个数字f,代表删除的顶点编号。当n和m都等于0时,输入结束。输出每组数据输出n-1行。为删除顶点后的邻接矩阵。每两个数字之间用空格隔开。输入样例 13 21 22 312 11 220 0输出样例 10 2 32 0 13 1 00.原创 2022-01-24 13:06:19 · 1548 阅读 · 0 评论 -
基于邻接矩阵的新顶点的增加
描述给定一个无向图,在此无向图中增加一个新顶点。输入多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。顶点编号为1到n。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有一个数字f,代表新插入的顶点编号。当n和m都等于0时,输入结束。输出每组数据输出n+1行。为增加顶点后的邻接矩阵。每两个数字之间用空格隔开。输入样例 13 21 22 342 11 240 0输出样例 10 1 2 3 41 0 1 0.原创 2022-01-24 13:02:35 · 1503 阅读 · 0 评论 -
平衡二叉树的高度的计算
描述假设一棵平衡二叉树的每个结点都标明了平衡因子b,设计一个算法,求平衡二叉树的高度。输入多组数据,每组数据一行,为平衡二叉树的先序序列。输入的数字为该节点的平衡因子。当序列为“#”时,输入结束。输出每组数据输出一行,为平衡二叉树的高度。输入样例 1110###0##1110###0##10####输出样例 134//平衡二叉树高度的计算 #include<iostream>using namespace std;typedef s原创 2022-01-24 13:00:03 · 3258 阅读 · 0 评论 -
二叉排序树的判定
描述假设二叉树每个结点的元素均为一个单字符,根据给定的字符序列按照先序遍历的顺序递归创建该树的二叉链表,然后判断该二叉树是否为二叉排序树。输入多组数据,每组数据有一行。每行为一个二叉树对应的前序序列(其中‘#’表示空树)。当序列为“#”时,输入结束。输出每组数据输出1行,若此二叉树为二叉排序树则输出“YES”,否则输出“NO”。输入样例 1ba##c##ca##b###输出样例 1YESNO#include<iostream>#def.原创 2022-01-24 12:58:04 · 2491 阅读 · 0 评论 -
基于邻接表的深度优先遍历
描述一个连通图采用邻接表作为存储结构。设计一个算法,实现从顶点v出发的深度优先遍历的非递归过程。输入多组数据,每组m+2数据行。第一行有两个数字n和m,代表有n个顶点和m条边。顶点编号为1到n。第二行到第m+1行每行有两个整数h和k,代表边依附的两个顶点。第m+2行有一个整数d,代表从d开始遍历。当n和m都等于0时,输入结束。输出每组数据输出一行,为深度优先搜索的遍历结果。每两个数字之间用空格隔开。输入样例 13 21 21 312 11 220 0..原创 2022-01-24 12:55:05 · 4176 阅读 · 1 评论 -
基于邻接表的新边的增加
描述给定一个无向图,在此无向图中增加一条边。输入多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。顶点编号为1到n。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有两个数字f和g,代表增加的边所依附的两个顶点。当n和m都等于0时,输入结束。输出每组数据输出n行。为增加边后的邻接表。每两个数字之间用空格隔开。输入样例 13 21 22 33 13 11 21 30 0输出样例 11 3 22 3 ..原创 2022-01-24 12:53:00 · 1717 阅读 · 0 评论 -
基于邻接表的顶点的删除
描述给定一个无向图,在此无向图中删除一个顶点。输入多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。顶点编号为1到n。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有一个数字f,代表删除的顶点编号。当n和m都等于0时,输入结束。输出每组数据输出n-1行。为删除顶点后的邻接表。每两个数字之间用空格隔开。输入样例 13 21 22 312 11 220 0输出样例 12 33 21#inclu.原创 2022-01-24 12:50:58 · 3149 阅读 · 0 评论 -
基于邻接表的新顶点的增加
描述给定一个无向图,在此无向图中增加一个新顶点。输入多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。顶点编号为1到n。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有一个数字f,代表新插入的顶点编号。当n和m都等于0时,输入结束输出每组数据输出n+1行。为增加顶点后的邻接表。每两个数字之间用空格隔开。输入样例 13 21 22 342 11 240 0输出样例 11 22 3 13 241 2.原创 2022-01-24 12:46:59 · 2897 阅读 · 1 评论 -
基于Dijsktra算法的最短路径求解
描述一张地图包括n个城市,假设城市间有m条路径(有向图),每条路径的长度已知。给定地图的一个起点城市和终点城市,利用Dijsktra算法求出起点到终点之间的最短路径。输入多组数据,每组数据有m+3行。第一行为两个整数n和m,分别代表城市个数n和路径条数m。第二行有n个字符,代表每个城市的名字。第三行到第m+2行每行有两个字符a和b和一个整数d,代表从城市a到城市b有一条距离为d的路。最后一行为两个字符,代表待求最短路径的城市起点和终点。当n和m都等于0时,输入结束。输出每组数据输出两行。原创 2022-01-24 12:43:36 · 457 阅读 · 0 评论 -
基于Dijsktra算法的最短路径求解
描述一张地图包括n个城市,假设城市间有m条路径(有向图),每条路径的长度已知。给定地图的一个起点城市和终点城市,利用Dijsktra算法求出起点到终点之间的最短路径。输入多组数据,每组数据有m+3行。第一行为两个整数n和m,分别代表城市个数n和路径条数m。第二行有n个字符,代表每个城市的名字。第三行到第m+2行每行有两个字符a和b和一个整数d,代表从城市a到城市b有一条距离为d的路。最后一行为两个字符,代表待求最短路径的城市起点和终点。当n和m都等于0时,输入结束。输出每组数据输出两行。原创 2021-12-12 13:43:19 · 947 阅读 · 0 评论 -
基于树的一系列算法
#include<iostream>using namespace std;typedef struct BiTNode{ int data; //结点数据域 struct BiTNode *lchild,*rchild; //左右孩子指针 }BiTNode,*BiTree; typedef char **HuffmanCode; //动态分配数组存储哈夫曼编码表 //先序遍历创建二叉树 void CreatBiTre.原创 2021-11-15 14:28:01 · 187 阅读 · 0 评论 -
查找两个单词链表共同后缀的起始结点
描述假定采用带头结点的单链表保存单词,当两个单词有相同的后缀时,则可共享相同的后缀空间。例如,“loading”和“being”的存储映像如下图所示:设str1和str2分别指向两个单词所在单链表的头结点,请实现一个时间上尽可能高效的算法,找出由str1和str2所指的两个链表共同后缀的起始位置的结点,输出该结点对应的字符(如图中的字符i)输入多组数据,每组数据有三行,第一行为链表str1和str2的长度n和m,第二行为链表str1的n个元素,第三行为链表str2的m个元素(..原创 2021-11-02 19:10:01 · 732 阅读 · 0 评论