408数据结构常考算法基础训练

  • 408相关:
    • 408数据结构错题知识点拾遗
      • 408数据结构常考算法基础训练
    • 408计算机组成原理错题知识点拾遗
    • 408操作系统错题知识点拾遗等待完善
    • 408计算机网络错题知识点拾遗
      • 408计算机网络各层协议简记等待完善

该训练营为蓝蓝考研蓝颜知己)的算法训练营内容,题目来源有经典算法题、408统考算法题等等。分为7weeks共计39days练习,每日一道算法题训练,涵盖基本顺序表、链表和二叉树相关的基础算法,以及部分408真题中数据结构部分的算法题,并未包含图相关的算法,还需要进一步对图算法自行学习。 当然,对于顺序表、链表和二叉树的算法,也需要继续通过课后习题进行练习和巩固。
github项目地址–AlgorithmTrainingCamp

  • 目录

如果时间充裕,可以前期进行PC端练习,后期再尝试完全在纸上进行手写练习;如果时间紧张则不建议PC端练习,直接手写。
个人最初是使用的Clion进行coding练习的,所以这些题目是可以成功测试运行的。所涉及的相关结构体及函数定义如下所示:

  • 线性表List
    • 顺序表SqList
      • 头文件SqList.h
// SqList.h
// Created by Giperx on 2023/7/24.
//
#ifndef ALGCAMP_SEQLIST_H
#define ALGCAMP_SEQLIST_H
// 顺序表
typedef struct SqList{int data[100];int length;
}SqList;
// 初始化顺序表
void initSqList(SqList &list);
// 打印输出顺序表
void printSqList(SqList &list);
#endif //ALGCAMP_SEQLIST_H
  • 线性表List
    • 顺序表SqList
      • SqList.cpp
//SqList.cpp
// Created by Giperx on 2023/7/27.
//
#include <iostream>
#include "SqList.h"
using namespace std;
void initSqList(SqList &list){cout << "enter length of SqList:";cin >> list.length;cout << "enter values of SqList:";for(int i = 0; i < list.length; i ++) cin >> list.data[i];
}
void printSqList(SqList &list){cout << "length: " << list.length << endl;for(int i = 0; i < list.length; i ++) cout << list.data[i] << ' ';cout << endl;
}
  • 线性表List
    • 链表LinkList
      • 头文件LinkList.h
//LinkList.h
// Created by Giperx on 2023/8/15.
//
#ifndef ALGCAMP_LINKLIST_H
#define ALGCAMP_LINKLIST_H
typedef struct LNode{int data;struct LNode *next;LNode(int val){data = val;next = nullptr;}
}LNode, *LinkList;
// 初始化链表,带头结点
bool initLinkList(LinkList& L);
// 计算链表长度(不包括头结点)
int lengthofLinkList(LinkList& L);
// 输出链表信息
void printLinkList(LinkList& L);
#endif //ALGCAMP_LINKLIST_H
  • 线性表List
  • 链表LinkList
    • LinkList.cpp
//LinkList.cpp
// Created by Giperx on 2023/8/15.
//
#include "LinkList.h"
#include "malloc.h"
#include "iostream"
using namespace std;// 初始化链表,带头结点
bool initLinkList(LinkList& L){L = (LNode*)malloc(sizeof (LNode));if (!L) return false;L->next = nullptr;return true;
}
// 计算链表长度(不包括头结点)
int lengthofLinkList(LinkList& L){int length = 0;if (!L){cout << "nullptr!" << endl;} else if (!L->next) {cout << "have not node!" << endl;} else {LNode *p = L->next;while (p){length++, p = p->next;}}return length;
}
// 输出链表信息
void printLinkList(LinkList& L){if (!L) cout << "nullptr!" << endl;else if (!L->next) cout << "have not node!" << endl;else{cout << "length of LinkList:" << lengthofLinkList(L) << endl;LNode *p = L->next;while (p){cout << p->data << ' ';p = p->next;}cout << endl;}
}
  • 二叉树
    • BiTree.h
