数据结构与算法第二套试卷大题

1.选择排序,插入排序的思路

1.1选择排序思路:
1.每次在数组中选一个最小的元素与第一个元素进行交换——>2.然后逐步缩小数组,重复第一,二步
1.2举例:
假设有一个无序数组 [5, 2, 8, 3, 1],使用选择排序的思路,首先找到最小的元素 1,与数组的第一个元素 5 交换位置,得到 [1, 2, 8, 3, 5],然后在剩余的部分中找到最小的元素 2,与第二个元素 2 交换位置,得到 [1, 2, 8, 3, 5],以此类推,最终得到有序数组 [1, 2, 3, 5, 8];
时间复杂度:0(n^2),空间复杂度:0(1)

2.1插入排序思路:
1.从第二个元素开始,与前面的元素对比,排序到合适的位置——>2.然后重复遍历后面的元素,重复1,2操作
2.2举例:
假设有一个无序数组 [7, 3, 5, 1, 9],使用插入排序的思路,首先将第二个元素 3 插入到已排序部分 [7] 的正确位置,得到 [3, 7, 5, 1, 9],然后将第三个元素 5 插入到已排序部分 [3, 7] 的正确位置,得到 [3, 5, 7, 1, 9],以此类推,最终得到有序数组 [1, 3, 5, 7, 9]
插入排序最优:0(n),平均为0(n^2),空间与上述类似

2.链表操作:

指针变量p指向双向链表中结点A指针变量q指向被插入结点B,要求给出在结点A的后面插入结点B的操作序列(设双向链表
中结点的两个指针域分别为llink和rlink)。
答案:

q->left=p;
q-right=p->right;
p->right->left=q;
p->right=q;

3.孩子兄弟表示法画二叉树

设一棵树T中边的集合为{(A,B),(A,C),(A,D),(B,E),(C,F),(C,G)},要求用孩子兄弟表示法(二叉链表)表示出该树的存储结构并将该树转化成对应的二叉树
方法:抓住左孩子右兄弟即可
在这里插入图片描述

4.二叉排序树

核心: 左边小,根节点第二,右子树最大即可

5.prim算法构造最小生成树

