当前位置: 首页 > news >正文

考研复试问题总结-数据结构(1)

1. 说一下你对数据结构的理解

我觉得数据结构不仅仅是存数据的“容器”,更是一种思维方式。其实,在我们写程序时,经常会遇到各种各样的数据操作需求,而不同的数据结构能解决问题的效率和方式都不一样,所以选择合适的数据结构非常重要。

举个例子,如果你的程序主要操作是查找,那你可能会选用数组或者哈希表,因为它们支持快速的随机访问;但如果你的操作更多是插入和删除,链表或平衡树可能就更合适,因为它们在这些操作上的开销较低。同时,如果数据本身具有层次结构,比如文件系统或组织架构,那么用树结构能更直观地表示这种关系,而如果数据之间的关系比较复杂,比如社交网络的关系,那图就更适合。

另外,我们在选择数据结构时,还需要考虑算法的时间复杂度和空间复杂度。很多时候为了提高查找效率,我们可能会用更多的内存,比如哈希表就是这样一个典型的例子。还有,具体应用场景也会影响我们的选择:比如在实时性要求高的系统中,我们可能需要那些能提供稳定性能的数据结构;而在对数据动态扩展性要求高的场景中,灵活的结构如链表或者动态数组会更好。

总的来说,选择数据结构其实是一个权衡问题,需要根据具体操作(查找、插入、删除等)、数据规模、内存限制以及业务场景来做出合理选择,就像选工具一样,每种工具都有最适合的应用场景

2. 数据结构在计算机网络和操作系统中的应用

老师好,我从两个学科领域分别说明数据结构的核心应用:

计算机网络方面

  1. 路由表存储:使用哈希表快速定位目的 IP 对应的下一跳节点
  2. 流量控制:滑动窗口机制依赖循环队列管理待发送的数据包序列,接收方通过指针移动控制窗口大小

操作系统方面

  1. 进程调度:优先级队列(通常用堆实现)管理就绪进程
  2. 内存管理
    • 页表采用哈希表加速虚拟地址到物理页框的映射
    • 空闲内存管理使用双向链表合并相邻空闲块
  3. 同步机制:信号量通过等待队列(链表实现)记录阻塞进程,PV 操作涉及队列的入队/出队原子操作

3. 链表和数组区别


老师,我来简要说说链表和数组的区别:​

第一,存储结构不同。
数组存储在连续的内存块中,元素通过索引直接访问(时间复杂度 O(1)),但中间插入或删除元素需要移动后续所有元素(时间复杂度 O(n))。链表则由分散的内存节点组成,每个节点包含数据和指向下一个节点的指针,插入和删除只需调整相邻指针(时间复杂度O(1)),但访问第 k 个元素必须从头部开始遍历(时间复杂度O(n))。

第二,内存占用不同。​
数组需预分配固定大小,可能导致内存浪费(如申请过大空间但实际元素少);链表动态按需分配节点,内存利用率更高,但每个节点额外存储指针(约 4-8 字节),总空间略高于数组。此外,数组内存连续,缓存命中率高,适合性能敏感场景。

第三,适用场景不同。​
数组适用于数据量大且需频繁随机访问的场景(如图像处理、数据库索引);链表适用于频繁插入/删除或数据规模动态变化的场景(如消息队列、LRU 缓存)。

4. 一个数字数组排序你会选择什么排序算法?

如果只是一个数字数组排序,我会先看一下数据的特点和要求。比如说,如果数组元素较多且数据是随机分布,我通常会选快速排序,因为它在平均情况下能达到O(n log n)的时间复杂度,性能上也非常高效。不过,快速排序在最坏情况下可能退化到O(n²),所以如果对最坏情况有严格要求,可能会考虑堆排序或者归并排序。

堆排序能够在最坏情况下保证O(n log n)的性能,而且是原地排序,但在常数时间上可能略逊色;归并排序稳定性好,尤其适合对排序稳定性有要求的场景,不过需要额外的内存空间。

另外,如果数据接近有序,那么插入排序或者更现代的Timsort可能会表现得更好。总之,选择哪种排序算法得看具体的数据规模、数据分布以及是否有稳定性或者空间上的特殊要求。

5. 说说哈夫曼树以及它的应用

