
数据结构
Immature_7
努力努力再努力
展开
-
408计算机考研--数据结构--2020年统考真题(C语言)
2020年408统考真题(C语言)一、题目描述定义三元组(a,b,c)(a、b、c均为正数)的距离D=|a-b|+|b-c|+|c-a|。给定3个非空整数集合S1、S2、S3,按升序分别存储在3个数组中。请设计一个尽可能高效的算法,计算并输出所有可能的三元组(a,b,c)(a∈S1,b∈S2,c∈S3)中的最小距离。例如S1={-1,0,9},S2={-25,-10,10,11},S3={2,9,17,30,41},则最小距离为2,相应的三元组为(9,10,9)。二、算法的基本思想①使用Dmin记录原创 2021-08-24 19:06:04 · 3586 阅读 · 0 评论 -
408计算机考研--数据结构--排序模板(C语言)
数据结构–排序模板(C语言)1.插入排序–直接插入排序(稳定的排序算法)//折半插入排序--稳定排序。//时间复杂度:最好情况下:O(n)。最坏情况下:O(n^2);//空间复杂度:O(1)void InsertSort3(int* A,int numSize){ int i,j,low,high,mid,temp; for(int i=1;i<numSize;i++){ //找到前有序序列的当前数的插入位置 temp=A[i]; low=原创 2021-07-17 10:46:28 · 832 阅读 · 0 评论 -
408计算机考研--数据结构--2016年统考真题(C语言)
标题408数据结构–2016年统考真题(C语言)一、题目描述已知由n(n>=2)个正整数构成的集合A={ak|0<=k<n},将其划分为两个不相交的子集A1和A2,元素个数分别是n1和n2,A1和A2中的元素之和分别为S1和S2。设计一个尽可能高效的划分算法,满足|n1-n2|最小且|S1-S2|最大。要求:给出算法的基本设计思想。根据设计思想,采用C或C++语言描述算法,关键之处给出注释说明你所设计的算法的平均时间复杂度和空间复杂度。二、解决思路1. 暴力法–排序直接原创 2021-07-16 18:48:15 · 2739 阅读 · 0 评论 -
算法练习贴--75--在排序数组中查找元素的第一个和最后一个位置(C语言)
标题在排序数组中查找元素的第一个和最后一个位置(C语言)一、题目描述给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。(题目来源:力扣(LeetCode))进阶:你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?示例 1:输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]示例 2:输入:nums = [原创 2021-07-16 12:15:37 · 499 阅读 · 0 评论 -
算法练习帖--74--在排序数组中查找数字 I(C语言)
在排序数组中查找数字 I(C语言)一、题目描述统计一个数字在排序数组中出现的次数。(题目来源:力扣(LeetCode))示例 1输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: 0限制:0 <= 数组长度 <= 50000二、解决方法二分查找int search(int* nums, int numsSize, int target)原创 2021-07-16 11:57:48 · 183 阅读 · 0 评论 -
408计算机考研--数据结构--图的学习(C语言)
图的学习一、图的存储及BFS、DFS算法1.1、邻接矩阵法特点:无向图的邻接矩阵一定是一个对称矩阵(并且唯一)。因此,在实际存储邻接矩阵时只需存储上(或下)三角矩阵的元素。对于无向图,邻接矩阵的第i行(或第i列)非零元素(或非∞元素)的个数正好是顶点i的度TD(vi)。对于有向图,邻接矩阵的第i行非零元素(或非∞元素)的个数正好是顶点i的出度OD(vi);第i列非零元素(或非∞元素)正好是顶点i的入度ID(vi)。用邻接矩阵存储图,很容易确定图中任意两个顶点之间是否有边相连。但是,要确定图中原创 2021-07-15 08:29:39 · 905 阅读 · 0 评论 -
408计算机考研--数据结构--二叉排序树学习(C语言)
二叉排序树一、二叉排序树(创建、增删改查)学习#include<stdio.h>#include<stdlib.h>typedef struct BSTNode{ int key; struct BSTNode *lchild,*rchild;}BSTNode,*BSTree;//在二叉排序树插入关键字为k的新结点(递归实现),时间复杂度:O(h)-O(n)之间 int BST_Insert(BSTree &T,int k){ if(T==NULL){/原创 2021-07-09 19:03:09 · 286 阅读 · 0 评论 -
408计算机考研--数据结构--线索化二叉树学习(C语言)
线索化二叉树学习(C语言)一、线索二叉树的基本概念 传统的二叉链表存储仅能体现一种父子关系,不能直接得到结点在遍历中的前驱或后继。我们知道,在含n个结点的二叉树中,有n+1个空指针。利用这些空指针来存放其前驱或后继的指针,这样就可以使得我们在遍历二叉树时可以像遍历单链表那样方便。引入线索二叉树正是为了加快查找结点前驱和后继的速度。(有三种线索化二叉树,分别是先序线索化二叉树、中序线索化二叉树以及后序线索化二叉树)二、中序线索化二叉树创建、找前驱、找后继以及遍历#include<stdio.h原创 2021-07-08 18:01:23 · 663 阅读 · 0 评论 -
408计算机考研--数据结构--二叉树学习(C语言)
二叉树学习一、二叉树的前中后序递归遍历及应用(求树深度)#include<stdio.h>#inlcude<stdlib.h>typedef struct BiTNode{ int data; struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;//先序遍历void PreOrder(BiTree T){ if(T!=NULL){ visit(T);//访问根节点 PreOrder(T.lchild);//原创 2021-07-08 17:50:30 · 334 阅读 · 0 评论 -
算法练习贴--73--错误的集合(C语言)
错误的集合(C语言)一、题目描述集合 s 包含从 1 到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合 丢失了一个数字 并且 有一个数字重复 。给定一个数组 nums 代表了集合 S 发生错误后的结果。请你找出重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。(题目来源:力扣(LeetCode))示例 1:输入:nums = [1,2,2,4]输出:[2,3]示例 2:输入:nums = [1,1]输出:[1,2]原创 2021-07-05 18:49:24 · 295 阅读 · 0 评论 -
408计算机考研--数据结构--队列学习(C语言)
队列学习(C语言)一、队列的顺序存储方式#include<stdio.h>#include<stdlib.h>#define MaxSize 10typedef struct SqQueue{ int data[MaxSize];//存储队列数据 int front,rear;//队头,队尾指针 }SqQueue; //初始化队列 void Init_SqQueue(SqQueue &Q){ Q.front=Q.rear=0;}//判队空boo原创 2021-07-03 16:14:37 · 284 阅读 · 0 评论 -
408计算机考研--数据结构--栈学习(C语言)
栈学习(C语言)一、栈的基本概念 栈(Stack)是只允许在一端进行插入或删除操作的线性表。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。栈顶(top):线性表允许进行插入和删除的那一端。栈底(Bottom):固定的,不允许进行插入和删除的另一端。空栈:不含任何元素的空表。二、栈的顺序存储结构#include<stdio.h>#include<stdlib.h> #define MaxSize 10 //定义栈中元素的最大个数typed原创 2021-07-02 22:23:05 · 793 阅读 · 2 评论 -
408计算机考研--数据结构--快慢指针学习(C语言指针)
快慢指针学习(C语言指针)一、判断环形链表1.1、题目描述给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。力扣(LeetCode)进阶:你能用 O(1)(原创 2021-07-02 18:04:15 · 879 阅读 · 2 评论 -
算法练习帖--72--重排链表(C语言)
重排链表一、题目描述给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。(题目来源:力扣(LeetCode))示例 1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3原创 2021-07-02 17:06:19 · 648 阅读 · 0 评论 -
算法练习帖--71--反转链表(C语言)
反转链表一、题目描述定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。(题目来源:力扣官网)示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL 限制:0 <= 节点个数 <= 5000二、解决方法1.头插法struct ListNode* reverseList(struct ListNode* head){ if(head==NULL|原创 2021-07-01 23:12:05 · 193 阅读 · 1 评论 -
408统考真题--线性表(2013年)
[2013统考真题]已知一个整数序列A=(a0,a1,···,an-1),其中0<=ai<n(0<=i<n)。若存在ap1=ap2=···=apm=x且m>n/2(0<=pk<n,1<=k<=m),则称x为A的主元素。例如A=(0,5,5,3,5,7,5,5),则5为主元素;又如A=(0,5,5,3,5,1,5,7),则A中没有主元素。假设A中的n个元素保存在一个一维数组中,请设计一个尽可能高效的算法,找出A的主元素。若存在主元素,则输出该元素;否则输原创 2021-07-01 21:35:13 · 1034 阅读 · 0 评论 -
算法练习贴--70--寻找两个正序数组的中位数(C语言)
寻找两个正序数组的中位数(C语言)一、题目描述给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。(题目来源:力扣(LeetCode))示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数原创 2021-06-30 23:38:40 · 1143 阅读 · 2 评论 -
408计算机考研--数据结构--线性表学习(C语言)
线性表的学习1.线性表的顺序表示–顺序表1.1、顺序表的定义–静态分配#include <stdio.h>#define MaxSize 10 //定义最大长度 typedef struct{ int data[MaxSize];//用数组存储数据元素 int length;//顺序表的当前长度 }SeqList;//顺序表的类型定义 //基本操作--初始化一个顺序表void InitList(SeqList &L){ for(int i=0;i<Ma原创 2021-06-29 21:13:04 · 712 阅读 · 0 评论 -
数据结构和算法学习笔记七_图
数据结构和算法学习笔记七_图学习视频:尚硅谷韩老师Java讲解数据结构与算法一、基本介绍1.1、图的基本概念:图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称为顶点。如图:1.2、图的常用概念:顶点(vertex)边(edge)路径无向图:有向图:带权图:1.3、图的表示方式:图的表示方式有两种:二维数组表示(邻接矩阵);链表表示(邻接表)。邻接矩阵邻接矩阵是表示图形中顶点之间相邻关系的矩阵,对于n个顶点原创 2021-01-24 15:22:38 · 315 阅读 · 0 评论 -
数据结构和算法学习笔记六_树结构的实际应用(2)
数据结构和算法学习笔记六_树结构的实际应用(2)一、二叉排序树1.1、二叉排序树基本介绍二叉排序树:BST: (Binary Sort(Search) Tree), 对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。特别说明:如果有相同的值,可以将该节点放在左子节点或右子节点比如数据 (7, 3, 10, 12, 5, 1, 9) ,对应的二叉排序树为:1.2、二叉排序树创建和遍历代码实现:package com.lxf.binaryso原创 2021-01-10 18:10:50 · 221 阅读 · 0 评论 -
数据结构和算法学习笔记五_树结构的实际应用(1)
数据结构和算法学习笔记五_树结构的实际应用(1)一、 堆排序1.1、 堆排序基本介绍堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为 O(nlogn),它也是不稳定排序。堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆, 注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆大顶堆举例说明:小顶堆举例说明 :一原创 2021-01-10 18:06:02 · 248 阅读 · 0 评论 -
算法练习帖--27--变位词组(Java)
一、题目描述编写一种方法,对字符串数组进行排序,将所有变位词组合在一起。变位词是指字母相同,但排列不同的字符串。(题目来源:力扣(LeetCode))示例:输入: ["eat", "tea", "tan", "ate", "nat", "bat"],输出:[ ["ate","eat","tea"], ["nat","tan"], ["bat"]]说明:所有输入均为小写字母。不考虑答案输出的顺序二、解决方法字符排序package com.lxf.test;原创 2020-12-13 19:45:44 · 230 阅读 · 1 评论 -
数据结构和算法学习笔记三_搜索算法_哈希表
数据结构和算法学习笔记三_搜索算法_哈希表一、查找算法1.二分查找单个搜索:找有序序列的中间值,相等:返回这个下标不相等:中间值小于查找的值,就搜索右半边中间值大于查找的值,就搜索左半边多个搜索:找有序序列的中间值,相等:将这个值加入集合,然后向左和向右其它相等的值(因为这个序列是有序的)不相等:中间值小于查找的值,就搜索右半边中间值大于查找的值,就搜索左半边查找单个值package com.lxf.search;import java.util.Ar原创 2020-12-13 14:09:54 · 353 阅读 · 1 评论 -
算法练习帖--21--合并区间(Java)
package com.lxf;import java.util.LinkedList;import java.util.Queue;public class Merge {public static void main(String[] args) {int[][] result=merge(new int[][] {{8,10},{1,6},{15,18}});for (int i = 0; i < result.length; i++) {System.out.print("["+原创 2020-12-03 18:57:14 · 182 阅读 · 0 评论 -
算法练习帖--19--青蛙跳台阶问题(Java)
青蛙跳台阶问题一、题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。(类似斐波那契数列)注意:答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。(题目来源:力扣(LeetCode))二、提示:0 <= n <= 100三、实例示例 1:输入:n = 2输出:2示例 2:输入:n = 7输出:21示例 3:输入:n = 0输出:1四、解题思路原创 2020-11-26 22:11:16 · 279 阅读 · 0 评论 -
数据结构和算法学习笔记二_栈_递归(Java)
数据结构和算法学习笔记二_栈_递归(学自尚硅谷数据结构与算法30-49节(java版))一、栈(stack)1.栈简介先入后出,FILO插入和删除都是在一端操作,这一端就栈顶,相对的一端叫栈底2、栈的应用场景子程序的调用:在调用:在跳往子程序前,会先将下一个指令的地址存到堆栈中,直到子程序执行完后再将地址取出,以回到原来的程序中。处理递归调用:和子程序的调用类似,只是除了存储下一个指令的地址外,也将参数、区域变量、区域变量等数据存入堆栈中。表达式的转换【中缀表达式转后缀表达式原创 2020-11-22 16:28:07 · 390 阅读 · 0 评论 -
关于二叉树的前序、中序、后序三种遍历
关于二叉树的前序、中序、后序三种遍历二叉树遍历分为三种:前序、中序、后序,其中序遍历最为重要。为啥叫这个名字?是根据根节点的顺序命名的。比如上图正常的一个满节点,A:根节点、B:左节点、C:右节点,前序顺序是ABC(根节点排最先,然后同级先左后右);中序顺序是BAC(先左后根最后右);后序顺序是BCA(先左后右最后根)。比如上图二叉树遍历结果前序遍历:ABCDEFGHK中序遍历:BDCAEHGKF后序遍历:DCBHKGFEA分析中序遍历如下图,中序比较重要(java很多树排序是基于中转载 2020-09-02 08:34:39 · 208 阅读 · 0 评论