根贪心类似,1.从第一个顶点搜索权值最小的第二节点,绘制路线后,2.从第二各节点再往后搜**(需要判断之前的节点是否有较小的相邻路径**,如果有,就走之前节点的,其次是需要判断是否构成环
请添加图片描述
克鲁斯卡尔算法的话,他是先把边全部排序好,按权值从小到大进行绘制,如果构成环就跳过

6.集合的表示问题

设有两个集合A和集合B,要求设计生成集合C=A∩B的算法,其中集合A、B和C用链式存储结构表示。

//1.节点结构
typedef struct Node{
   int data;
   struct Node* next;
}Node; //后续表示节点直接Node* node即可

//2.链表结构
typedef struct LinkedList{
   Node* head; //节点
}LinkedList; //LinkedList* list表示链表

//3.初始化链表
void initLinkedList(LinkedList* list){
  list->head=NULL;
}

//4.向链表中插入元素
void insert(LinkedList* list,int data){
  //1.创建节点newNode并赋值
  Node*new_node=(Node*)malloc(sizeof(Node));
  new_node->data=data;
  new_node->next=NULL;
  //2.插入
  if(list->head==NULL){
    list->head=new_Node;
  }else{
    //2.2得到头节点
    Node* current=list->head;
    //2.3遍历到尾部
    while(current->next){
      current=current->next;
    }
    //2.3将新的节点插入链表尾部
    current->next=new_Node;
 }

}

// 生成集合C = A ∩ B
LinkedList inersect(LinkedList* list_a,LinkedList* list_b){
   LinkedList* result;
   //1.初始化链表
   initLinkedList(result);
   //2.遍历
   Node* current_a=list_a->head; //先得到链表a的头节点
   while(current_a!=NULL){
     Node* current_b=list_b->head; //链表b的头节点
     while(current_b!=NULL){
       if(current_a->data==current_b->data){
           //满足条件:两链表出现节点相同时,插入c
           insert(result,current_a->data);
           break;  
       }
       //没有找到与a链表相同的节点,继续遍历
       current_b=curent_b->next;
     }
     //遍历a链表
     current_a=current_a->next;
   }
   return result;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/439728.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

kasan排查kernel内存越界示例(linux5.18.11)

参考资料: 1,内核源码目录中的Documentation\dev-tools\kasan.rst 2,KASAN - Kernel Address Sanitizer | Naveen Naidu (naveenaidu.dev) 一、kasan实现原理 KASAN(Kernel Address SANitizer)是一个动态内存非法访…

《JAVA与模式》之模板方法模式

系列文章目录 文章目录 系列文章目录前言一、模板方法模式的结构二、模板方法模式中的方法三、使用场景四、模板方法模式在Servlet中的应用前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了…

RN开发搬砖经验之-如何处理FlashList组件加载后调用scrollToIndex没有滚动指定位置

前言 如题,这里只能说是处理,起正向作用的临时方案,因为我也着实没搞懂这个BUG的具体原因,看github上有提相关的issuesFor long lists with different item types scrollToIndex does not work reliable,但看官方没有…

操盘风控系统的功能设计与实现

文章目录 一、账户信息风控警报系统是什么二、操盘警报风控系统的意义三、风控系统功能参数设置短信通知及邮件通知参数手机远程风控新闻风险控制常规Bug检测、交易纪律控制参数账户净值、手数、单数、盈亏控制参数价格时间风控、定时平仓 一、账户信息风控警报系统是什么 警报…

WPF学习三(MVVM+自定义按钮等的登录界面)

跟着bilibil龙马哥视频做的一个登录界面,个人感觉讲得很到位,适合新手),他是从开始的前后绑定慢慢解耦合到MVVM,让我较快的理解了WPF的基础。 【WPF入门】WPF零基础到精通,从概念到实操,步步提升…

「AI工程师」模型训练与部署-工作指导

工作指导书 一、工作职责 负责AI模型的训练和优化,确保模型性能达到预定目标。协调资源的分配,管理训练过程中的各种参数和配置。负责模型的部署工作,确保模型能够稳定、高效地运行在实际环境中。监控模型的运行状态,及时处理和…

Python实现滚动加权最小二乘法回归模型(RollingWLS算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 滚动加权最小二乘法回归模型(Rolling Weighted Least Squares, RollingWLS)是一…

基于SSM的房客源信息管理系统设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 相关技术 3 1.1 SSM框架 3 1.2 Vue框架 3 1.3 ECharts 3 1.4 JQuery技术 3 1.5 本章小结 4 2系统分析 5 2.1 需求分析 5 2.2 非功能需求 8 2.3 本章小节 8 3 系统设计 9 3.1 系统总体设计 9 3.1.1 系统体系结构 9 3.1.2 系统目录结构 9 3…

MySQL 针对逗号拼接的数据字段转行思路

一、MySQL 针对逗号拼接的数据字段转行思路 在 MySQL 中我们有可能为了方便操作,有时会将一个字段存储多个信息,使用英文逗号隔开,当然这种情况属于对数据库的设计上有些欠妥。但如果遇到了这种情况又需要对数据进行统计的情况就有点棘手了&…

直流负载原理与应用

直流负载是指能够消耗直流电能的设备或系统,在电力系统中,直流负载主要包括直流电动机、蓄电池、电解槽等。这些设备在运行过程中需要消耗大量的直流电能,因此对直流电源的稳定性和可靠性要求较高。本文将对直流负载的原理及其应用进行简要介…

二叉树(属性、修改与构造)

226. 翻转二叉树 题目 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]答案 class Solution {public TreeNode invertTree(TreeNode roo…

python3安装chrome,chromedriver亲测有效

客户用python写了个脚本,需要用到chrome和chromedriver扩展,结果说安装不了,各种报错,好吧我来研究一下。众所周知linux自带python2.7,根据报错查了一下资料发现是版本冲突导致的,系统自带2.7,代…

针对ETC系统的OBE-SAM模块设计方案

ETC(Electrical Toll Collection)不停车收费是目前世界上最先进的路桥收费方式。通过安装在车辆挡风玻璃上的车载单元与安装在收费站 ETC 车道上的路侧单元之间的微波专用短程通讯,利用计算机联网技术与银行进行后台结算处理,从而…

typescript 学习

一.typescript是Javascript的超集,在javascript中添加特性的语言扩展,支持ES6标准。 二.typescript中新增了:类型批注和编译时类型检查,类型推断,类型擦除,接口,枚举,Mixin,泛型编程,名字空间,元组,await等 三.vscode 中怎样使用typescript 1. 安装VSCode (官网下…

SSL 证书,了解一下常识

公司的网站、应用怎么才能保证在互联网上安全运行,不被攻击、盗取数据呢? 创业必经之路,一步一步走就对了,可能没赶上红利期,但不做就等于0。 概述 SSL 证书(SSL Certificates)又称数字证书&am…

常见控件应用

常见控件应用 1.操作Ajax选项2.滑动滑块操作 1.操作Ajax选项 Ajax即Asynchronous JavaScript and XML(异步JavaScript和XML),是指一种创建交互式、快速动态网页应用的网页开发技术。通过在后台与服务器进行少量数据交换,Ajax可以…

Python与FPGA——图像锐化

文章目录 前言一、图像锐化二、Python robert锐化三、Python sobel锐化四、Python laplacian锐化五、FPGA sobel锐化总结 前言 在增强图像之前一般会先对图像进行平滑处理以减少或消除噪声,图像的能量主要集中在低频部分,而噪声和图像边缘信息的能量主要…

Spring Boot 生成与解析Jwt

Spring Boot 生成与解析Jwt Maven依赖 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version> </dependency>生成&解析 package yang;import io.jsonwebtoken.Claims…

DDS技术概述及测试策略与方案

随着车载通信技术的快速发展&#xff0c;传统的通信技术在满足车载通信需求方面面临着一些挑战。车载通信对实时性、可靠性以及通信带宽的需求越来越高&#xff0c;同时车载通信环境存在多路径衰落、信号干扰等问题&#xff0c;这些都给通信技术的选择和应用带来了一定的挑战。…

沐风老师3DMAX快速布尔QuickBoolean插件安装和使用教程

3DMAX快速布尔QuickBoolean插件安装和使用教程 3DMAX快速布尔QuickBoolean插件是一组工具&#xff0c;用于对具有预设轮廓的当前选定对象快速执行ProBoolean运算&#xff0c;如并集、相交、空心、修剪、减法、拆分和刀。 它的工作原理与SketchUp的Solid Tools非常相似&#xf…