SCAU数据结构
文章平均质量分 55
数据结构OJ记录
Hunter_Kevin
这个作者很懒,什么都没留下…
展开
-
8644 堆排序
Description用函数实现堆排序,并输出每趟排序的结果输入格式第一行:键盘输入待排序关键的个数n第二行:输入n个待排序关键字,用空格分隔数据输出格式第一行:初始建堆后的结果其后各行输出交换堆顶元素并调整堆的结果,数据之间用一个空格分隔输入样例105 4 8 0 9 3 2 6 7 1输出样例9 7 8 6 4 3 2 5 0 18 7 3 6 4 1 2 5 0 97 6 3 5 4 1 2 0 8 96 5 3 0 4 1 2 7 8 95 4 3 0 2 1 6 7原创 2021-06-18 12:52:10 · 521 阅读 · 0 评论 -
8645 归并排序(非递归算法)
Description用函数实现归并排序(非递归算法),并输出每趟排序的结果输入格式第一行:键盘输入待排序关键的个数n第二行:输入n个待排序关键字,用空格分隔数据输出格式每行输出每趟排序的结果,数据之间用一个空格分隔输入样例105 4 8 0 9 3 2 6 7 1输出样例4 5 0 8 3 9 2 6 1 70 4 5 8 2 3 6 9 1 70 2 3 4 5 6 8 9 1 70 1 2 3 4 5 6 7 8 9归并排序递归版://递归分治法,无法输出单次排序的的结原创 2021-06-15 15:13:14 · 792 阅读 · 2 评论 -
8643 简单选择排序
Description用函数实现简单选择排序,并输出每趟排序的结果输入格式第一行:键盘输入待排序关键的个数n第二行:输入n个待排序关键字,用空格分隔数据输出格式每行输出每趟排序的结果,数据之间用一个空格分隔输入样例105 4 8 0 9 3 2 6 7 1输出样例0 4 8 5 9 3 2 6 7 10 1 8 5 9 3 2 6 7 40 1 2 5 9 3 8 6 7 40 1 2 3 9 5 8 6 7 40 1 2 3 4 5 8 6 7 90 1 2 3 4 5 8原创 2021-06-15 10:06:02 · 599 阅读 · 0 评论 -
8641 冒泡排序
Description用函数实现冒泡排序,并输出每趟排序的结果(要求当一趟冒泡过程中不再有数据交换,则排序结束)输入格式第一行:键盘输入待排序关键的个数n第二行:输入n个待排序关键字,用空格分隔数据输出格式每行输出每趟排序结果,数据之间用一个空格分隔输入样例105 4 8 0 9 3 2 6 7 1输出样例4 5 0 8 3 2 6 7 1 94 0 5 3 2 6 7 1 8 90 4 3 2 5 6 1 7 8 90 3 2 4 5 1 6 7 8 90 2 3 4 1 5原创 2021-06-15 09:56:48 · 545 阅读 · 0 评论 -
8639 折半插入排序
Description用函数实现折半插入排序,并输出每趟排序的结果.输入格式第一行:键盘输入待排序关键的个数n第二行:输入n个待排序关键字,用空格分隔数据输出格式每行输出一趟排序结果,数据之间用一个空格分隔输入样例105 4 8 0 9 3 2 6 7 1输出样例4 5 8 0 9 3 2 6 7 14 5 8 0 9 3 2 6 7 10 4 5 8 9 3 2 6 7 10 4 5 8 9 3 2 6 7 10 3 4 5 8 9 2 6 7 10 2 3 4 5 8 9原创 2021-06-15 09:33:04 · 530 阅读 · 0 评论 -
8640 希尔(shell)排序
Description用函数实现希尔(shell)排序,并输出每趟排序的结果,初始增量d=n/2,其后d=d/2输入格式第一行:键盘输入待排序关键的个数n第二行:输入n个待排序关键字,用空格分隔数据输出格式每行输出一趟排序结果,数据之间用一个空格分隔输入样例105 4 8 0 9 3 2 6 7 1输出样例3 2 6 0 1 5 4 8 7 91 0 3 2 4 5 6 8 7 90 1 2 3 4 5 6 7 8 9......原创 2021-06-15 09:10:53 · 614 阅读 · 0 评论 -
8638 直接插入排序
Description用函数实现直接插入排序,并输出每趟排序的结果.输入格式第一行:键盘输入待排序关键的个数n第二行:输入n个待排序关键字,用空格分隔数据输出格式每行输出一趟排序结果,数据之间用一个空格分隔输入样例105 4 8 0 9 3 2 6 7 1输出样例4 5 8 0 9 3 2 6 7 14 5 8 0 9 3 2 6 7 10 4 5 8 9 3 2 6 7 10 4 5 8 9 3 2 6 7 10 3 4 5 8 9 2 6 7 10 2 3 4 5 8 9原创 2021-06-14 10:35:15 · 1024 阅读 · 0 评论 -
8609 哈夫曼树
Description 利用静态链表建立赫夫曼树,建树过程中要求左子树权值小于右子树权值,求各结点的编码。要求:叶子结点的个数n及结点值由键盘录入。本题给出程序代码,要求修改以满足测试要求.#include “stdio.h”#include “malloc.h”#include “string.h”typedef struct{unsigned int weight;unsigned int parent,lchild,rchild;}HTNode,*HuffmanTree;typedef原创 2021-06-14 10:04:46 · 662 阅读 · 0 评论 -
8576 顺序线性表的基本操作
Description 编写算法,创建初始化容量为LIST_INIT_SIZE的顺序表T,并实现插入、删除、遍历操作。本题目给出部分代码,请补全内容。#include<stdio.h>#include<malloc.h>#define OK 1#define ERROR 0#define LIST_INIT_SIZE 100#define LISTINCREMENT 10#define ElemType inttypedef struct{int *elem;i原创 2021-06-10 09:26:50 · 351 阅读 · 0 评论 -
18923 二叉树的直径
Description给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。1/ 2 3/ \4 5答案为3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。输入格式共n行。第一行一个整数n,表示有n个结点,编号为1至n。第二行至第n行,每行有两个整数x和y,表示在二叉树中x为y的父节点。x第一次出现时y为左孩子输出格式输出二叉树的直径。输入样例51 21 32 42 5原创 2021-06-13 21:35:53 · 823 阅读 · 0 评论 -
8642 快速排序
Description用函数实现快速排序,并输出每次分区后排序的结果输入格式第一行:键盘输入待排序关键的个数n第二行:输入n个待排序关键字,用空格分隔数据输出格式每行输出每趟排序的结果,数据之间用一个空格分隔输入样例105 4 8 0 9 3 2 6 7 1输出样例1 4 2 0 3 5 9 6 7 80 1 2 4 3 5 9 6 7 80 1 2 4 3 5 9 6 7 80 1 2 3 4 5 9 6 7 80 1 2 3 4 5 8 6 7 90 1 2 3 4 5原创 2021-06-13 15:51:42 · 265 阅读 · 0 评论 -
18724 二叉树的遍历运算
Description二叉树的三种遍历都可以通过递归实现。如果我们知道一棵二叉树的先序和中序序列,可以用递归的方法求后序遍历序列。输入格式两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串,表示树的中序遍历。树的结点一律用小写字母表示。输出格式一个字符串,树的后序序列。输入样例abcdebcade输出样例cbeda思路:与二叉树的先序遍历构建结构类似解法:①、先构造二叉树,然后后序遍历输出#include<stdio.h>#include<ma原创 2021-06-13 12:26:54 · 212 阅读 · 0 评论 -
18924 二叉树的宽度
Description二叉树的宽度指的是具有节点数目最多的那一层的节点个数。1/ 2 3/4答案为2, 第二层节点数最多,为2个节点。输入格式共n行。第一行一个整数n,表示有n个结点,编号为1至n,结点1为树根。(1<=n<=50)第二行至第n行,每行有两个整数x和y,表示在二叉树中x为y的父节点。x第一次出现时y为左孩子输出格式输出二叉树的宽度。输入样例51 21 32 42 5输出样例2思路:二叉树的顺序存储结构、广搜代码:#incl原创 2021-06-13 09:44:10 · 820 阅读 · 0 评论 -
17121 求二叉树各种节点数
Description构造二叉链表表示的二叉树:按先序次序输入二叉树中结点的值(一个字符),’#'字符表示空树,构造二叉链表表示的二叉树T,并求此二叉树中度为2的节点总数,度为1的节点总数,度为0的节点总数#include “stdio.h”#include “malloc.h”#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef原创 2021-06-13 08:36:23 · 256 阅读 · 0 评论 -
8606 二叉树的构建及遍历操作
Description 构造二叉链表表示的二叉树:按先序次序输入二叉树中结点的值(一个字符),’#'字符表示空树,构造二叉链表表示的二叉树T;再输出三种遍历序列。本题只给出部分代码,请补全内容。#include “stdio.h”#include “malloc.h”#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int St原创 2021-06-12 10:51:57 · 406 阅读 · 0 评论 -
8622 哈希查找
Description 使用哈希函数:H(k)=3k MOD length,并采用开放定址法处理冲突。试对输入的关键字序列构造哈希表,哈希表长度为length,求等概率情况下查找成功的平均查找长度,并设计构造哈希表的完整的算法。本题给出部分代码,请补全Hash函数和解决冲突的collison函数。#include"malloc.h" / malloc()等 /#include"stdlib.h" / exit() */#include"stdio.h"#define EQ(a,b) ((a)==(b原创 2021-06-12 10:40:55 · 597 阅读 · 0 评论 -
8610 顺序查找
Description 编写Search_Seq函数,实现在一个无序表ST中采用顺序查找算法查找值为key的元素的算法.#include"malloc.h" /* malloc()等 */#include"stdio.h"#include"stdlib.h"typedef int ElemType;typedef struct /*静态查找表的顺序存储结构 */{ElemType elem; / 数据元素存储空间基址,建表时按实际长度分配,0号单元留空 /int length; / 表长度原创 2021-06-12 10:03:31 · 208 阅读 · 0 评论 -
8647 实现图的存储结构
Description实现有向图的邻接矩阵存储结构。输入格式第一行:输入图的顶点个数n(各个顶点的默认编号为1~n), 边的条数m。第二 ~ m+1行:每行输入两个顶点编号i、j,表示连接顶点i到顶点j的一条边。输出格式分n行输出n*n的邻接矩阵,表示所输入的图存储,顶点i和顶点j之间如果有边相连,则输出1,没边相连则输出0。输入样例4 41 21 33 44 1输出样例0 1 1 00 0 0 00 0 0 11 0 0 0代码:#include <cstdio原创 2021-06-12 09:53:58 · 629 阅读 · 0 评论 -
8592 KMP算法
Description 用KMP算法对主串和模式串进行模式匹配。本题目给出部分代码,请补全内容。#include “stdio.h”#include “stdlib.h”#include “iostream.h”#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASLBLE -1#define OVERFLOW -2#define MAXSTRLEN 255 //用户可在255以内定义最原创 2021-06-12 09:32:22 · 182 阅读 · 0 评论 -
8591 计算next值
Description 编写算法,录入多个字符串计算并验证NEXT值,输入0结束。本题目给出部分代码,请补全内容。]#include “stdio.h”#include “stdlib.h”#include “iostream.h”#define MAXSTRLEN 255 // 用户可在255以内定义最大串长typedef unsigned char SString[MAXSTRLEN+1]; // 0号单元存放串的长度void get_next(SSt原创 2021-06-12 09:14:45 · 131 阅读 · 0 评论 -
8587 行编辑程序
Description 利用栈编写简单的行编辑程序:接受用户从终端输入的程序或数据,在输入过程中,允许用户输入出差错,并在发现有误时可以及时更正。例如:当用户发现刚刚键入的一个字符是错的时,可以补进一个退格符“#”,以表示前一个字符无效;如果发现当前键入的行内差错较多或难以补救,则可以键入一个退行符“@”,以表示当前行中的字符均无效。例如:假设从终端接受了这样两行字符: whli##ilr#e (s#*s) outcha@putchar(*s=#++); 则实际有效的是下列两行: while (*s) pu原创 2021-06-11 22:11:15 · 769 阅读 · 0 评论 -
8586 括号匹配检验
Description 利用栈编写满足下列要求的括号匹配检验程序:假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,即()或[([][])]等为正确的格式,[(]或([())或(()])均为不正确的格式。输入一个包含上述括号的表达式,检验括号是否配对。本题给出部分check()函数,要求将check()函数补充完整,并完成整个程序。typedef char SElemType;#include"malloc.h"#include"stdio.h"#include"math.h"#in原创 2021-06-11 18:53:47 · 387 阅读 · 0 评论 -
8584 循环队列的基本操作
Description 创建一个空的循环队列,并实现入队、出队、返回队列的长度、返回队头元素、队列的遍历等基本算法。请将下面的程序补充完整。#include<malloc.h>#include<stdio.h>#define OK 1#define ERROR 0typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等typedef int QElemType;#define MAXQSIZE 100 // 最大队列长度(原创 2021-06-11 18:25:04 · 822 阅读 · 0 评论 -
8583 顺序栈的基本操作
Description 创建一个空的顺序栈,并实现栈的入栈、出栈、返回栈的长度、返回栈顶元素、栈的遍历等基本算法。请将下面的程序补充完整。#include<malloc.h>#include<stdio.h>#define OK 1#define ERROR 0#define STACK_INIT_SIZE 100 // 存储空间初始分配量#define STACKINCREMENT 10 // 存储空间分配增量typedef int SElemType; // 定义栈原创 2021-06-11 16:40:42 · 405 阅读 · 1 评论 -
8581 线性链表逆置
Description线性链表的基本操作如下:#include<stdio.h>#include<malloc.h>#define ERROR 0#define OK 1#define ElemType inttypedef int Status;typedef struct LNode{int data;struct LNode *next;}LNode,*LinkList;Status ListInsert_L(LinkList &L, int原创 2021-06-11 15:46:08 · 248 阅读 · 1 评论 -
8580 合并链表
Description线性链表的基本操作如下:#include<stdio.h>#include<malloc.h>#define ERROR 0#define OK 1#define ElemType inttypedef int Status;typedef struct LNode{int data;struct LNode *next;}LNode,*LinkList;Status ListInsert_L(LinkList &L, int原创 2021-06-11 14:53:01 · 498 阅读 · 0 评论 -
8579 链式线性表的基本操作
Description 编写算法,创建一个含有n个元素的带头结点的单链表L并实现插入、删除、遍历操作。本题目提供部分代码,请补全内容。#include<stdio.h>#include<malloc.h>#define ERROR 0#define OK 1#define ElemType inttypedef struct LNode{int data;struct LNode *next;}LNode,*LinkList;int CreateLink_L(L原创 2021-06-10 22:14:13 · 476 阅读 · 0 评论 -
18937 阿克曼(Ackmann)函数
Description阿克曼(Ackmann)函数A(m,n)中,m,n定义域是非负整数(m≤3,n≤10),函数值定义为:输入格式输入m和n。输出格式函数值。输入样例2 3输出样例9代码:#include <cstdio>#include <iostream>using namespace std;int akm(int m, int n){ if (m==0) return n+1; if (m >0 &a原创 2021-06-10 11:07:42 · 829 阅读 · 0 评论 -
8585 栈的应用——进制转换
Description利用顺序栈的基本操作算法,编写满足下列要求的数制转换程序:对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数。输入格式第一行:输入一个非负的十进制整数输出格式第一行:与输入等值的八进制数输入样例15输出样例17代码 :#include <cstdio>#include <iostream>using namespace std;int main(){ int n; int s[10000] = {0},原创 2021-06-10 11:00:56 · 358 阅读 · 0 评论 -
18961 最大点的集合
Description 字节跳动2018校招测试开发方向(第一批)P为给定的二维平面整数点集。定义 P 中某点x,如果x满足 P 中任意点都不在 x的右上方区域内(横纵坐标都大于x),则称其为“最大的”。求出所有“最大的”点的集合。(所有点的横坐标和纵坐标都不重复, 坐标轴范围在[0, 1e9) 内)如下图:实心点为满足条件的点的集合。请实现代码找到集合 P 中的所有 ”最大“ 点的集合并输出。输入格式第一行输入点集的个数 N, 接下来 N 行,每行两个数字代表点的 X 轴和 Y 轴。对于原创 2021-06-10 10:25:44 · 311 阅读 · 0 评论 -
8578 顺序表逆置
Description顺序表的基本操作代码如下:#include<stdio.h>#include<malloc.h>#define OK 1#define ERROR 0#define LIST_INIT_SIZE 100#define LISTINCREMENT 10#define ElemType inttypedef int Status;typedef struct{int *elem;int length;int listsize;}SqLi原创 2021-06-10 10:07:47 · 549 阅读 · 0 评论 -
8577 合并顺序表
Description若线性表中数据元素相互之间可以比较,且数据元素在表中按值递增或递减,则称该表为有序表。编写算法,将两个非递减有序顺序表A和B合并成一个新的非递减有序顺序表C。输入格式第一行:顺序表A的元素个数第二行:顺序表A的各元素(非递减),用空格分开第三行:顺序表B的元素个数第四行:顺序表B的各元素(非递减),用空格分开输出格式第一行:顺序表A的元素列表第二行:顺序表B的元素列表第三行:合并后顺序表C的元素列表输入样例51 3 5 7 952 4 6 8 10输出原创 2021-06-10 09:58:55 · 336 阅读 · 0 评论 -
18448 最小生成树
Description给定结点数为n,边数为m的带权无向连通图G,所有结点编号为1,2,3…n。求图G的最小生成树的边权和。输入格式第一行两个正整数n和m。n,m<=2000之后的m行,每行三个正整数a,b,w,描述一条连接结点a和b,边权为w的边。1=<a,b<=n,w<=10^18。注意可能存在重边和自环。输出格式一个整数表示图G的最小生成树的边权和(注意用长整型)。输入样例7 121 2 91 5 21 6 32 3 52 6 73 4 63原创 2021-06-08 11:13:45 · 764 阅读 · 0 评论 -
18276 走迷宫
Description有一个N*M的格子迷宫,1代表该格子为墙,不能通过,0代表可以通过,另外,在迷宫中有一些传送门,走到传送门的入口即会自动被传送到传送门的出口(一次传送算1步)。人在迷宫中可以尝试上下左右四个方向移动。现在给定一个迷宫和所有传送门的出入口,以及起点和终点,问最少多少步可以走出迷宫。如果不能走出迷宫输出“die”。输入格式该程序为多CASE,第1行为CASE的数量每一个CASE,第1行为两个数N(行)和M(列)然后N行每行M个数之后是一个数W,为传送门的数量之后每行一个原创 2021-05-17 17:04:34 · 752 阅读 · 0 评论 -
18708 最大子段和(暴力、分治)
Description一个整数序列,选出其中连续且非空的一段使得这段和最大。注意当题目要求输入输出的数据量很大时,尽量使用scanf和printf。 c++提供的cin和cout速度比较慢,有可能在读取数据和输出数据时导致超时。输入格式第一行是一个正整数N,表示了序列的长度(0=<N<=200000)。第二行包含N个绝对值不大于10000的整数ai。输出格式一个整数,为最大的子段和。子段的最小长度为1。数据确保结果在类型int范围内。输入样例72 -4 3 -1 2 -4 3原创 2021-04-15 18:51:54 · 587 阅读 · 0 评论 -
表达式求值---(中缀表达式转后缀表达式及后缀表达式求值结合)
题目:利用栈编写表达式求值程序:输入含有“ + ”、“ - ”、“ * ”、“ / ”四则运算的表达式,其中负数要用(0 - 正数)表示,并以 = 结束。要求输出表达式的值。输入格式第一行:一个算术表达式输出格式第一行:算术表达式的值输入样例3 * (9 - 7) =输出样例6一、解题思路:①. 注意栈元素为整型类型。由于表达式的运算符号为字符类型,但依然能够以ASCII码形式储存在栈中,故栈元素可以不用定义为字符类型,而定义为整型类型数据即可,方便从后缀表达式中将字符类型.原创 2020-12-04 17:33:24 · 1102 阅读 · 1 评论 -
栈的应用-----后缀表达式的计算
后缀表达式计算,给出的中缀表达式中有了#作为每个数字的结尾,则可以将多位数的数子字符转化为整型数字压入栈中;否则只能进行个位数的计算。中缀表达式:9+(3-1)3+10/2后缀表达式:9#3#1#-3#+10#2#/+规则:从做到右遍历后缀表达式的每个数字字符和符号字符①. 如果是数字就进栈②. 如果是符号,就将栈顶的两个数字出栈,第一个出栈的作为右操作数,第二个出栈的作为左操作数,将运算后的结果进栈③. 到达末尾后将栈顶元素输出,即为表达式的结果代码演示:#include <原创 2020-11-13 20:28:21 · 1090 阅读 · 0 评论 -
栈的实际应用----中缀表达式转后缀表达式
我们把平时所用的标准四则运算表达式,即“9+(3-1)*3+10 / 2”叫做中缀表达式。中缀表达式 “9+(3-1)*3+10 / 2” 转化为后缀表达式 “ 9 3 1 - 3 * + 10 2 / + ”规则:从左到右遍历中缀表达式的每个数字和符号;①. 若是数字就输出,即成为后缀表达式的一部分;②. 若是符号,则判断其与栈顶符号的优先级;如果当前符号是右括号,则依次输出栈顶符号,直到左括号(注意不输出左右括号);如果当前符号的优先级低于栈顶符号,则一直输出栈顶符号,直到优先级低于当前.原创 2020-11-13 20:17:31 · 202 阅读 · 0 评论 -
链栈的基本操作
栈是限定仅在表尾进行插入和删除操作的线性表。表尾端称为栈顶,表头端称为栈底。栈又称为后进先出的线性表。示意图:栈的基本操作包括:void IninStack() 操作结果:构造一个栈并返回; void DestroyStack(PStack stack) 初始条件:栈stack已存在; 操作结果:栈stack被销毁; void ClearStack(PStack stack) 初始条件:栈Satck已存在; 操作结果:将栈Stack清为空栈; int StackEmpty(P.原创 2020-11-13 19:56:31 · 1989 阅读 · 0 评论 -
C语言实现-用结构体创建数组并实现各项常用功能(多注释)
一、内容:C语言代码的底层开发二、目标:用C语言结构体写出数组; 可调用封装的函数对数组进行各项操作# include <stdio.h># include <malloc.h># include <stdbool.h># include <stdlib.h>//思考:可尝试增加数组长度,重新分配内存//创建整型数组结构体类...原创 2020-05-06 18:19:02 · 2789 阅读 · 0 评论