
数据结构
文章平均质量分 60
学习数据结构的心得还有做力扣 华农oj上的题解
向晚大魔王Avvvvvva
华南农业大学软件工程学生
展开
-
算法套路学习笔记(第二章) 动态规划系列 2.1-2.3
动态规划无非分为一下几步:找到“状态”和“选择”->明确DP数组/函数的定义->寻找“状态”之间的关系原创 2022-03-07 16:45:10 · 626 阅读 · 0 评论 -
算法套路学习笔记(第一章)
前言现在是2021-11-21,开始使用东哥的算法小抄进行算法的学习,这篇文章就算是我的读书笔记吧,侵权删。1.1 基础语法使用备份1.哈希表 unordered_map常用方法:①size_type count(const key_type& key);返回哈希表中key出现的次数,因为哈希表不会出现重复的键,所以该函数只可能返回0或者1可以用来判断键key是否存在于哈希表中②size_type erase(const key_type& key)通过key来清除哈希表中原创 2021-11-23 21:36:52 · 830 阅读 · 1 评论 -
2021SCAU数据结构复习 实验5
题1:8610 顺序查找题目描述输入格式第一行:元素个数n第二行:依次输入n个元素的值第三行:输入要查找的关键字key的值输出格式输出分两种情形:1.如果key值存在,则输出其在表中的位置x(表位置从1开始),格式为The element position is x.2.如果key值不存在输出:“The element is not exist.”输入样例61 3 5 7 9 105输出样例The element position is 3.AC代码#include <原创 2021-06-15 22:34:10 · 572 阅读 · 2 评论 -
2021SCAU数据结构复习 实验六 (各种排序算法)-实验7
题1: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原创 2021-06-14 21:23:55 · 2147 阅读 · 2 评论 -
2021SCAU数据结构复习(实验1-实验3)
题1: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 inttyped原创 2021-06-02 22:52:59 · 4489 阅读 · 2 评论 -
POJ 3278抓住那头牛
广度优先搜索例题农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式:1、从X移动到X-1或X+1,每次移动花费一分钟2、从X移动到2*X,每次移动花费一分钟假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?...原创 2021-04-27 19:29:17 · 185 阅读 · 0 评论 -
18724 二叉树的遍历运算
Description二叉树的三种遍历都可以通过递归实现。如果我们知道一棵二叉树的先序和中序序列,可以用递归的方法求后序遍历序列。输入格式两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串,表示树的中序遍历。树的结点一律用小写字母表示。输出格式一个字符串,树的后序序列。输入样例abcdebcade输出样例cbeda方法1:利用先序遍历和中序遍历的数据来确定整棵树的结构,然后根据这棵树的结构来进行一次后序遍历即可。那么应该如何来进行这样的操作呢?首先先明确先序遍历和中序遍历的原创 2021-04-24 11:33:29 · 614 阅读 · 0 评论 -
C语言课程设计(活动管理程序)
第一个问题:如何限制用户输入长度?原创 2021-04-17 23:31:33 · 2151 阅读 · 3 评论 -
分苹果问题
题目可以描述为,现在有M个苹果,有N个盘子,允许有的盘子是空的,请问会有几种分苹果的方法?本题的关键是:盘子可以是空的,可以是非空的,根据这一点我们可以知道,每一种方法的状态是,有空盘和没有空盘,那么在一种状态下,可以通过改变每个盘子中苹果的个数来改变每一种方法,来新得到一种方法,那么也就是说通过每一次的递归,由上次的全局状态进行微调,得到当前的局部状态,在下一次的递归中由当前的局部状态来得到新的局部状态,直到遇到递归边界,那么递归边界是什么呢?苹果都放完了,不可能还有别的局部状态的时候,那么这时候就是原创 2021-04-13 20:06:53 · 883 阅读 · 2 评论 -
走楼梯问题
题目描述为,现在有一个人,需要到达m阶的楼梯,这个人可以选择一次迈一步,或者一次迈两步,问:在到达目的地之前,会有几种方式到达目的地?(注意:比如要到达第4层,那么可以有1 1 2 或者2 1 1这些都可以看做是不一样的)题目很简单,需要做的是递归分治,每一次的前进都可以有两种选择,选择迈两步或者迈一步,递归边界是m为0或者是m<0,而且方法种数是根据迈一步和迈两步之和求出来的。#include <iostream>using namespace std;int Stairs(原创 2021-04-13 19:39:04 · 195 阅读 · 0 评论 -
N皇后问题
N皇后问题可以简述为,在N*N的棋盘上,有N个皇后,为了确保这些皇后不会互相攻击,需要这些皇后不在同一行,同一列,同一对角线上,请用递归的方法来解决问题。思路:考虑到每个皇后的摆放决定都是同一个规则,那么也就是说是把庞大的问题逐步缩小分治直到达到target。需要注解的是,由于皇后是逐行放置的,所以横向的就可以不用考虑,而竖向的和斜向的就需要考虑,这一点我们在设计判断语句的时候可以利用起来,那么对于行,我们只需要判断当前的列数与前面那一个的列数是不是一样的就可以了,但是对于对角线的,我们发现比较难判断,原创 2021-04-13 19:28:52 · 446 阅读 · 0 评论 -
18712递归实现组合
18712 递归实现组合时间限制:1000MS 代码长度限制:10KB提交次数:0 通过次数:0题型: 编程题 语言: 不限定Description找出从自然数1、2、……、m中任取k个数的所有组合,组合中字典序大的先输出。例如m=5,k=3,应输出1 2 31 2 41 2 51 3 41 3 51 4 52 3 42 3 52 4 53 4 5输入格式两个整数m和k,(1<=k<=m<=10)输出格式按字典序输出所有组合输入样例5 2原创 2021-03-28 09:22:00 · 393 阅读 · 0 评论 -
18713整数分解
18713 整数的分解时间限制:1000MS 代码长度限制:10KB提交次数:0 通过次数:0题型: 编程题 语言: 不限定Description输出一个正整数n的分解形式。例如,当n=4时,输出:4=44=3+14=2+24=2+1+14=1+1+1+1共计 5 种形式。当n=7时,共有15种形式。当n=10时,共有42种形式。输入格式一个整数n(1<=n<=10)。输出格式n的全部分解形式,注意分解式中数字值大的排在前面,如第一个数字值相同,那么比较第原创 2021-03-28 09:21:31 · 434 阅读 · 0 评论 -
出栈序列的合法性判定
Description每年期末考试必考题目。一个栈的进栈序列是a、b、c、d、e,则可能的出栈序列是( )。A.abecd B.decba C.dceab D.cabde输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个原创 2021-03-25 15:25:34 · 965 阅读 · 0 评论 -
数据结构习题(前缀后处理大规模数据降低时间复杂度的样例)
411原创 2021-03-18 21:09:08 · 380 阅读 · 0 评论 -
POJ3704 括号匹配问题
在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号。不能匹配的左括号用"$“标注,不能匹配的右括号用”?"标注.输入格式输入包括多组数据,每组数据一行,包含一个字符串,只包含左右括号和大小写字母,字符串长度不超过100。输出格式对每组输出数据,输出两行。第一行包含原始输入字符,第二行由"","?"和空格组成,原创 2021-03-09 12:27:47 · 650 阅读 · 1 评论 -
二叉树的特点及基本操作
树:是有n个结点的有限集‘当n=0的时候,树是空数。当n>0的时候,那么满足以下两个条件:①有且仅有一个特定的被称为根的结点。②其余结点可分为m(m>=0)个互不相交的有限集T1、T2、T3…Tm,其中每一个集合本身又是一棵树,并称为根的子树。显然,树是一个递归的定义。基本术语的总结:结点:数据元素以及指向子数的分支根结点:非空树中,无前驱结点的结点、结点的度:结点拥有的子树数。树的度:树内各结点的度的最大值叶子(终端)结点:非空数中,无后继结点的结点。根结点以外的分支结点被称原创 2021-02-20 22:25:38 · 607 阅读 · 0 评论 -
串的基本特点和研究操作
串是由零个或多个字符组成的有限序列,又叫字符串。子串与主串,串中任意个数的连续字符组成的子序列称为该串的子串,,相应的,包含子串的串称为主串。关于串的比较,简单来说,就是要当两个串的长度相同而且每一个位置上的字母都相同的时候,两个串才是相等的。同时,如果一个串是另一个串的子串,那么显然,主串比子串大。具体的比较步骤是,从第一位开始,按照字典序顺序,直到找到一个位置,一个串上的字母字典序大于另一个对应位置的字母的字典序,这时候就产生了差异,字典序越往后的,字符串越大。下面来介绍子串的定位操作,也常被原创 2021-02-11 11:57:08 · 2133 阅读 · 0 评论 -
栈的应用(表达式求值)
利用栈编写表达式求值程序:输入含有“+”、“-”、“*”、“/”四则运算的表达式,其中负数要用(0-正数)表示,并以=结束。要求输出表达式的值(两运算符号的优先关系见教材表3.1)。输入格式第一行:一个算术表达式输出格式第一行:算术表达式的值输入样例3*(9-7)=输出样例6...原创 2021-02-05 23:11:26 · 789 阅读 · 1 评论 -
栈的应用(行编辑程序)
Description 利用栈编写简单的行编辑程序:接受用户从终端输入的程序或数据,在输入过程中,允许用户输入出差错,并在发现有误时可以及时更正。例如:当用户发现刚刚键入的一个字符是错的时,可以补进一个退格符“#”,以表示前一个字符无效;如果发现当前键入的行内差错较多或难以补救,则可以键入一个退行符“@”,以表示当前行中的字符均无效。例如:假设从终端接受了这样两行字符: whli##ilr#e (s#*s) outcha@putchar(*s=#++); 则实际有效的是下列两行: while (*s) pu原创 2021-02-05 11:23:40 · 851 阅读 · 0 评论 -
栈的运用(括号匹配检验)
8586 括号匹配检验时间限制:1000MS 代码长度限制:10KB提交次数:4447 通过次数:1864题型: 编程题 语言: G++;GCCDescription 利用栈编写满足下列要求的括号匹配检验程序:假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,即()或[([][])]等为正确的格式,[(]或([())或(()])均为不正确的格式。输入一个包含上述括号的表达式,检验括号是否配对。本题给出部分check()函数,要求将check()函数补充完整,并完成整个程序。ty原创 2021-02-05 10:38:08 · 384 阅读 · 0 评论 -
队列的特点及基本操作
队列:队列也是一种特殊的线性表,与栈不同的是,栈的插入和弹出都是在栈顶,而队列的入队是在表尾(队尾),出队是在表头(队头)。特点是先进先出(First In First Out),头删尾插队列的基本表现形式#define OK 1#define ERROR 0typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等typedef int QElemType;#define MAXQSIZE 100 // 最大队列长度(对于循环队列,最大队列长度要原创 2021-02-04 23:04:09 · 8119 阅读 · 1 评论 -
栈的特点及其基本操作
栈是一个特殊的线性表,是限定在一端(通常是表尾)进行插入和删除操作的线性表原创 2021-02-04 16:30:24 · 5284 阅读 · 0 评论 -
线性表->顺序表进阶操作
线性表的合并:线性表的合并可以看成是两个集合,其中可以重复元素,当两个集合中有相同元素的时候,合并完成之后的表c值能含有一个重复元素。算法实现:以表b中的一个元素作为哨兵,遍历表a中的所有元素,如果a中没有出现与哨兵相同的元素,那么将哨兵插入表a的末尾中去。void ListUnion(SqList &La,SqList Lb){ int La_len=ListLength(La); int Lb_len=ListLength(Lb); int e=0; for原创 2021-02-02 14:30:21 · 363 阅读 · 0 评论 -
线性表的顺序表示及其基本函数操作
线性表:线性表是零个或多个数据元素构成的线性序列,可以记为a0,a1,a2…an-1;注:n表示的是线性表的长度,当n=0的时候并不是表示线性表不存在,而是表示表为空。相关概念:直接前驱:某一数据元素的所对应的前一个元素直接后继:某一数据元素的所对应的后一个元素值得注意的是,a0是表的第一个元素,所以没有直接前驱,an-1是表的最后一个元素,所以没有直接后继。...原创 2021-01-31 15:39:31 · 2034 阅读 · 0 评论 -
18440 走迷宫2 (DFS)
问题引出:输入一个数n,输出1~n的全排列,在运行时间十分有限的情况下(不能直接暴力枚举),该如何解决这个问题呢?假设现在有3个号码牌,要将其放入有序地三个盒子中,并且每个盒子有且只能放一个号码牌,问有几种放法?代码分解:1.往盒子中放入号码牌的操作:for(i=1;i<=n;i++){ a[step]=i;//将i号扑克牌放入第step个盒子中。}数组a是用来表示盒子的,step表示当前正处在第step个小盒子的前面,a[step]=i表示的就是把i号扑克牌放入到第step个原创 2020-12-19 14:17:24 · 878 阅读 · 1 评论