考研系列-408真题数据结构篇(10-17)

2024-08-29 05:44

本文主要是介绍考研系列-408真题数据结构篇(10-17),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 写在前面

此文章是本人在备考过程中408真题数据结构部分(2010年-2017年)的易错题及相应的知识点整理,后期复习也尝尝用到,对于知识提炼归纳理解起到了很大的作用,分享出来希望帮助到大家~

  • # 2010年

1.散列表处理冲突的方法

注意:装填因子的概念,可以得到散列表长度

注意:拉链法在分析查找长度时,通常只统计“关键字比较次数”,而链表“空指针的对比次数”不计入查找长度

后记:这个类型题目在2024年出现,此知识点很重要,预计2025年后几年会出现在选择题中。

  • # 2011年

1.注意审题:树转化为二叉树

2.图中回路的概念

要牢记下面概念!!!

回路:首尾结点相同

简单回路:除了首尾节点相同,中间节点不重复-不是简单路径

简单路径:在路径序列中,顶点不重复出现

3.归并排序相关算法


//四、归并排序
//空间复杂度主要来自辅助数组B,空间复杂度O(n)
//时间复杂度O(nlog(n)),归并趟数log(n)趟
//二路归并排序Merge操作,时间复杂度O(n)
void Merge(int A[],int low,int mid,int high){int i,j,k;//将A待排序数组放入B中for(k=low;k<high;k++){B[k]=A[k];}//i,j分别表示B中两个子列表的遍历指针,k指A数组中待放入元素的位置for(i=low,j=mid+1,k=i;i<=mid&&j<=high;k++){if(B[i]<=B[j]){A[k]=B[i];  //将较小的值复制到A中i++;}else{A[k]=B[j];j++;}}//最后把剩余已经有序的子列表数据直接放到A的最后即可while(i<=mid){A[k++]=B[i++];}while(j<=high){A[k++]=B[j++];}
}
//二路归并排序函数体:递归调用
//先通过子列表只有一个元素的两两组合,然后子元素扩展到两个、四个...直到全部
void MergeSort(int A[],int low,int high){if(low<high){int mid=(low+high)/2;       //从中间划分MergeSort(A, low, mid);     //对左半部分归并排序MergeSort(A, mid+1, high);  //对右半部分归并排序Merge(A,low,mid,high);      //对两个有序的子序列归并}
}

  • # 2012年

1.图的广度优先遍历

2.邻接矩阵存储有向图,拓扑排序

不唯一的意思是这个图可能存在的拓扑序列是不唯一的。而不是说代码按照邻接矩阵找到的拓扑序列是唯一的,这个和图的不同结构(邻接矩阵、邻接表)遍历区分开。

注:有向无环图一定存在拓扑序列,题目中问的是存不存在拓扑序列,和拓扑序列是否唯一。

3.B树的删除操作

4.最小生成树

(1)Prim算法:从某一顶点开始构建生成树,每次将距离这棵树代价最小的新顶点纳入生成树

(2)Kruskal算法:每次选择一条权值最小的边使这条边的两头连通(原本连通的不选),直到所有结点都连通;判断两个顶点是否属于一个集合,可以使用并查集来实现,并查集搜索时间复杂度:log_2E

  • # 2013年

1.时间复杂度计算

O(m+n)=O(max(m,n))

2.平衡二叉树

操作调整过程:

一般只考察删除叶子结点的情况!!!

3.二叉排序树

新插入的结点一定是叶子结点,当删除叶子结点然后再插入这个结点时,二叉排序树结构不变。

在题设中就已经设定了折半查找法以及元素排列顺序。第一问直接忽视了折半查找需要元素有序这一要求了!!!

  • # 2014年

1.B树的关键字数量要求

2.前中后缀表达式

3.树中结点度的定义

4.算法题

5.图相关的结构体定义

顶点、弧;(根据实际应用)

要求路由表中的路由项尽可能少,就要用到路由聚合的知识!!!

  • # 2015年

        较简单,略

  • # 2016年

1.拓扑排序

使用两个数组(一个是表示当前图中每个节点的度【这个度是实现计算好的】,另一个记录当前确定的拓扑序列)和一个栈实现排序

2.快排的代码和时间复杂度分析

快排相关知识点参考:

考研系列-数据结构第八章:排序(上)-CSDN博客

最核心的算法就是Partition操作:

//快排
//用第一个元素将待排序序列划分为左右两个部分,每一次划分确定一个元素位置
int Partition(int A[],int low,int high){int pivot=A[low];   //取第一个元素作中枢结点while(low<high){while(A[high]>=pivot){  //右侧元素大于中枢元素,不移动high--;}A[low]=A[high];         //将右侧小于中枢的元素移到左侧while(A[low]<=pivot){   //左侧元素小于中枢元素,不移动low++;}A[high]=A[low];         //将左侧大于中枢的元素移到右侧}A[low]=pivot;               //将中枢元素放到确定位置return low;                 //返回确定的中枢元素位置
}

快排函数体:递归调用Partition函数,每次调用Partition函数就确定一个元素的最终位置。

//快排函数体
void QuickSort(int A[],int low,int high){if(low<high){//跳出递归的条件int pivotpos=Partition(A, low, high);//划分QuickSort(A, low, pivotpos-1);      //划分左子表QuickSort(A, pivotpos+1, high);     //划分右子表}
}

只执行Partition的过程,时间复杂度平均是O(n),每次执行都不是从头开始,可以以前一次获得的pivot确定范围去寻找。

  • # 2017年

1.排序效率问题

2.Prim算法复习

从某一顶点开始构建生成树,每次将距离这棵树代价最小的新顶点纳入生成树

注意:是每次将距离这棵树的最短路径的结点纳入进来,而不是只从固定节点!!!!

3.树的遍历

注意要考虑括号,明确括号在中序遍历过程中什么时候输出

//二叉树先序遍历
void PreOrder(BiTree T){if(T!=NULL){visitNode(T);PreOrder(T->lchild);//递归遍历左孩子PreOrder(T->rchild);//递归遍历右孩子}
}//二叉树中序遍历
void InOrder(BiTree T){if(T!=NULL){InOrder(T->lchild);//递归遍历左孩子visitNode(T);InOrder(T->rchild);//递归遍历右孩子}
}//二叉树后序遍历
void PostOrder(BiTree T){if(T!=NULL){PostOrder(T->lchild);//递归遍历左孩子PostOrder(T->rchild);//递归遍历右孩子visitNode(T);}
}

# 后记

题目来源:计算机专业基础(408)

下载链接:

https://download.csdn.net/download/hehe_soft_engineer/89675116?spm=1001.2014.3001.5503

下一章:408真题数据结构部分(2018年-2023年)

这篇关于考研系列-408真题数据结构篇(10-17)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1117008

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0

《数据结构(C语言版)第二版》第八章-排序(8.3-交换排序、8.4-选择排序)

8.3 交换排序 8.3.1 冒泡排序 【算法特点】 (1) 稳定排序。 (2) 可用于链式存储结构。 (3) 移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时, 此算法不宜采用。 #include <stdio.h>#include <stdlib.h>#define MAXSIZE 26typedef int KeyType;typedef char In

GPT系列之:GPT-1,GPT-2,GPT-3详细解读

一、GPT1 论文:Improving Language Understanding by Generative Pre-Training 链接:https://cdn.openai.com/research-covers/languageunsupervised/language_understanding_paper.pdf 启发点:生成loss和微调loss同时作用,让下游任务来适应预训

Java基础回顾系列-第七天-高级编程之IO

Java基础回顾系列-第七天-高级编程之IO 文件操作字节流与字符流OutputStream字节输出流FileOutputStream InputStream字节输入流FileInputStream Writer字符输出流FileWriter Reader字符输入流字节流与字符流的区别转换流InputStreamReaderOutputStreamWriter 文件复制 字符编码内存操作流(

Java基础回顾系列-第五天-高级编程之API类库

Java基础回顾系列-第五天-高级编程之API类库 Java基础类库StringBufferStringBuilderStringCharSequence接口AutoCloseable接口RuntimeSystemCleaner对象克隆 数字操作类Math数学计算类Random随机数生成类BigInteger/BigDecimal大数字操作类 日期操作类DateSimpleDateForma