SZTU_数据结构
SZTU
Z1Jxxx
一点点再来一点点
展开
-
B (1038) : DS哈希查找—二次探测再散列
定义哈希函数为H(key) = key%11。输入表长(大于、等于11),输入关键字集合,用二次探测再散列构建哈希表,并查找给定关键字。0或1(0—不成功,1—成功)、比较次数、查找成功的位置(从1开始)构造的哈希表信息,数组中没有关键字的位置输出NULL。原创 2023-12-28 15:23:10 · 653 阅读 · 0 评论 -
A (1036) : DS哈希查找—线性探测再散列
定义哈希函数为H(key) = key%11,输入表长(大于、等于11)。输入关键字集合,用线性探测再散列构建哈希表,并查找给定关键字。若使用C++只能include一个头文件iostream;若使用C语言只能include一个头文件stdio。对k个待查关键字,分别输出:0或1(0—不成功,1—成功)、比较次数、查找成功的位置(从1开始)程序中若include多过一个头文件,不看代码,作0分处理。构造的哈希表信息,数组中没有关键字的位置输出NULL。不允许使用第三方对象或函数实现本题的要求。原创 2023-12-28 14:40:04 · 484 阅读 · 0 评论 -
E (1052) : DS树--带权路径和
已知一棵二叉树的叶子权值,该二叉树的带权路径和APL等于叶子权值乘以根节点到叶子的分支数,然后求总和。如下图中,叶子都用大写字母表示,权值对应为:A-7,B-6,C-2,D-3。第二行输入一棵二叉树的先序遍历结果,空树用字符‘0’表示,注意输入全是英文字母和0,其中大写字母表示叶子。第三行先输入n表示有n个叶子,接着输入n个数据表示n个叶子的权值,权值的顺序和前面输入的大写字母顺序对应。计算一棵二叉树的带权路径总和,即求赫夫曼树的带权路径和。第一行输入一个整数t,表示有t个二叉树。原创 2023-12-03 16:52:58 · 531 阅读 · 0 评论 -
D (1173) : A DS二叉树_合并二叉树
数组形式的二叉树表示方法与题目:DS二叉树_伪层序遍历构建二叉树 相同,输入-1表示空结点。给定两个二叉树,输出这两个二叉树合并后形成的二叉树,依次输出前序遍历、中序遍历、后序遍历。第二行首先输入n1,接着输入n1个整数,用于代表二叉树tree1。第三行首先输入n2,接着输入n2个整数,用于代表二叉树tree2。每三行依次输出合并后的二叉树的前序遍历、中序遍历、后序遍历。以此类推,每两行输入一个测试样例的两个二叉树。第一行输入t,表示有t个测试样例。共输入t个测试样例。注意输出末尾的空格。原创 2023-12-03 16:29:04 · 409 阅读 · 0 评论 -
C (1172) : A DS二叉树_另一棵树的子树
给你两棵二叉树tree1和tree2,检验tree1中是否包含和tree2具有相同结构和结点值的子树。如果存在,输出true;否则,输出false。数组形式的二叉树表示方法与题目:DS二叉树_伪层序遍历构建二叉树 相同,输入-1表示空结点。第二行首先输入n1,接着输入n1个整数,表示二叉树tree1。第三行首先输入n2,接着输入n2个整数,表示二叉树tree2。以此类推,每两行输入一个测试样例,共输入t个测试样例。每一行输出当前测试样例是否符合题意。第一行输入t,表示有t个测试样例。原创 2023-11-26 19:02:48 · 383 阅读 · 0 评论 -
最短路径算法(Floyed,Dijkstra,Bellman-Ford,SPFA)
时间复杂度:O(KE),实际上我们没必要松弛每一个点,因为有些点实际上是不用松弛太多或者说不用松弛的,那么我们希望去掉一些无用的松弛操作,这个时候我们用队列来维护哪些点可能会需要松弛操作,这样就能只访问必要的边了。缺点:时间复杂度O(n^3),可以处理带有负权的图,但是不能处理带有负环(一个环的总权和为负数)的图。设起点为s,dis[v]表示从s到v的最短路径长度,初始化:dis[v]=无穷大;寻找白点u,u标记为已确认最短路径,再判断以u为中转点来是否要更新表格。原创 2023-11-26 18:54:04 · 609 阅读 · 0 评论 -
A (1170) : A DS二叉树_对称二叉树
数组形式的二叉树表示方法与题目:DS二叉树_伪层序遍历构建二叉树 相同,输入-1表示空结点。第二行起,每一行首先输入n,接着输入n个整数代表一个二叉树。依次输入t个二叉树。给定二叉树,检查该二叉树是否为镜像对称的。第一行输入t,表示有t个测试样例。1原创 2023-11-22 18:20:24 · 184 阅读 · 0 评论 -
D (1069) : DS二叉树—二叉树镜面反转
假设二叉树用二叉链表存储,用先序序列结果创建。输入二叉树的先序序列,请你先创建二叉树,并对树做个镜面反转,再输出反转后的二叉树的先序遍历、中序遍历、后序遍历和层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。若使用C++只能include一个头文件iostream;若使用C语言只能include一个头文件stdio.h。对每棵二叉树,输出镜面反转后的先序、中序、后序和层次遍历序列。程序中若include多过一个头文件,不看代码,作0分处理。每组测试数据是一个二叉树的先序遍历序列,#表示空树。原创 2023-11-22 17:53:03 · 98 阅读 · 0 评论 -
B (1067) : DS二叉树--层次遍历
层次遍历二叉树,是从根结点开始遍历,按层次次序“自上而下,从左至右”访问树中的各结点。第二行起输入二叉树先序遍历的结果,空树用字符‘0’表示,输入t行。建树方法采用“先序遍历+空树用0表示”的方法。第一行输入一个整数t,表示有t个测试数据。逐行输出每个二叉树的层次遍历结果。原创 2023-11-18 18:33:15 · 265 阅读 · 0 评论 -
A (1053) : DS树--二叉树高度
第二行起输入每个二叉树的先序遍历结果,空树用字符‘0’表示,连续输入t行。给出一棵二叉树,求它的高度。二叉树的创建采用前面实验的方法。第一行输入一个整数t,表示有t个二叉树。注意,二叉树的层数是从1开始。每行输出一个二叉树的高度。原创 2023-11-18 18:22:45 · 172 阅读 · 0 评论 -
F (1169) : A DS二叉树_伪层序遍历构建二叉树
第二行起,每一行首先输入一个正整数n,接下来依次输入n个整数。每三行依次输出每个二叉树的前序、中序、后序遍历。第一行输入t,表示有t个测试样例。以此类推,共输入t个测试样例。注意输出末尾的空格。原创 2023-11-13 12:31:56 · 283 阅读 · 0 评论 -
E (1065) : DS二叉树——二叉树之数组存储
第二行起,每行输入一个数组,先输入数组长度,再输入数组内数据,每个数据之间用空格隔开,输入的数据都是非负整数。每行输出一个示例的先序遍历结果,每个结点之间用空格隔开。第一行输入一个整数t,表示有t个二叉树。原创 2023-11-13 11:24:19 · 384 阅读 · 0 评论 -
D (1064) : DS二叉树——二叉树之父子结点
给定一颗二叉树的逻辑结构,(先序遍历的结果,空树用字符‘0’表示,例如AB0C00D00),建立该二叉树的二叉链式存储结构。第二行起,按照题目表示的输入方法,输入每个二叉树的先序遍历,连续输入t行。编写程序输出该树的所有叶子结点和它们的父亲结点。第一行输入一个整数t,表示有t个二叉树。原创 2023-11-13 11:05:40 · 278 阅读 · 0 评论 -
C (1063) : DS二叉树--左叶子数量
第二行起输入二叉树先序遍历的结果,空树用字符‘0’表示,输入t行。提示:可以用三叉链表法,也可以用现有算法对两层结点进行判断。左叶子是指它的左右孩子为空,而且它是父亲的左孩子。建树方法采用“先序遍历+空树用0表示”的方法。第一行输入一个整数t,表示有t个测试数据。逐行输出每个二叉树的包含的左叶子数量。计算一颗二叉树包含的叶子结点数量。原创 2023-11-13 10:53:22 · 122 阅读 · 0 评论 -
B (1062) : DS二叉树--叶子数量
建树方法采用“先序遍历+空树用0表示”的方法,即给定一颗二叉树的先序遍历的结果为AB0C00D00,其中空节点用字符‘0’表示。第二行起输入二叉树先序遍历的结果,空树用字符‘0’表示,输入t行。第一行输入一个整数t,表示有t个测试数据。计算一颗二叉树包含的叶子结点数量。逐行输出每个二叉树的包含的叶子数量。提示:叶子是指它的左右孩子为空。原创 2023-11-12 15:24:51 · 70 阅读 · 0 评论 -
A (1061) : DS二叉树—二叉树构建与遍历
给定一颗二叉树的逻辑结构如下图,(先序遍历的结果,空树用字符‘#’表示,例如AB#C##D##),建立该二叉树的二叉链式存储结构,并输出该二叉树的先序遍历、中序遍历和后序遍历结果。第二行起输入每个二叉树的先序遍历结果,空树用字符‘#’表示,连续输入t行。输出每个二叉树的先序遍历、中序遍历和后序遍历结果。第一行输入一个整数t,表示有t个二叉树。原创 2023-11-12 15:15:16 · 98 阅读 · 0 评论 -
C++ D (1073) : 串应用- 计算一个串的最长的真前后缀
因此,该串的真前缀和真后缀中最长的相等串为AB,我们称之为该串的“最长的真前后缀”。试实现一个函数string matched_Prefix_Postfix(string str),得到输入串str的最长的真前后缀。若不存在最长的真前后缀则输出empty。给定一个串,如ABCDAB,则 - ABCDAB的真前缀有:{ A, AB,ABC, ABCD, ABCDA } - ABCDAB的真后缀有:{ B, AB,DAB, CDAB, BCDAB }n个最长的真前后缀,若不存在最长的真前后缀则输出empty。原创 2023-11-01 17:52:44 · 205 阅读 · 0 评论 -
C (1072) : DS串应用--串替换
本题只考虑一处替换的情况,如果你想做的完美一些,能够实现多处替换那可能需要考虑模式串和替换串长度不一致的情况。给出主串、模式串、替换串,用KMP算法找出模式串在主串的位置,然后用替换串的字符替换掉模式串。第二行输入第1个实例的主串,第三行输入第1个实例的模式串,第四行输入第1个实例的替换串。第二行输出第1个实例的主串替换后结果,如果没有发生替换就输出主串原来的内容。第一个输入t,表示有t个实例。第一行输出第1个实例的主串。原创 2023-11-01 17:30:00 · 64 阅读 · 0 评论 -
B (1071) : DS串应用--KMP算法
第二行输出第1个实例的匹配位置,位置从1开始计算,如果匹配成功输出位置,匹配失败输出0。第二行输入第1个实例的主串,第三行输入第1个实例的模式串。学习KMP算法,给出主串和模式串,求模式串在主串的位置。第一行输出第1个实例的模式串的next值。第一个输入t,表示有t个实例。算法框架如下,仅供参考。原创 2023-11-01 17:14:38 · 161 阅读 · 0 评论 -
C++ D (1079) : DS栈—排队游戏
然后老师告诉小朋友们,站在前边的小男孩可以和他后边相邻的小女孩手拉手离开队列,剩余的小朋友重新站拢,再按前后相邻的小男孩小女孩手拉 手离开队列游戏,如此往复。用一个字符串代表小朋友队列。由于教师精心的安排,恰好可以保证每两个小朋友都能手拉手离开队列,并且最后离开的两个小朋友是编号最小的和最大的两个小朋友。按小女孩编号顺序,顺序输出手拉手离开队列的小男孩和小女孩的编号对,每行一对编号,编号之间用一个空格分隔。请根据老师的排队,按小女孩编号从小到大的顺序,给出所有手拉手离开队列的小男孩和小女孩的编号对。原创 2023-10-27 20:47:18 · 298 阅读 · 0 评论 -
C++ B (1077) : DS队列+堆栈--数制转换
对于任意十进制数转换为k进制,包括整数部分和小数部分转换。整数部分采用除k求余法,小数部分采用乘k取整法例如x=19.125,求2进制转换。接下来每行包含两个参数n和k,n表示要转换的数值,可能是非整数;k表示要转换的数制,1原创 2023-10-27 20:45:26 · 347 阅读 · 0 评论 -
C++ A (1076) : DS队列之银行排队
在银行营业大厅共服务3种客户,类型为A\B\C,大厅分别设置了3个窗口分别服务三种客户,即每个窗口只服务一种客户。现有一批客户来银行办理业务,每个客户都有类型和办理业务时间。// 把队头元素放入itemp中,注意本操作不弹出元素。编程实现它们的办理流程,请使用C++自带的queue,必须使用队列实现,其他方法0分!//把队头元素弹出队列,注意本操作不获取队头元素。入队操作:myQe.push(itemp);第三行输入每个客户的办理时间,数据之间用用空格隔开。第二行输入每个客户的类型,数据之间用用空格隔开。原创 2023-10-27 20:42:51 · 340 阅读 · 0 评论 -
A (1080) : DS队列--银行单队列多窗口模拟
假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙。当有窗口空闲时,下一位顾客即去该窗口处理事务。当有多个窗口可选择时,假设顾客总是选择编号最小的窗口。随后N行,每行给出一位顾客的到达时间T和事务处理时间P,并且假设输入数据已经按到达时间先后排好了顺序;在一行中输出平均等待时间(输出到小数点后1位)、最长等待时间、最后完成时间,之间用1个空格分隔,行末不能有多余空格。本题要求输出前来等待服务的N位顾客的平均等待时间、最长等待时间、最后完成时间。原创 2023-10-22 19:57:38 · 102 阅读 · 0 评论 -
C++ DS栈—波兰式,逆波兰式
求波兰式,需要操作数栈(注意不是计算结果入栈,计算式入栈),运算符栈。栈顶运算符优先级>新读入运算符优先级出栈,教材第三章表3.1中的相同运算符优先级>(从左往右计算)改为原创 2023-10-12 19:57:24 · 289 阅读 · 0 评论 -
C++ DS堆栈--括号匹配
从上例可以看出第1和第2个括号匹配,第3和第10个括号匹配,4和5匹配,6和9匹配,7和8匹配,11和12匹配。处理表达式过程中需要对括号匹配进行检验,括号匹配包括三种:“(”和“)”,“[”和“]”,“{”和“}”。接下来的t行的每行输入一个表达式,表达式只考虑英文半角状态输入,无需考虑中文全角输。当接收第1个左括号,表示新的一组匹配检查开始;当接受第1个右括号,则和最新进栈的左括号进行匹配,表示嵌套中1组括号已经匹配消除。对于每一行的表达式,检查括号是否匹配,匹配则输入ok,不匹配则输出error。原创 2023-09-28 19:05:52 · 524 阅读 · 0 评论 -
C++ DS堆栈--行编辑
使用C++的STL堆栈对象,编写程序实现行编辑功能。行编辑功能是:当输入#字符,则执行退格操作;如果无字符可退就不操作,不会报错。每行输出最终处理后的结果,如果一行输入的字符串经过处理后没有字符输出,则直接输出NULL。本程序默认不会显示#字符,所以连续输入多个#表示连续执行多次退格操作。注意:必须使用堆栈实现,而且结果必须是正序输出。第一行输入一个整数t,表示有t行字符串要输入。每输入一行字符打回车则表示字符串结束。第二行起输入一行字符串,共输入t行。原创 2023-09-28 19:03:27 · 106 阅读 · 0 评论 -
C++ DS循环链表—约瑟夫环(Ver. I - A)
N个人坐成一个圆环(编号为1 - N),从第S个人开始报数,数到K的人出列,后面的人重新从1开始报数。依次输出出列人的编号。例如:N = 3,K = 2,S = 1。第二行起,每行输入一组数据,包括3个数N、K、S,表示有N个人,从第S个人开始,数到K出列。2号先出列,然后是1号,最后剩下的是3号。第一行输入t,表示有t个测试用例;要求使用循环链表实现。原创 2023-09-28 19:00:35 · 823 阅读 · 0 评论 -
C 203. 移除链表元素
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点。输入:head = [1,2,6,3,4,5,6], val = 6。输入:head = [7,7,7,7], val = 7。输入:head = [], val = 1。输出:[1,2,3,4,5]原创 2023-09-26 16:04:13 · 56 阅读 · 0 评论 -
C++ 3. 无重复字符的最长子串
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。输入: s = “abcabcbb”输入: s = “pwwkew”输入: s = “bbbbb”原创 2023-09-25 16:27:05 · 338 阅读 · 0 评论 -
c语言 简单顺序表 动态顺序表(指针) 其中包括:初始化,扩容,头插,头删,尾插,尾删,查找,插入,打印,销毁
其中包括:初始化,扩容,头插,头删,尾插,尾删,查找,插入,打印,销毁。这是用c语言写的顺序表中的动态顺序表(指针)原创 2023-09-20 14:03:15 · 59 阅读 · 0 评论 -
C语言 顺序表 单链表
初始化 打印 插入 头插 头删 尾插 尾删 查询。c语言 顺序表中单链表的基本操作。原创 2023-09-26 16:13:14 · 45 阅读 · 0 评论 -
C语言 双向循环链表 其中包括:初始化,头插,尾插,头删,尾删,查询...
C语言 双向循环链表 其中包括:初始化,头插,尾插,头删,尾删,查询…原创 2023-09-26 17:32:39 · 54 阅读 · 0 评论