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://xiahunao.cn/news/2660557.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

听GPT 讲Rust源代码--src/tools(29)

File: rust/src/tools/clippy/clippy_lints/src/unused_peekable.rs 在Rust源代码中&#xff0c;rust/src/tools/clippy/clippy_lints/src/unused_peekable.rs这个文件是Clippy工具中一个特定的Lint规则的实现文件&#xff0c;用于检测未使用的Peekable迭代器。 Peekable迭代器…

kubeadm开快速的搭建一个k8s集群

kubeadm开快速的搭建一个k8s集群 二进制适合大集群&#xff0c;50台以上主机 kubeadm更适合中小企业的业务集群。 master节点 20.0.0.92 docker kubelet kubeadm kubectl flannel node1 20.0.0. 94 docker kubelet kubeadm kubectl flanne node2 20.0.0.03 docker kubelet…

基于YOLOv8深度学习的45种交通标志智能检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

cnPuTTY 0.80.0.1—PuTTY Release 0.80中文版本简单说明~~

2023-12-18 官方发布了PuTTY 0.80本次发布主要是针对Terrapin攻击(CVE-2023-48795)的修改发布。 更多详细的内容请查看PuTTY Change Log。 有关Terrapin攻击可用简单参考&#xff1a;警告&#xff01;&#xff01;&#xff01;Terrapin攻击(CVE-2023-48795)~~~ 为了缓解此漏洞…

mysql 与 支持语言的连接驱动 jdbc connector JAR 包

有位网友问我有没有 mysql jdbc驱动 &#xff0c;我刚开始一脸懵逼&#xff0c;后来明白过来&#xff0c;在网上找了几篇文章看看了解了解&#xff0c;得出如下解决办法&#xff1a; Mysql jdbc 下载&#xff1a; 网址&#xff1a; MySQL :: Download Connector/J 步骤1 &a…

AWS SSM中切换AWS不同的profile

问题 在自己的开发笔记本上面&#xff0c;通过AWS SSM方式访问EC2服务&#xff0c;只需要通过简单的命令就可以访问EC2了&#xff0c;如下&#xff1a; aws ssm start-session --target i-xxxx12350这个命令就是利用aws命令行工具中ssm提供的会话管理能力访问ec2服务&#xf…

Kafka学习笔记1(千峰教育)

Kafka学习笔记1&#xff08;千峰教育&#xff09; 一、为什么使用消息队列1.使用同步的通信方式来解决多个服务之间的通信2.使用异步的通信方式 二、消息队列的流派1.有broker2.无broker 三、Kafka的基本知识1.Kafk2a的安装2.Kafka中的一些基本概念3.创建topic4.发送消息5.消费…

【2023年中国高校大数据挑战赛 】赛题 B DNA 存储中的序列聚类与比对 Python实现

【2023年中国高校大数据挑战赛 】赛题 B DNA 存储中的序列聚类与比对 Python实现 1 题目 赛题 B DNA 存储中的序列聚类与比对 近年来&#xff0c;随着新互联网设备的大量涌入和对其服务需求的指数级增长&#xff0c;越来越多的数据信息被产生与收集。预计到 2021 年&#xf…

网络攻防中应该掌握的进阶工具udp2raw,通过raw socket给UDP包加上TCP或ICMP header,进而绕过UDP屏蔽或QoS

网络攻防中应该掌握的进阶工具udp2raw,通过raw socket给UDP包加上TCP或ICMP header,进而绕过UDP屏蔽或QoS。 udp2raw tunnel,通过raw socket给UDP包加上TCP或ICMP header,进而绕过UDP屏蔽或QoS,或在UDP不稳定的环境下提升稳定性。可以有效防止在使用kcptun或者finalspeed的…

Unreal Engine游戏引擎的优势

在现在这个繁荣的游戏开发行业中&#xff0c;选择合适的游戏引擎是非常重要的。其中&#xff0c;Unreal Engine作为一款功能强大的游戏引擎&#xff0c;在业界广受赞誉。那Unreal Engine游戏引擎究竟有哪些优势&#xff0c;带大家简单的了解一下。 图形渲染技术 Unreal Engin…