哈夫曼树是一种根据字符出现的频率来创建的最优二叉树。创建的时候,频率最低的两个字符会被合并成一个新节点,直到所有字符合并成一棵树。在这棵树上,频率高的字符离根节点近,编码短;频率低的字符离根节点远,编码长。通过这种方式,数据能得到有效压缩,因为高频字符占用的存储空间更小。 哈夫曼树的应用很广泛,最典型的就是数据压缩,比如在ZIP文件格式和JPEG图片格式中就用了哈夫曼编码。另外,它也被应用在网络通信、语音编码等领域,能有效减少传输数据的成本。这种树结构的好处就是能根据实际数据的特点动态调整编码,使得整个过程非常高效。

6. 图的存储结构

老师,我认为图主要有两种常见的存储结构:邻接矩阵和邻接表。邻接矩阵就是用一个二维数组来存储图的信息。如果图有 n 个顶点,那么我们就用一个 n×n 的矩阵,每个元素表示两个顶点之间是否有边(还可以记录权值)。这种方法的优点是判断两个顶点是否相邻非常快,操作简单;缺点则是对于边较少的稀疏图来说,空间利用率低,会浪费不少空间。邻接表则是为每个顶点建立一个链表,存储所有与之相邻的顶点及相关信息。这样对于稀疏图来说,空间利用更高效,因为只存储实际存在的边;不过,如果要判断两个顶点是否直接相连,可能需要遍历链表,相对来说查找速度不如邻接矩阵。另外,对于有向图,还可以使用十字链表来同时记录每个顶点的入边和出边。

总的来说,选择哪种存储结构主要看图的特点:如果是稠密图,邻接矩阵可能更方便;如果是稀疏图,邻接表能更好地节省空间;

7. 迪杰斯特拉算法

老师,我理解的迪杰斯特拉算法其实就是用来解决单源最短路径问题的一种方法。我们先把起点到各个节点的距离都初始化为无穷大,起点设为 0,然后反复地从还没有确定最短距离的节点中找出一个距离最小的,把这个节点确定下来,再利用它去更新它邻近节点的距离。整个过程就是不断“贪心”地选择当前最短路径,并用这个路径去优化其他路径。这样一步步进行下去,最后就能得到起点到所有其他节点的最短距离。不过,这个算法要求图中的边权都是非负的,如果有负权边,就不能用了。

相关文章:

考研复试问题总结-数据结构(1)

1. 说一下你对数据结构的理解 我觉得数据结构不仅仅是存数据的“容器”,更是一种思维方式。其实,在我们写程序时,经常会遇到各种各样的数据操作需求,而不同的数据结构能解决问题的效率和方式都不一样,所以选择合适的数…...

DeepSeek 助力 Vue3 开发:打造丝滑的网格布局(Grid Layout)

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...

架构案例:从初创互联网公司到分布式存储与反应式编程框架的架构设计

文章目录 引言一、初创互联网公司架构演化案例1. 万级日订单级别架构2. 十万级日订单级别架构3. 百万级日订单级别架构 二、分布式存储系统 Doris 架构案例三、反应式编程框架架构案例总结 引言 分布式架构 今天我们将探讨三种不同类型的架构案例,分别探讨 一个初…...

51页精品PPT | 农产品区块链溯源信息化平台整体解决方案

PPT展示了一个基于区块链技术的农产品溯源信息化平台的整体解决方案。它从建设背景和需求分析出发,强调了农产品质量安全溯源的重要性以及国际国内的相关政策要求,指出了食品安全问题在流通环节中的根源。方案提出了全面感知、责任到人、定期考核和追溯反…...

【Pytest】setup和teardown的四个级别

文章目录 1.setup和teardown简介2.模块级别的 setup 和 teardown3.函数级别的 setup 和 teardown4.方法级别的 setup 和 teardown5.类级别的 setup 和 teardown 1.setup和teardown简介 在 pytest 中,setup 和 teardown 用于在测试用例执行前后执行一些准备和清理操…...

JavaScript系列03-异步编程全解析

本文介绍了异步相关的内容,包括: 回调函数与回调地狱Promise详解async/await语法Generator函数事件循环机制异步编程最佳实践 1、回调函数与回调地狱 JavaScript最初是为处理网页交互而设计的语言,异步编程是其核心特性之一。最早的异步编…...

Linux学习——退出vi编辑模式

初学Linux的时候,在使用vi 操作时候,有时候可能进入的是一个文件夹,这样子在退出的时候很不好操作! 下面总结一些vi 退出命令,学习! 进入编辑模式,按 o 进行编辑 编辑结束,按ESC 键 跳到命令…...

第2章_保护您的第一个应用程序

