
数据结构
文章平均质量分 90
Shuo..
需要什么资料可以私聊噢~~
展开
-
数据结构课后答案
第1章 绪论1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。在有些情况下,数据元素也称为元素、结点、记录等。数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(原创 2021-05-17 10:46:34 · 5339 阅读 · 0 评论 -
链表的纯C实现
题目描述在链表实现(第二部分)的基础上,将C++的语法部分改成C语言的实现, 本题要求使用C语言提交。输入为线性表的操作系列,每个操作一行,具体见样例。输出如果输入为"Empty", 则根据表是否为空输出"Empty"或 “Not empty”。如果输入为"Length",则输出表长。如果输入为"Insert i e",插入失败则输出"Insert failed",否则在i位置插入e后输出插入后表中的所有元素。如果输入为"GetElem i “,参数i错误输出"Out of index”,否原创 2020-10-22 23:31:40 · 1584 阅读 · 0 评论 -
集合的交(线性表的应用)
目描述用线性表(顺序表的实现或者链表的实现)来表示集合,利用线性表的操作实现集合的交操作。输入输入包含两行。第一行表示集合A,该行的第一个数n是集合A的大小,随后有n个空格分开的整数,均为集合A的元素。第二行表示集合B,该行的第一个数m是集合B的大小,随后有m个空格分开的整数,均为集合B的元素。保证各个集合中不会有重复的元素。输出输出集合A和集合B的交集中的所有元素,用空格分开,元素输出的次序按在集合A中出现的次序。如果交集为空,输出一空行。样例输入 Copy3 100 200 300原创 2020-10-22 23:29:18 · 2727 阅读 · 1 评论 -
后插法建链表
输入输入包括两行。第一行是一个整数n,表示链表中的元素个数。第二行是n个空格分开的整数,为各元素值。输出输出链表,见样例。样例输入 Copy51 2 3 4 5样例输出 Copy1 2 3 4 5#include<iostream>#include<iomanip>using namespace std;#define OK 1#define ERROR 0#define OVERFLOW -2typedef int Status; //Statu原创 2020-10-22 23:28:14 · 2011 阅读 · 2 评论 -
广度优先搜索
题目描述输入一个图,用邻接表存储(实际上也可以选择邻接矩阵),并实现BFS操作。拷贝前面已经实现的代码,主函数必须如下,完成剩下的部分。int main(){Graph g;CreateUDG(g);BFS(g, 0);//从0号顶点开始遍历DestroyUDG(g);return 0;}//main输入输入的第一行是两个整数,分别是图的总顶点数n和总边数e第二行是n个空格分开的字符串,是顶点的名字,依次对应编号0~n-1。随后有e行,每行两个空格分开的顶点名字,表示一条边的两个原创 2020-10-22 23:26:39 · 828 阅读 · 0 评论 -
根据二叉树前序和中序求后序
题目描述二叉树的前序、中序、后序遍历的定义:前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树;中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树;后序遍历:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根。给定一棵二叉树的前序遍历和中序遍历,求其后序遍历(提示:给定前序遍历与中序遍历能够唯一确定后序遍历)。输入两个字符串,其长度n均小于等于26。第一行为前序遍历,第二行为中序遍历。二叉树中的结点名称以大写字母表示:A,B,C…最多26个结点。输出原创 2020-10-22 23:25:34 · 2161 阅读 · 0 评论 -
二叉树遍历(用结构体数组存储)
题目描述给出一个n个节点的二叉树,请求出二叉树的前序遍历,中序遍历和后序遍历。输入第一位一个整数n(0<n<=26),表示二叉树有n个节点,以下n行,每行第一个为一个大写字母表示节点,后面为两整数,第一个表示左儿子序号,第二个表示右儿子序号,如果该序号为0表示没有输出共三行,第一行为二叉树的前序遍历,第二行为中序遍历,第三行为后序遍历样例输入 Copy7F 2 3C 4 5E 0 6A 0 0D 7 0G 0 0B 0 0样例输出 CopyFCADBEGACBD原创 2020-10-22 23:24:16 · 1180 阅读 · 0 评论 -
二叉排序树的基本操作
题目描述二叉排序树或者是一棵空树,或者是具有以下几条性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根节点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根节点的值; 它的左右子树也分别为二叉排序树。二叉排序树又可以被称为二叉查找树,根据上述定义的结构不难知道,它的查找过程十分简单,只需要通过不断的将当前结点的值与需要查找的值进行比较,如果相等则直接输出,如果要查找的值更小则深入至左子树进行比较,否则就深入右子树进行比较,直到找到相应的值或者原创 2020-10-22 23:22:37 · 1457 阅读 · 0 评论 -
多项式相加
题目描述在数学上,一个一元多项式可按升幂写成a0+a1x+a2x2+…+anxn。求2个多项式相加后的结果。输入输入2个一元多项式。由于通过键盘不能输入上标,故多项式的输入格式为a0+a1x+a2x2+…+anxn。其中,a0~an都是整数,n为正整数。输出输出有2行。第一行是2个一元多项式相加后的结果。第二行是将第一行结果各项逆置后的结果。样例输入 Copy7+3x+9x8+5x178x+22x7-9x8样例输出 Copy7+11x+22x7+5x175x17+22x7+11x原创 2020-10-22 23:21:07 · 1186 阅读 · 0 评论 -
创建二叉树并中序遍历
题目描述编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。例如如下的先序遍历字符串:ABC##DE#G##F###其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。输入输入有多组测试数据。每组数据为一行字符串,长度不超过100。输出可能有多组测试数据,对于每组数据,输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。每个输出结果占一行。样例输入 Copya#b#cdef##原创 2020-10-22 23:16:12 · 2925 阅读 · 0 评论 -
创建二叉树并计算深度
题目描述编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。例如如下的先序遍历字符串:ABC##DE#G##F###其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再计算二叉树的深度并输出。输入输入有多组测试数据。每组数据为一行字符串,长度不超过100。输出可能有多组测试数据,对于每组数据,输出对应二叉树的深度。每个输出结果占一行。样例输入 Copya#b#cdef#####a##样例输出 Copy61#include原创 2020-10-21 20:44:26 · 1576 阅读 · 0 评论 -
创建二叉树并计算结点数
题目描述编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。例如如下的先序遍历字符串:ABC##DE#G##F###其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树的总结点数和度为2的结点数进行统计,并输出。输入输入有多组测试数据。每组数据为一行字符串,长度不超过100。输出可能有多组测试数据,对于每组数据,每个输出结果占一行,即输出对应二叉树的总结点数和度为2的结点数,空格分隔。样例输入 Copya#b#cdef###原创 2020-10-21 20:43:26 · 2932 阅读 · 0 评论 -
出栈合法性
题目描述已知自然数1,2,…,N(1<=N<=100)依次入栈,请问序列C1,C2,…,CN是否为合法的出栈序列。输入输入包含多组测试数据。每组测试数据的第一行为整数N(1<=N<=100),当N=0时,输入结束。第二行为N个正整数,以空格隔开,为出栈序列。输出对于每组输入,输出结果为一行字符串。如给出的序列是合法的出栈序列,则输出Yes,否则输出No。样例输入 Copy53 4 2 1 553 5 1 4 20样例输出 CopyYesNo#inc原创 2020-10-21 20:41:47 · 1067 阅读 · 0 评论 -
层次遍历C语言
题目描述编一个程序,读入用户输入的一串先序遍历字符串,根据输入建立一棵二叉树, 并输出该二叉树的层次遍历序列。层次遍历是指逐层访问,每一层又按从左到右的次序访问结点。输入输入包括1行字符串,长度不超过100。输出输出二叉树的层次遍历序列。每个结点先输出一个空格,然后再跟着输出结点的数据。样例输入 Copy12##3##样例输出 Copy1 2 3#include <iostream>#include <cstdio>#include <malloc.h&原创 2020-10-21 20:38:41 · 4388 阅读 · 3 评论 -
KMP字符串模式匹配算法实现
题目描述KMP算法是字符串模式匹配算法中较为高效的算法之一,其在某次子串匹配母串失败时并未回溯母串的指针而是将子串的指针移动到相应的位置。书中详细描述了KMP算法,前面你已经计算了子串移动的next数组,现在就来利用该next数组来实现KMP模式匹配。输入3组字符串,每组字符串占一行。每行包含由空格分隔的两个字符串,字符串仅由英文小写字母组成且长度不大于100。输出每组数据输出1行,输出后一个字符串在前一个字符串中的位置,如果不匹配,则输出0。样例输入 Copystring strthisi原创 2020-10-21 20:38:04 · 1936 阅读 · 0 评论 -
KMP算法中模式串移动next数组的计算
题目描述字符串的子串定位称为模式匹配,模式匹配可以有多种方法。简单的算法可以使用两重嵌套循环,时间复杂度为母串与子串长度的乘积。而KMP算法相对来说在时间复杂度上要好得多,为母串与子串长度的和。但其算符比较难以理解。在KMP算法中,使用到了一个next数组。这个数组就是在比较失配时母串指针不必回溯,而子串指针移动相应位置即可。请参考教材next数组的计算公式与算法,编程实现之。输入一个模式串,仅由英文小写字母组成。长度不大于100。输出输出模式串对应的移动数组next。每个整数后跟一个空格。样原创 2020-10-21 20:36:49 · 1154 阅读 · 0 评论 -
Huffman树的带权路径长度
题目描述给定n个权值(权值均是大于0的正整数),构造赫夫曼树HT,并求出赫夫曼树HT的带权路径长度。注意:构造赫夫曼树HT时,在将2棵二叉树合并成一棵新的二叉树时,将根结点权值小的用作左子树!输入先输入权值的个数n(n>1)。然后依次输入n个权值(权值均是大于0的正整数)输出输出构造的赫夫曼树HT的带权路径长度。样例输入 Copy85 29 7 8 14 23 3 11样例输出 Copy271#include<iostream>#include<cstri原创 2020-10-21 20:35:13 · 2944 阅读 · 1 评论 -
Huffman编码(2)
题目描述给定n个字符的权值(权值均是大于0的正整数),构造赫夫曼树HT,并求出n个字符的赫夫曼编码HC。注意:在构造赫夫曼树HT时,序号小的权值放在左边,不是权值小的放左边!(序号:与权值输入的顺序相对应,序号由小到大)输入先输入权值的个数n(n>1)。然后依次输入n个权值(权值均是大于0的正整数)输出与输入的n个权值相对应,依次输出对应的编码。编码时,左孩子分支编码为0,右孩子分支编码为1。样例输入 Copy85 29 7 8 14 23 3 11样例输出 Copy0110原创 2020-10-21 20:34:09 · 800 阅读 · 1 评论 -
huffman编码(1)
题目描述给定n个字符的权值(权值均是大于0的正整数),构造赫夫曼树HT,并求出这n个字符的赫夫曼编码HC。注意:构造赫夫曼树HT时,在将2棵二叉树合并成一棵新的二叉树时,将根结点权值小的用作左子树!输入先输入权值的个数n(n>1)。然后依次输入n个权值(权值均是大于0的正整数)输出与输入的n个权值相对应,依次输出对应的编码。编码时,左孩子分支编码为0,右孩子分支编码为1。样例输入 Copy85 29 7 8 14 23 3 11样例输出 Copy000110111011原创 2020-10-21 20:33:11 · 1315 阅读 · 0 评论 -
DFS与BFS
题目描述求图的DFS序列及BFS序列。图的顶点数<=20,边数<=100。输入图用邻接表存储。图中的顶点用一个结构体数组存储,结构体定义如下:typedef struct tnode{ int vexdata;struct node *firstarc;}TD;图中各顶点后接一个单链表,存储与顶点连接有边的邻接顶点信息,邻接顶点信息用结构体存储,定义如下:typedef struct node{ int adjvex;struct node *next;}JD;程序运行时原创 2020-10-21 20:31:52 · 824 阅读 · 0 评论 -
各类排序(直接、折半、希尔、冒泡、选择、快速、堆)
题目描述经过三天的任务1的训练,大家的确辛苦了.因此,在任务2开始时,我为大家准备了一道令人非常愉快的热身题.即将一个杂乱无序的整数序列,按照从小到大的顺序排列并输出.输入测试数据不止一组,每组测试数据:1)先输入无序序列的整数个数n;(n不超过1000000)2)然后连续输入n个整数;若n的值输入为0值,则输入结束.输出与每组输入的测试数据相对应,输出其按从小到大排好序后的整数序列.注意:每组输出占一行.样例输入 Copy109 8 7 6 5 4 3 2 1 -1588 77原创 2020-06-03 20:47:44 · 375 阅读 · 0 评论 -
循环队列、链式队列的基本操作
1.循环队列输入为循环队列的操作系列,每个操作一行,具体见样例。输出如果输入为"EnQueue e", 队已满输出"EnQueue failure",否则将e入队后再输出从队头到队尾的所有元素。如果输入为"DeQueue", 队为空输出"DeQueue failure",否则删除队头元素后再输出队列中的所有元素。如果输入为"Empty",则输出队列是否为空。如果输入为"Length"...原创 2020-03-31 15:46:27 · 705 阅读 · 0 评论 -
链栈、顺序栈的基本操作
顺序栈#include<iostream>#include<cstdlib>#include<cstdio>using namespace std;//顺序栈定义#define OK 1#define ERROR 0#define OVERFLOW - 2#define MAXSIZE 5 //顺序栈存储空间的初始分配量typedef i...原创 2020-03-31 14:55:28 · 519 阅读 · 0 评论 -
线性表(顺序表、链表)的实现
1.顺序表实现#include<iostream>#include<cstdio>#include<cstdlib>using namespace std;#define OK 1#define ERROR 0#define OVERFLOW -2typedef int Status; //Status 是函数返回值类型,其值是函数结果状态代码...原创 2020-03-30 15:59:47 · 560 阅读 · 0 评论