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,一经查实,立即删除!

相关文章

6.5 会话与输入事件(二)

一,键盘会话 键盘输入会话是用类型SCREEN_EVENT_KEYBOARD创建的,可以与可能生成这些类型输入事件的一个或多个设备相关联。 当输入是从键盘设备输入文本时,使用键盘会话。不使用键盘会话的SCREEN_PROPERTY_MODE 属性。 二,多点触控会话 2.1 多点触控会话 多点触控(to…

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主机接口&…

保护用户隐私:自定义Java注解实现API响应数据脱敏

在数字化时代&#xff0c;数据隐私的保护变得愈发重要。尤其是在处理用户数据时&#xff0c;我们必须确保敏感信息不会被无意中泄露。作为开发者&#xff0c;我们有责任确保在应用程序的接口&#xff08;API&#xff09;返回数据时&#xff0c;敏感字段如手机号、邮箱、身份证号…

不同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;此处截…

基于变态模态分解+bp-rf的轴承故障分类,基于变态模态分解的+BP神经网络-随机森林的轴承故障分类

目录 背影 摘要 随机森林的基本定义 随机森林实现的步骤 基于随机森林的机器启动识别 代码下载链接: 基于变态模态分解+bp-rf的轴承故障分类,基于变态模态分解的+BP神经网络-随机森林的轴承故障分类(代码完整,数据齐)资源-CSDN文库 https://download.csdn.net/download/ab…

LeetCode2706. Buy Two Chocolates

文章目录 一、题目二、题解 一、题目 You are given an integer array prices representing the prices of various chocolates in a store. You are also given a single integer money, which represents your initial amount of money. You must buy exactly two chocolat…

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;提高企业形象。通过百度百科展示公司的发展历程、领导团队…

FormData传送复杂数据

FormData 是一个用于创建表单数据对象的 JavaScript 类。它通常用于通过 JavaScript 发送表单数据&#xff0c;尤其是用于发送 AJAX 请求时非常有用。 使用 FormData 可以方便地构建一个以 multipart/form-data 格式提交的表单数据&#xff0c;这允许你在发送 XMLHttpRequest …

JDBC学习笔记第七篇

#druid.properties配置文件 通过读取外部配置文件的方法,方法实例化druid连接池对象 # key value > java Properties (key | value) # durid配置的key固定命名 #edruid连接池需要的配置參数,Key固定命名 driverClassNamecom.mysql.cj.jdbc.Driver usernameroot password123…

AI-ChatGPTCopilot

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

SpringBoot 集成 Kafka消息中间件,Docker安装Kafka环境

前述 提供kafka、zooker在docker环境下进行安装的示例&#xff0c;springBoot集成kafka实现producer-生产者和consumer-消费者(监听消费&#xff1a;single模式和batch模式)的功能实现 环境安装 # 拉取镜像 docker pull wurstmeister/zookeeper docker pull wurstmeister/kafka…

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…