第2章_保护您的第一个应用程序 在本章中,您将学习如何使用 Keycloak 保护您的第一个应用程序。为了让事情更有趣,您将运行的示例应用程序由两部分组成,前端 Web 应用程序和后端 REST API。这将向您展示用户如何向前端进行身份验证&#xff0…...

【AGI】DeepSeek开源周:The whale is making waves!

DeepSeek开源周:The whale is making waves! 思维火花引言一、DeepSeek模型体系的技术演进1. 通用语言模型:DeepSeek-V3系列2. 推理优化模型:DeepSeek-R1系列3. 多模态模型:Janus系列 二、开源周三大工具库的技术解析1…...

Unity中动态切换光照贴图的方法

关键代码:LightmapSettings.lightmaps lightmapDatas; LightmapData中操作三张图:lightmapColor,lightmapDir,以及一张ShadowMap 这里只操作前两张: using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI;public cl…...

第三十四:6.4.【v-model】

6.4.【v-model】&#xff1a;双向绑定 概述&#xff1a;实现 父↔子 之间相互通信。 前序知识 —— v-model的本质 <!-- 使用v-model指令 --> <input type"text" v-model"userName"> ​ <!-- v-model的本质是下面这行代码 --> <inpu…...

React底层常见的设计模式

在React中&#xff0c;常见的设计模式为开发者提供了结构化和可重用的解决方案&#xff0c;有助于提高代码的可维护性和可扩展性。以下是对React中几种常见设计模式的详细解析&#xff0c;并附上示例代码和注释&#xff1a; 1. 容器组件与展示组件模式&#xff08;Container/P…...

从零基础到通过考试

1. 学习资源与实践平台 使用Proving Grounds进行靶机练习 OSCP的备考过程中&#xff0c;实战练习占据了非常重要的地位。Proving Grounds&#xff08;PG&#xff09;是一个由Offensive Security提供的练习平台&#xff0c;拥有152个靶机&#xff0c;涵盖了从基础到进阶的多种…...

UniApp 按钮组件 open-type 属性详解:功能、场景与平台差异

文章目录 引言一、open-type 基础概念1.1 核心作用1.2 通用使用模板 二、主流 open-type 值详解2.1 contact - 客服会话功能说明平台支持代码示例 2.2 share - 内容转发功能说明平台支持注意事项 2.3 getUserInfo - 获取用户信息功能说明平台支持代码示例 2.4 getPhoneNumber -…...

【无标题】ABP更换MySql数据库

原因&#xff1a;ABP默认使用的数据库是sqlServer&#xff0c;本地没有安装sqlServer&#xff0c;安装的是mysql&#xff0c;需要更换数据库 ABP版本&#xff1a;9.0 此处以官网TodoApp项目为例 打开EntityFrameworkCore程序集&#xff0c;可以看到默认使用的是sqlServer&…...

大模型微调入门(Transformers + Pytorch)

目标 输入&#xff1a;你是谁&#xff1f; 输出&#xff1a;我们预训练的名字。 训练 为了性能好下载小参数模型&#xff0c;普通机器都能运行。 下载模型 # 方式1&#xff1a;使用魔搭社区SDK 下载 # down_deepseek.py from modelscope import snapshot_download model_…...

【开源免费】基于SpringBoot+Vue.JS网络海鲜市场系统(JAVA毕业设计)

本文项目编号 T 222 &#xff0c;文末自助获取源码 \color{red}{T222&#xff0c;文末自助获取源码} T222&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...

在线会议时, 笔记本电脑的麦克风收音效果差是为什么

背景 最近在线面试. 使用腾讯会议或者飞书, 戴耳机参加在线面试, 遇到好几个面试官说我的音质不好. 一直没在意, 后来反思, 应该是电脑哪里出了问题. 排查 先买了一副品牌有线耳机, 测试后本地录制的声音仍然品质很差去掉耳机延长线后, 麦克风品质仍然很差最终找到答案, 原…...

理解文件系统

目录 文件系统 内存文件与磁盘文件的区别 初识inode 磁盘的概念 磁盘分区与格式化介绍 EXT2文件系统的存储方案 软硬链接 软连接 ​编辑 硬链接 软硬链接的区别 文件的三个时间 文件系统 内存文件与磁盘文件的区别 我们知道文件可以分为磁盘文件和内存文件&#…...

第二十四:5.2【搭建 pinia 环境】axios 异步调用数据

第一步安装&#xff1a;npm install pinia 第二步&#xff1a;操作src/main.ts 改变里面的值的信息&#xff1a; <div class"count"><h2>当前求和为&#xff1a;{{ sum }}</h2><select v-model.number"n">  // .number 这里是…...