//BiTree.h
// Created by Giperx on 2023/8/24.
//
#ifndef ALGCAMP_BITREE_H
#define ALGCAMP_BITREE_H
// 二叉树
typedef struct BiNode{char data;struct BiNode* left, *right;
}BiNode, *BiTree;
#endif //ALGCAMP_BITREE_H
  • 二叉树
    • BiTree.cpp
//BiTree.cpp
// Created by Giperx on 2023/8/24.
//
#include "BiTree.h"

  • week1 回到目录

day1 累加求和 参考作答

简单的for循环实现累计求和:1+2+3+4+…+10


day2 字符串反转 参考作答

在这里插入图片描述


day3 顺序表删除最小并用尾数填补 参考作答

在这里插入图片描述


  • week2 回到目录

day4 顺序表逆置 参考作答

在这里插入图片描述


day5 删除所有值为x的元素 参考作答

在这里插入图片描述


day6 删除下标范围内所有元素 参考作答

在这里插入图片描述


day7 依照表头元素划分数组为左小右大两半 参考作答

在这里插入图片描述


day8 删除给定元素值范围内所有元素 参考作答

在这里插入图片描述


day9 有序顺序表去重 参考作答

在这里插入图片描述


    • week2小结
      day04 - day09

主要是双指针的运用,day04顺序表逆置,左右交换;

day06删除下标范围内的元素,相当于两顺序表的前后合并;

day05删除所有值为x的元素、day08删除值范围内的元素、day09有序表去重是相同的,双指针,一个负责记录位置,一个负责移动判断。只不过前两个的判定对比是定下来的元素,去重则是每次判定对比的元素可能会发生变化,也就是最近的一个元素;

day07依表头划分左右两半partition实际上是快排算法的基础,通过双指针和哨兵进行比较再交换。


  • week3 回到目录

待续……


参考作答

  • week1 回到题目


day1 回到题目

#include<stdio.h>
int main(){int sum = 0;for(int i = 1; i <= 10; i ++){sum += i;}printf("%d", sum);return 0;
}


day2 回到题目

#include<iostream>
#include<cstring>
using namespace std;
int main(){char str[1001];cin >> str;for(int i = std::strlen(str) - 1; i >= 0; i --){cout << str[i];}return 0;
}

实际上,C语言中可以利用string.h中的strrev(char*)函数进行反转。

#include<string.h>
strrev(str)

C++中algorithm头文件中的reverse(_BIter, _BIter)也可以对stringvector也可以实现反转。

#include<algorithm>
reverse(str.begin(), str.end())


day3 回到题目

思路

  • 遍历顺序表,同时记录下每次最小的元素的值和下标位置,最后用尾部元素填补,并返回值。

答案