gnu工程的编译 - 以libiconv为例

文章目录 gnu工程的编译 - 以libiconv为例概述gnu官方源码包的发布版从官方的代码库直接迁出的git版源码如果安装了360, 需要添加开发相关的目录到信任区生成 configrue 的方法备注END gnu工程的编译 - 以libiconv为例 概述 gnu工程的下载分2种: gnu官方源码包的发布版 这种…

中文版大模型 Token 成本计算器

分享一个轻量的小工具&#xff0c;10MB 左右&#xff0c;能够帮助你直观的了解大模型 Token 的计算方法。 希望能够帮助到想了解或者正在规划模型 API 使用成本的你。 写在前面 之所以折腾这个小工具&#xff0c;是因为有朋友和我提问&#xff0c;大模型 API 的 Token 到底是…

托管在亚马逊云科技的向量数据库MyScale如何借助AWS基础设施构建稳定高效的云数据库

MyScale是一款完全托管于亚马逊云科技&#xff0c;支持SQL的高效向量数据库。MyScale的优势在于&#xff0c;它在提供与专用向量数据库相匹敌甚至优于的性能的同时&#xff0c;还支持完整的SQL语法。以下内容&#xff0c;将阐述MyScale是如何借助亚马逊云科技的基础设施&#x…

手机/平板实现电脑第三屏-记录极简

软件&#xff1a; 手机 平板 : moonlight 电脑&#xff1a; 1 KtzeAbyss/Easy-Virtual-Display 2 Parsec Virtual Display Driver https://builds.parsec.app/vdd/parsec-vdd-0.38.0.0.exe 3 LizardByte/Sunshine: Self-hosted game stream host for Moonlight. (gith…

第十四章 Sentinel实现熔断与限流

Sentinel实现熔断与限流 gitee&#xff1a;springcloud_study: springcloud&#xff1a;服务集群、注册中心、配置中心&#xff08;热更新&#xff09;、服务网关&#xff08;校验、路由、负载均衡&#xff09;、分布式缓存、分布式搜索、消息队列&#xff08;异步通信&#x…

OpenCV-Python(21):轮廓特征及周长、面积凸包检测和形状近似

2. 轮廓特征 轮廓特征是指由轮廓形状和结构衍生出来的一些特征参数。这些特征参数可以用于图像识别、目标检测和形状分析等应用中。常见的轮廓特征包括&#xff1a; 面积&#xff1a;轮廓所包围的区域的面积。周长&#xff1a;轮廓的周长&#xff0c;即轮廓线的长度。弧长&…

Linux 线程概念

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

Web漏洞—安全评估基础知识

一个安全评估的过程&#xff0c;可以简单地分为4个阶段:资产等级划分、威胁分析、风险分析、确认解决方案。 一般来说&#xff0c;按照这个过程来实施安全评估&#xff0c;在结果上不会出现较大的问题。这个实施的过程是层层递进的,前后之间有因果关系。 资产等级划分 资产等级…

【CSS3】第4章 CSS3选择器

学习目标 熟悉属性选择器的用法&#xff0c;了解不同属性选择器的功能。 掌握关系选择器的用法&#xff0c;能够使用关系选择器选取父标签中嵌套的子标签。 掌握结构化伪类选择器的用法&#xff0c;能够使用不同功能的结构化伪类选择器精准控制标签样式。 掌握状态化伪类选择…

HCIA-Datacom题库(自己整理分类的)——OSPF协议多选

ospf的hello报文功能是 邻居发现 同步路由器的LSDB 更新LSA信息 维持邻居关系 下列关于OSPF区域描述正确的是 在配置OSPF区域正确必须给路由器的loopback接配置IP地址 所有的网络都应在区域0中宣告 骨干区域的编号不能为2 区域的编号范围是从0.0.0.0到255.255.255.255…