5个实用技巧:让waifu2x-caffe成为你的图像超分辨率利器

5个实用技巧&#xff1a;让waifu2x-caffe成为你的图像超分辨率利器 【免费下载链接】waifu2x-caffe waifu2xのCaffe版 项目地址: https://gitcode.com/gh_mirrors/wa/waifu2x-caffe waifu2x-caffe是一个基于Caffe深度学习框架的图像超分辨率与降噪工具&#xff0c;专为W…...

提升前端开发效率:用快马AI一键生成可复用模态框组件

最近在重构公司后台管理系统时&#xff0c;发现项目中到处散落着不同风格的模态框代码。每次新增功能都要重复写遮罩层逻辑、动画效果和关闭事件&#xff0c;不仅效率低下&#xff0c;还容易产生样式冲突。于是尝试用InsCode(快马)平台的AI生成功能&#xff0c;意外发现它能快速…...

建筑行业老司机揭秘:中级职称挂靠的那些门道(附避坑指南)

建筑行业职称挂靠的深层逻辑与风险规避策略 在建筑行业摸爬滚打多年的从业者都清楚&#xff0c;职称证书不仅是个人专业能力的证明&#xff0c;更是一张可以兑换经济价值的"隐形支票"。当项目经理老张第一次听说朋友通过职称挂靠每月多赚5000元时&#xff0c;他的第一…...

JeecgBoot密码修改实战:如何绕过加密盐直接更新数据库密码

JeecgBoot密码安全机制解析与实战密码更新方案 在JeecgBoot框架的实际开发中&#xff0c;密码安全机制是保障系统安全的第一道防线。许多开发者在使用过程中会遇到需要批量修改用户密码的场景&#xff0c;但直接操作数据库往往会导致密码失效。这背后是框架采用的加密盐算法在发…...

结合知识图谱:StructBERT用于实体对齐与关系匹配

结合知识图谱&#xff1a;StructBERT用于实体对齐与关系匹配 1. 引言 你有没有遇到过这样的问题&#xff1f;公司内部&#xff0c;销售部门用“客户A”来指代一家公司&#xff0c;而财务系统里登记的却是“A有限公司”。虽然我们都知道说的是同一家&#xff0c;但计算机系统却…...

解决vue项目 vscode查找文件应用 ctrl+鼠标点击import无法跳转的问题

踩坑 前提是 AI的解决方案处理完&#xff0c;你的vue文件一体的script可以查看里面的import文件引用&#xff0c;但是独立的index.js-import无论如何都查看不了文件应用。 解决办法 如下是我的tscoonfig.json。 实际上就是加上 【“allowJs”: true, //为了查看文件引用&#x…...

SEO 优化与网站分析有什么关系

SEO优化与网站分析&#xff1a;不可分割的伙伴 在当今数字化时代&#xff0c;拥有一个成功的网站不仅仅是一个企业的门面&#xff0c;更是其吸引客户和拓展市场的重要途径。无论你是初创企业还是成熟的行业巨头&#xff0c;网站的流量和用户体验直接影响着你的商业成功。而在这…...

3个技巧教你玩转Dify工作流:从新手到高手的完整指南

3个技巧教你玩转Dify工作流&#xff1a;从新手到高手的完整指南 【免费下载链接】Awesome-Dify-Workflow 分享一些好用的 Dify DSL 工作流程&#xff0c;自用、学习两相宜。 Sharing some Dify workflows. 项目地址: https://gitcode.com/GitHub_Trending/aw/Awesome-Dify-Wo…...

小白也能玩转Qwen3-TTS:一键部署多语言语音生成,实测效果惊艳

小白也能玩转Qwen3-TTS&#xff1a;一键部署多语言语音生成&#xff0c;实测效果惊艳 1. 为什么选择Qwen3-TTS 作为一个语音生成领域的从业者&#xff0c;我测试过市面上大多数TTS&#xff08;文本转语音&#xff09;模型&#xff0c;Qwen3-TTS-12Hz-1.7B-VoiceDesign给我留下…...

PalmSens4电化学分析仪

集恒电位/恒电流/阻抗分析&#xff08;EIS&#xff09;于一体&#xff0c;电池USB双供电&#xff0c;带蓝牙与触屏&#xff0c;支持循环伏安&#xff08;CV/FCV&#xff09;、线性扫描&#xff08;LSV&#xff09;、差分脉冲&#xff08;DPV&#xff09;、方波伏安&#xff08;…...