#include <iostream>
#include <vector>
using namespace std;
int removeMinValue(vector<int>& sequence) {if (sequence.empty()) {cerr << "顺序表为空!" << endl;return -1; // 返回-1表⽰错误}int minInd = 0;int minVal = sequence[0];for (int i = 1; 1 < sequence.size(); i++) {
// ⽐较获取最⼩值和其索引if(sequence[i] < minVal) {minVal = sequence[i];minInd = i;}}int deletedVal = sequence[minInd];sequence[minInd] = squence.back(); // 最后⼀个元素填补删除位sequence.pop_back(); //删除最后⼀个元素return deletedVal; // 返回删除值
}

待续……

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python漂浮爱心完整代码

文章目录 环境需求完整代码详细分析环境需求 python3.11.4PyCharm Community Edition 2023.2.5pyinstaller6.2.0(可选,这个库用于打包,使程序没有python环境也可以运行,如果想发给好朋友的话需要这个库哦~)【注】 python环境搭建请见:https://want595.blog.csdn.net/arti…

【PXIE301-208】基于PXIE总线架构的Serial RapidIO总线通讯协议仿真卡

板卡概述 PXIE301-208是一款基于3U PXIE总线架构的Serial RapidIO总线通讯协议仿真卡。该板卡采用Xilinx的高性能Kintex系列FPGA作为主处理器&#xff0c;实现各个接口之间的数据互联、处理以及实时信号处理。板卡支持4路SFP光纤接口&#xff0c;支持一个PCIe x8主机接口&…

不同SqlServer版本的Jdbc驱动下载地址

不同SqlServer版本的Jdbc驱动下载地址 1.下载地址 发行说明 - JDBC Driver for SQL Server | Microsoft Learn 版本兼容性查看 支持矩阵 - JDBC Driver for SQL Server | Microsoft Learn 建议方法查看 SQL 版本兼容性 Java 和 JDBC 规格支持 2.下载驱动 下面是2008版本对应…

写一个工具类能够让所有的建筑物体检测地面并且吸附地面

直接上代码 using UnityEditor; using UnityEngine; using System.Collections.Generic; using System.IO; using OHGame; using Unity.VisualScripting;public class OHEditorTool : Editor {[MenuItem("OHGame/Tools/行动区域点落地")]private static void GetObj…

element el-table实现可进行横向拖拽滚动

【问题】表格横向太长&#xff0c;表格横向滚动条位于最底部&#xff0c;需将页面滚动至最底部才可左右拖动表格&#xff0c;用户体验感不好 【需求】基于elment的el-table组件生成的表格&#xff0c;使其可以横向拖拽滚动 【实现】灵感来源于这篇文章【Vue】表格可拖拽滚动&am…

Linux 线程概念

文章目录 前言线程的概念线程的操作操作的原理补充与说明 前言 ① 函数的具体说明被放在补充与说明部分 ② 只说些基础概念和函数使用 线程的概念 网络回答&#xff1a;Linux 线程是指在 Linux 操作系统中创建和管理的轻量级执行单元。线程是进程的一部分&#xff0c;与进程…

flutter 安卓使用高德插件黑屏

地址 https://lbs.amap.com/api/android-sdk/guide/create-project/android-studio-create-project 下面介绍的方式是Native配置 sdk&#xff0c;也就是需要手动下载到本地在引入的方式 1、添加 jar 文件&#xff1a; 将下载的地图 SDK 的 jar包复制到工程&#xff08;此处截…

2702 高级打字机

因为Undo操作只能撤销Type操作&#xff0c;所以Undo x 实际上就是删除文章末尾x个字母。用一个栈即可解决&#xff08;每个字母最多进出一次&#xff09;。 这种情况下只需要设计一个合理的数据结构依次执行操作即可。 版本树&#xff1a;Undo x撤销最近的x次修改操作&#xf…

将正规文法转化为正规式

将正规文法转化为正规式有以下几个规则&#xff1a; 通过一道例题来讲解&#xff1a; ①A-->aC|bA ②C-->bD ③D-->aC|bD| (1)首先将②带入③&#xff08;不能将自身带入自身例如D-->aC|bD|,文法中带D&#xff0c;不能带入D&#xff09; DabD|bD|&#xff08;…

ARM CCA机密计算软件架构之内存加密上下文(MEC)

内存加密上下文(MEC) 内存加密上下文是与内存区域相关联的加密配置,由MMU分配。 MEC是Arm Realm Management Extension(RME)的扩展。RME系统架构要求对Realm、Secure和Root PAS进行加密。用于每个PAS的加密密钥、调整或加密上下文在该PAS内是全局的。例如,对于Realm PA…

公司创建百度百科需要哪些内容?

一个公司或是一个品牌想要让自己更有身份&#xff0c;更有知名度&#xff0c;更有含金量&#xff0c;百度百科词条是必不可少的。通过百度百科展示公司的详细信息&#xff0c;有助于增强用户对公司的信任感&#xff0c;提高企业形象。通过百度百科展示公司的发展历程、领导团队…

AI-ChatGPTCopilot

ChatGPT chatGPT免费网站列表&#xff1a;GitHub - LiLittleCat/awesome-free-chatgpt: &#x1f193;免费的 ChatGPT 镜像网站列表&#xff0c;持续更新。List of free ChatGPT mirror sites, continuously updated. Copilot 智能生成代码工具 安装步骤 - 登录 github&am…

NXP实战笔记(三):S32K3xx基于RTD-SDK在S32DS上配置WDT配置

目录 1、WDT概述 2、SWT配置 2.1、超时时间&#xff0c;复位方式的配置 2.2、中断形式 1、WDT概述 SWT 编程模型只允许 32 位&#xff08;字&#xff09;访问。 以下任何尝试访问都是无效的: •非32位访问 •写入只读寄存器 •启用SWT时&#xff0c;将不正确的值写入SR…

uniapp:实现手机端APP登录强制更新,从本地服务器下载新的apk更新,并使用WebSocket,实时强制在线用户更新

实现登录即更新&#xff0c;或实时监听更新 本文介绍的是在App打开启动的时候调用更新&#xff0c;点击下方链接&#xff0c;查看使用WebSocket实现实时通知在线用户更新。 uniapp&#xff1a;全局消息是推送&#xff0c;实现app在线更新&#xff0c;WebSocket&#xff0c;ap…

java 纯代码导出pdf合并单元格

java 纯代码导出pdf合并单元格 接上篇博客 java导出pdf&#xff08;纯代码实现&#xff09; 后有一部分猿友叫我提供一下源码&#xff0c;实际上我的源码已经贴在帖子上了&#xff0c;都是同样的步骤&#xff0c;只是加多一点设置就可以了。今天我再次上传一下相对情况比较完整…

开源预约挂号平台 - 从0到上线

文章目录 开源预约挂号平台 - 从0到上线演示地址源码地址可以学到的技术前端技术后端技术部署上线开发工具其他技术业务功能 项目讲解前端创建项目 - 安装PNPM - 使用VSCODE - 安装插件首页顶部与底部 - 封装组建 - 使用scss左右布局中间内容部分路由 - vue-routerBANNER- 走马…

重装系统以后无法git跟踪

总结&#xff1a;权限问题 故障定位 解决方案&#xff1a; 复制一份新的文件夹。&#xff08;新建的文件创建和写入权限都变了&#xff09; 修改文件为新的用户 执行提示的命令

SuperMap iServer发布的ArcGIS REST 地图服务如何通过ArcGIS API进行要素查询

作者&#xff1a;yx 前言 前面我们介绍了SuperMap iServer发布的ArcGIS REST 地图服务如何通过ArcGIS API加载&#xff0c;这里呢我们再来看看如何进行要素查询呢&#xff1f; 一、服务发布 SuperMap iServer发布的ArcGIS REST 地图服务如何通过ArcGIS API加载已经介绍如何发…

日志框架简介-Slf4j+Logback入门实践 | 京东云技术团队

前言 随着互联网和大数据的迅猛发展&#xff0c;分布式日志系统和日志分析系统已广泛应用&#xff0c;几乎所有应用程序都使用各种日志框架记录程序运行信息。因此&#xff0c;作为工程师&#xff0c;了解主流的日志记录框架非常重要。虽然应用程序的运行结果不受日志的有无影…

OpenEular23.09(欧拉)操作系统为企业搭建独立的K8S集群环境,详细流程+截图

1.环境&#xff1b; win10&#xff0c;vmware16 pro&#xff0c;openeular23.09 集群模式&#xff1a;一主二从 主机硬件配置 主机名IP角色CPU内存硬盘k8s-master01192.168.91.100master4C4G40Gk8s-worker02192.168.91.101worker(node)4C4G40Gk8s-worker03192.168.91.102work…