![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
suxiaorui
孤独与我 随风相伴
展开
-
acwing——836. 合并集合
836. 合并集合一共有n个数,编号是1~n,最开始每个数各自在一个集合中。现在要进行m个操作,操作共有两种:“M a b”,将编号为a和b的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作;“Q a b”,询问编号为a和b的两个数是否在同一个集合中;输入格式第一行输入整数n和m。接下来m行,每行包含一个操作指令,指令为“M a b”或“Q a b”中的一种。输出格式对于每个询问指令”Q a b”,都要输出一个结果,如果a和b在同一集合内,则输出“Yes”,否则输出“No原创 2020-07-20 22:24:31 · 500 阅读 · 0 评论 -
acwing——835. Trie字符串统计
835. Trie字符串统计维护一个字符串集合,支持两种操作:“I x”向集合中插入一个字符串x;“Q x”询问一个字符串在集合中出现了多少次。共有N个操作,输入的字符串总长度不超过 105,字符串仅包含小写英文字母。输入格式第一行包含整数N,表示操作数。接下来N行,每行包含一个操作指令,指令为”I x”或”Q x”中的一种。输出格式对于每个询问指令”Q x”,都要输出一个整数作为结果,表示x在集合中出现的次数。每个结果占一行。数据范围1≤N≤2∗104输入样例:5I abc原创 2020-07-20 21:55:40 · 473 阅读 · 0 评论 -
中缀表达式快速转换成前缀表达式和后缀表达式的快速方法
中缀表达式快速转换成前缀表达式和后缀表达式的方法比如中缀表达式:( a + b ) * c * ( d - e / f )步骤一:按照运算的先后顺序将表达式全部都添加上括号(原本有括号的就不用再加了)( a + b ) * c * ( d - e / f ) ——> ((( a + b )* c ) * ( (d - ( e / f ) ) ) )步骤二:如果要转换成后缀表达式,则从里到外将所有运算符都拿到右括号的右边,如果是转换成前缀表达式,则从里则从里到外将所有运算符都拿到左括号的左边原创 2020-05-16 17:15:30 · 1314 阅读 · 0 评论 -
王道数据结构—线性表的链式表示应用题1
线性表的链式表示应用题1题目一设计一个递归算法,删除不带头结点的单链表 L 的所有值 为 x的结点算法思路:终止条件:若L为空表,则返回。递归主体:若 L->data == x,删除此结点,继续递归下一个结点。若 L->data != x ,递归下一个结点。 算法需要解除一个递归工作栈,深度为 O(n),时间复杂度为 O(n)。程序代码:void Del_x(LinkList &L, Elemtype x)//递归实现在单链表L中删除值为x的结点 { LNode原创 2020-05-10 23:52:40 · 470 阅读 · 1 评论 -
王道数据结构—线性表的顺序表示应用题2
数据结构—线性表的顺序表示应用题-11 从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行。算法思想:搜索整个顺序表,查找最小值元素并记住其位置,搜索结束后用最后一个元素填补空出的原最小值元素的位置。代码://删除顺序表中最小值元素结点,并通过引用型参数 x 返回其值//若删除成功,则返回true;否...原创 2020-05-07 18:46:25 · 313 阅读 · 0 评论 -
王道数据结构—线性表的顺序表示应用题1
数据结构—线性表的顺序表示应用题-11 从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行。算法思想:搜索整个顺序表,查找最小值元素并记住其位置,搜索结束后用最后一个元素填补空出的原最小值元素的位置。代码://删除顺序表中最小值元素结点,并通过引用型参数 x 返回其值//若删除成功,则返回true;否...原创 2020-05-05 14:26:22 · 365 阅读 · 0 评论 -
Leetcode—— 107. 二叉树的层次遍历 II
107. 二叉树的层次遍历 II给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回其自底向上的层次遍历为:[[15,7],[9,20],[3]]来源:力扣(LeetCode)链接:https://leet...原创 2020-03-12 21:26:34 · 193 阅读 · 0 评论 -
Leetcode—— 102. 二叉树的层次遍历
102. 二叉树的层次遍历给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树: [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回其层次遍历结果:[[3],[9,20],[15,7]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems...原创 2020-03-12 21:15:23 · 211 阅读 · 0 评论 -
数据结构-双链表基本操作-C语言代码
双链表基本操作1.头插法建立双链表2.尾插法建立双链表3.修改结点4.插入结点5.删除结点1.头插法建立双链表#include<stdio.h>#include<stdlib.h>//双链表的结构定义 typedef struct DNode{ int data; struct DNode *prior, *next;}DNode, *DLin...原创 2020-03-02 15:32:22 · 868 阅读 · 0 评论 -
数据结构-单链表基本操作-C语言代码
单链表基本操作1.头插法建立单链表2.尾插法建立单链表3.查找结点3.修改结点4.插入结点5.删除结点本篇只有c语言代码,具体思路讲解请看这篇博客:数据结构-线性结构-单链表1.头插法建立单链表#include<stdio.h>#include<stdlib.h>//单链表的结构定义 typedef struct LNode{ int data...原创 2020-01-22 19:51:58 · 66801 阅读 · 28 评论 -
数据结构-顺序表基本操作-C语言代码
#顺序表-初始化#include<stdio.h>#include<stdlib.h>#define maxSize 100//顺序表的结构体定义 typedef struct { int *data; //存放顺序表元素的数组 int length; //存放顺序表的长度 }Sqlist; //顺序表类型的定义 //初始化顺序表 Sql...原创 2020-01-22 13:37:06 · 11765 阅读 · 6 评论 -
Leetcode—— 225.用队列实现栈
225.用队列实现栈使用队列实现栈的下列操作:push(x) -- 元素 x 入栈pop() -- 移除栈顶元素top() -- 获取栈顶元素empty() -- 返回栈是否为空注意:你只能使用队列的基本操作-- 也就是push to back, peek/pop from front, size, 和is empty这些操作是合法的。你所使用的语言也许不支持队列。你...原创 2019-12-19 22:32:50 · 156 阅读 · 0 评论 -
Leetcode—— 232. 用栈实现队列
232. 用栈实现队列使用栈实现队列的下列操作:push(x) -- 将一个元素放入队列的尾部。pop() -- 从队列首部移除元素。peek() -- 返回队列首部的元素。empty() -- 返回队列是否为空。示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2); queue.peek(); /...原创 2019-12-19 22:24:35 · 125 阅读 · 0 评论 -
MOOC数据结构与算法Python版-期末作业编程题
1 二叉树路径(10分)题目内容:给定一个二叉查找树的节点插入顺序,请重新构建这个二叉查找树,并按从左至右顺序返回所有根节点至叶节点的路径输入格式:一行整数,以空格分隔注:测试用例中不包含重复的数字输出格式:按照叶节点由左至右顺序,以“根节点值->节点值->...->叶节点值”输出每条路径,每行输出一条输入样例:5 2 6 1...原创 2019-12-09 00:08:26 · 3405 阅读 · 1 评论 -
MOOC数据结构与算法Python版-第九周编程作业
1 二叉树复原(10分)题目内容:给定一种序列化二叉树的方式:从根节点起始按层次遍历二叉树所有“可能”存在节点的位置:若该位置存在节点,则输出节点值,并在下一层相应增加两个可用位置;否则输出None,且不增加下一层的可用位置。例如"[5, 4, 7, 3, None, 2, None, -1, None, 9]"是下图所示的二叉树序列化的结果:其中红色箭头对所有的None进行了...原创 2019-12-04 12:30:32 · 2582 阅读 · 7 评论 -
MOOC数据结构与算法Python版-第八周编程作业
1 字符串中所有重排(10分)题目内容:给定一个字符串s与待查找字符串p,请给出使得s[i:i+len(p)]是p的一个字母重排的所有下标i题目保证字符串p非空输入格式:两行字符串,第一行为s,第二行为p输出格式:所有满足条件的下标从小到大排列,以空格分隔输出若无对应下标,则输出"none"输入样例:cbaebabacdabc...原创 2019-12-04 00:04:12 · 2487 阅读 · 4 评论 -
MOOC数据结构与算法Python版-第十二周编程作业
1 先修课(10分)题目内容:有 n 门课程要选,其编号分别由 0 至 n-1每个课程都有一些需要提前学完的先修课程:例如,假设在学习课程 0 前需要先学习课程 1 ,我们用一个先修关系对[0, 1]来表示这种 “后学习课程,先修课程” 的关系现给定一系列课程与若干先修关系,请判断是否存在一个方案可以学完所有课程输入格式:输入分为两行,第一行为一个整数,表示课程的总数...原创 2019-12-03 13:45:10 · 1678 阅读 · 1 评论 -
MOOC数据结构与算法Python版-第十一周编程作业
1 找到小镇的法官(10分)题目内容:在一个小镇里,按从 1 到 N 标记了 N 个人。传言称,这些人中有一个是小镇上的秘密法官。如果小镇的法官真的存在,那么: 小镇的法官不相信任何人。 每个人(除了小镇法官外)都信任小镇的法官。 只有一个人同时满足属性 1 和属性 2 。 给定列表 trust,该列表由信任对 trust[i] = [a, b...原创 2019-12-02 21:46:01 · 1527 阅读 · 0 评论 -
归并排序
归并排序下面是归并排序演示过程:算法思路:1.如果给的数组只有一个元素的话,直接返回(也就是递归到最底层的一个情况)2.把整个数组分为尽可能相等的两个部分(分)3.对于两个被分开的两个部分进行整个归并排序(治)4.把两个被分开且排好序的数组拼接在一起代码:/* L = 数组起始位置, M = 数组中间的位置, R = 数组终点位置*/#include...原创 2019-06-05 22:58:44 · 197 阅读 · 0 评论 -
冒泡排序
冒泡排序下面是冒泡排序过程演示:算法思路:每次选择两个元素,按照需求进行交换(比如需要升序排列的话,把较大的元素放在靠后一些的位置),循环 n 次(n 为总元素个数),这样小的元素会不断 “冒泡” 到前面来,时间复杂度O(n^2)。代码:#include<stdio.h>void Swap(int arr[], int i, int j) //交换函数 ...原创 2019-06-05 23:37:12 · 1031 阅读 · 0 评论 -
插入排序
插入排序下面是插入排序演示过程:算法思路:每次选择一个元素,并且将这个元素和整个数组中的所有元素进行比较,然后插入到合适的位置代码:#include<stdio.h>void insertion_sort(int arr[], int N){ int i, j; for(i=1; i<N; i++) { int temp = arr[...原创 2019-06-06 00:01:49 · 255 阅读 · 0 评论 -
快速排序
快速排序简称快排,时间复杂度并不固定,如果在最坏情况下(元素刚好是反向的)速度比较慢,达到 O(n^2)(和选择排序一个效率),但是如果在比较理想的情况下时间复杂度 O(nlogn)。快排也是一个分治的算法,快排算法每次选择一个元素并且将整个数组以那个元素分为两部分,根据实现算法的不同,元素的选择一般有如下几种:永远选择第一个元素 永远选择最后一个元素 随机选择元素 取中间值整...原创 2019-06-07 15:16:13 · 434 阅读 · 0 评论 -
MOOC数据结构与算法Python版-第十二周测验
1 单选(2分)下列关于Dijkstra算法的说法错误的有 C A.Dijkstra算法的使用条件,要求整个图架构与所有边的权重均已知。 B.当图中存在负权边时,Dijkstra算法不一定能求出源点到所有点的最短路。 C.当图中存在负权边时,Dijkstra算法必定不能求出源点到所有点的最短路 D.当图中不存在负权边时,Dijkstra算法能求出每对顶点间最...原创 2019-11-30 22:50:41 · 2463 阅读 · 1 评论 -
MOOC数据结构与算法Python版-第十一周测验
1 单选(2分)设无向图的顶点个数为n,且任何边的两端不是相同顶点,则该图最少有( )条边。D A.n-1 B.n(n-1)/2 C.n(n+1)/2 D.0 2 单选(2分)设无向图的顶点个数为n,且任何边的两端不是相同顶点,则该图最多有( )条边。B A.n-1 B.n(n-1)/2 C.n(n+1)/2 ...原创 2019-11-30 22:25:19 · 2376 阅读 · 0 评论 -
MOOC数据结构与算法Python版-第十周测验
1 单选(2分)如下哪个树正确地显示了按顺序插入键值5,30,2,40,25,4后的二叉搜索树? D A.其它选项都不对 B. C. D. 2 单选(2分)对以下这棵树:操作,欲把根节点11删除,remove方法做完后新的根节点是(),其右子树的高度是()。A A. 12,2 B. 15,1...原创 2019-11-30 22:20:17 · 2233 阅读 · 0 评论 -
MOOC数据结构与算法Python版-第八周测验
1 单选(2分)假设你将下列数据:113 , 117 , 97 , 100 , 114 , 108 , 116 , 105 , 99根据开放定址的线性探测法,填入长度为11的散列表中,且散列函数选为h(n)=n%11哪一个选项最好地表达了填入数据之后散列表的状况?D A. 100, __, __, 113, 114, 105, 116, 117, 97, 108, 99...原创 2019-11-04 09:10:14 · 2583 阅读 · 1 评论 -
MOOC数据结构与算法Python版-第七周编程作业
1 快速排序主元(10分)题目内容:著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元(中值),通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边。 给定划分后的N个互不相同的正整数的排列,请问有多少个元素可能是划分前选取的主元?例如给定的排列是[1, 3,2,4,5]。则: 1 的左边没有元素,右边的元素都比它大,所以它...原创 2019-11-02 12:19:06 · 2684 阅读 · 0 评论 -
MOOC数据结构与算法Python版-第七周测验
1 单选(2分)以下关于冒泡和选择排序算法的叙述何者正确?B A. 平均时间复杂度上,冒泡排序的复杂度较低 B. 其它选项皆不正确。 C. 平均时间复杂度上,选择排序的复杂度较低 D. 空间复杂度上,选择排序的复杂度较低 解析:B、两者均有O(N^2)的时间复杂度和O(1)的空间复杂度。2 单选(2分)以下关于归并和快速排序算...原创 2019-10-27 12:34:50 · 2613 阅读 · 0 评论 -
MOOC数据结构与算法Python版-第六周编程作业
1 铺瓷砖(10分)题目内容:给定一个长度为N的区域,及4种不同长度的瓷砖:灰瓷砖(长为1格)、红瓷砖(长为2格)、绿瓷砖(长为3格)与蓝瓷砖(长为4格),求所有不同的铺满整个区域的方法数。例如:当N=5时,共有15种铺满区域的方法,示意图如下:输入格式:一个自然数N输出格式:一行数字,表示不同的方法总数输入样例:5输出样例:...原创 2019-10-26 08:37:59 · 3130 阅读 · 5 评论 -
MOOC数据结构与算法Python版-第五周编程作业
1 进制转换(10分)题目内容:给定一个M进制的数,请将其转换为N进制并输出输入格式:两行,第一行为空格分隔的两个数字,分别为10进制表示的M与N;其中M, N均满足2 ≤ M、N ≤ 36第二行为待转换的数字,其中每位超过9的部分从10至36分别用大写字母A-Z表示;输入数据保证其中最大位数对应数字不超过M输出格式:一行字符串,表示转换后的N进制数...原创 2019-10-21 23:08:11 · 3268 阅读 · 3 评论 -
MOOC数据结构与算法Python版-第六周测验
1 单选(2分)下列哪个算法使用到了分治策略?D A. 迷宫寻路 B. 单词最短编辑距离 C. 博物馆大盗问题 D. 二分查找 2单选(2分)函数值缓存最适合使用哪种Python中的数据类型?B A. 集合 B. 字典 C. 栈 D. 列表 3 单选(2分)已知数列G(x)满...原创 2019-10-20 13:43:54 · 2858 阅读 · 0 评论 -
数据结构-树-树的存储结构
树的基本和常用操作树的存储结构之前存储结构说过顺序存储和链式存储结构,但是对于树这样一对多的结构,树中某个结点的孩子可以有很多个,无论按照哪种顺序将树中所有结点存储到数组中,结点的存储位置都无法直接反映逻辑关系,简单的顺序存储结构是不能满足树的实现要求的。不过充分利用顺序存储和链式存储结构的特点,完全可以实现对树的存储结构的表示,有三种不同的表示法:双亲表示法、孩子表示法、孩子兄弟...原创 2019-08-05 17:20:16 · 1049 阅读 · 0 评论 -
数据结构-树-基本概念
树的定义之前说的线性结构是一对一的关系,这里的树就是一对多的数据结构。树(Tree)是n(n≥0)个结点的有限集。n=0时称为空树。在任意一棵非空树中:(1)有且仅有一个特定的称为根(Root)的结点;(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集、、……、,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。树的定义其实用到了...原创 2019-08-04 19:18:21 · 374 阅读 · 0 评论 -
数据结构-栈与队列-队列
队列的定义队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出(First In First Out)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为对头。队列的抽象数据类型队列的顺序存储结构假设一个队列有n个元素,则顺序存储的队列需建立一个大于n的数组,并把队列的所有元素存储在数组的前n个单元,数组下标为0的一...原创 2019-07-31 12:02:53 · 512 阅读 · 0 评论 -
数据结构-线性结构-静态链表
静态链表存储结构如果用数组来代替指针,来描述单链表,让数组的元素都是由两个数据域组成,data 和 cur。也就是数组的每个下标都对应一个 data 和一个 cur。数据域 data 用来存放数据元素,也就是通常要处理的数据,而游标 cur 相当于单链表中的 next 指针,存放该元素的后继在数组中的下标。把这种用数组描述的链表叫做静态链表,也可以叫做游标实现法。一般会把数组建立的大一点,...原创 2019-07-25 21:54:30 · 300 阅读 · 0 评论 -
数据结构-线性结构-单链表
单链表的读取在线性表的顺序存储结构中,我们要知道任意一个元素的存储位置是很容易的,但是在单链表中,实现获取第i个元素的数据操作GetElem,就需要点想法。思路:声明一个结点 p 指向链表第一个结点,初始化 j 从1开始 当 j < i 时,就遍历链表,让p的指针向后移动,不断指向下一个结点,j 累加1 若到链表末尾p为空,则说明第 i 个元素不存在 否则查找成功,返回结...原创 2019-07-24 16:00:55 · 4190 阅读 · 2 评论 -
数据结构-栈与队列-栈
栈的定义栈(stack)是限定仅在表尾进行插入和删除操作的线性表。把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构。栈的插入操作,叫作进栈,也称压栈、入栈。类似子弹入弹夹。栈的删除操作,叫作出栈,也有的叫作弹栈。类似与弹夹中的子弹出夹。栈...原创 2019-07-28 22:02:33 · 326 阅读 · 0 评论 -
数据结构-线性结构-概念
线性表的类型定义定义:零个或多个数据元素的有限序列。如:26个英文字母的字母表是一个线性表,一个数据元素可以由若干个数据项组成,在这种情况下,常把数据元素称为记录,含有大量记录的线性表又称文件。同一线性表中的元素必定具有相同的特性,即属同一数据对象,相邻数据元素之间存在着序偶关系。若将线性表记为(,... ,,,,... ,),则表中领先于,领先于,称是的直接前驱...原创 2019-07-18 15:19:57 · 696 阅读 · 0 评论 -
数据结构-算法分析
算法定义和特性说到算法,可谓是说也说不尽啊。什么是算法呢?算法是描述解决问题的方法。如今对算法的定义是:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有序序列,并且每条指令表示一个或多个操作。算法的5个基本特性:输入、输出、有穷性、确定性和可行性。输入输出:算法具有另个或者多个输入,算法至少有一个或者多个输出。有穷行:指算法在执行有限的步骤之后,自动结束而不会在出...原创 2019-07-09 11:33:19 · 969 阅读 · 0 评论 -
数据结构-基本概念和术语
要开始数据结构的学习了,加油!数据(data):是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。并且数据不仅仅包括整型、实型等数值类型,还包括字符及声音、图像、视频等非数值类型。数据元素(data element):是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。比如:在饮料中,什么是数据元素呢?冰红茶、可乐、脉动等就是饮料的...原创 2019-06-15 22:13:33 · 793 阅读 · 0 评论