算法笔记day1小结

这篇具有很好参考价值的文章主要介绍了算法笔记day1小结。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近在通过胡凡的算法笔记一书学习算法,准备开个帖子记录下每日学习进展,话不多说那就开始吧!

2.7指针

定义:内存地址称为指针 , 指针变量即存储地址的变量。(虽然有点绕口,但可以理解为指针就是一个地址,对应着内存中的一个存储单元。unsigned类型的整数)。

指针的定义:

2.7.1 变量取址 &a (变量前加&符号,取变量的地址)

2.7.2 直接定义指针变量:

int* p (*号跟在类型名后面或者变量名前面都可以,如果跟在类型名后面定义多个指针时只对第一个生效,后续变量名前面需要带*号如int* p, *a, *b, 所以定义多个指针变量时*号一般都统一放在变量名前面)

指针与函数:

传值与传址, 函数参数的传递方式如果是传值,函数体中操作变量则变量的值不一定改变(全局变量),若是传地址,则变量的值会随之改变

引用:

c++中的一个语法,定义如下:

int increase(int &a)

引用不产生副本,而是给原变量起了个别名,所以在函数体中如果有涉及到对变量的操作,会改变原变量的值。 

2.8 结构体

2.8.1 结构体的定义:

struct Node{

       int id;

        Node* next;

}node, n[100]; 

大括号外定义了Node类型的node,n是一个结构体数组。结构体里可以定义除了自己本身之外的任何数据类型,也可以定义自身类型的指针变量

2.8.2  结构体内元素的访问:

两种方式:“.” 和“->”

如node.id或者 (*(node.next)).id 或者 node.next->id

2.8.3 结构体的初始化

结构体内部会生成一个默认的构造函数: Node(){}; 我们可以重新定义构造函数 如:

Node(int _id, Node* _next){

        id = _id;

        next = _next;

}

也可以简化成一行:

Node(int _id, Node* _next):id(_id), next(_next){}

重新定义构造函数的好处是可以在定义结构体变量的时候直接给内部变量赋值,而不需要手动提供初始化参数。但是这时候就会把原来的构造函数覆盖掉,如果需要不经初始化定义则需将默认的构造函数也加上去。

2.9 补充

2.9.1 cin和cout

cin 和 cout为c++中的输入输出函数,需要引用头文件:

#include <iostream>

using namespace std;

使用方式如下:

int a;

double b;

char c[10];

cin >> a >> b >> c

(cin为将值读入变量所以箭头指向变量,cout为输出变量的值,则箭头指向cout,这样好记。)

如果需要读入一整行数据使用getline

char str[100];

cin.getline(str, 100);

如果是string容器,则

string str;

getline(cin, str);

cout如果要控制输出精度,则需要引用头文件:

#include <iomanip>

double b;

cout << setiosflags(ios::fixed) << setprecision(2) << b << " ggg" << "\n";

cin和cout在数据量大时比较耗时所以大部分时候推荐使用scanf,printf, 只有在十分必要的情况下如string容器才使用。

2.9.2 浮点数比较

浮点数在某些会损失精度的运算之后无法准确的比较值,这时候引入一个极小数来对误差进行修正。

默认使用的极小数为EPS 取10的-8次方或者表示为1e-8.

const double eps = 1e-8;                                      //一般使用的浮点精度误差范围

#define Equ(a,b) ((fabs((a)-(b))) < (eps))             // ==

#define More(a,b) (((a) - (b)) > (eps))                  // >

#define Less(a,b) (((a) - (b)) < (-eps))                  // <

#define MoreEqu(a, b) (((a) - (b)) > (-eps))          // >=

#define LessEqu(a, b) (((a) - (b)) < (eps))            // <=

2.10 黑盒测试(输入输出方式)

2.10.1 单点测试

对数据逐个测试,判断每组数据的输出结果是否正确(PAT采用这种方式)

2.10.2 多点测试

要求程序能一次运行所有数据

2.10.2.1 While --- EOF型

while(scanf("%d", &a) != EOF){

        ...

}

while(scanf("%s", str) != EOF){

        ...

}

while(gets(str) != NULL){

        ...

}

当题目没有给定输入条件时默认读取到文件末尾,正常的控制台输入一般不会失败,读取到文件末尾无法读取时scanf会返回-1,c语言中使用EOF(end of file)来代表-1。

2.10.2.2 While --- break型

题目要求当输入的数据满足某个条件时停止输入。有如下两种写法:

while(scanf("%d", &a) != EOF){

      if(a == 0 && b == 0) break;

}

while(scanf("%d", &a), a || b){

        ...

}

第二种写法更简洁。

2.10.2.3 While --- T型

题目给出测试数据的组数,然后才给出相应数量组数的输入数据,因此需要用一个变量T来存储组数。

int T, a;

scanf("%d", &T);

while(T--){

        scanf("%d", &a);

}

以上就是多点测试的三种输入类型,输出就不额外强调了。

多点测试中,每一次循环都要重置一下变量和数组,而重置数组一般使用memset或者fill函数文章来源地址https://www.toymoban.com/news/detail-827758.html

到了这里,关于算法笔记day1小结的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构与算法学习(day1)——简化版桶排序

    (1)我是一个大三的学生(准确来说应该是准大三,因为明天才报名哈哈哈)。 (2)最近就想每天闲着没事也刷些C语言习题来锻炼下编程水平,也一直在思考企业对应届大学生能力的要求,所以经常会想到关于面试的事情。由于我也没实习过,所以我对面试没有一个具象化

    2024年02月09日
    浏览(29)
  • itheima苍穹外卖项目学习笔记--Day1:项目介绍与开发环境搭建

    (1). 前端环境搭建 前端工程基于 nginx 运行 启动nginx:双击 nginx.exe 即可启动 nginx 服务,访问端口号为 80 (2). 后端环境搭建 后端工程基于 maven 进行项目构建,并且进行分模块开发 (3). 前后端联调 修改数据库中明文密码,改为MD5加密后的密文 修改Java代码,前端提交的密码进行

    2024年02月15日
    浏览(26)
  • LeetCode刷题记录——day1

    https://leetcode.cn/problems/h-index/description/?envType=study-plan-v2envId=top-interview-150 注:题目有点难理解,多读几遍 可以这样考虑,建立另一个临时数组 temp ,当第 i 篇文章被引用 citiations[i] 次时,令 j=citiations[i] 的 temp[j] 均加一,也就是现在对于任意 j 至少有 temp[j] 篇论文引用次数大

    2024年03月18日
    浏览(28)
  • Python Web开发记录 Day1:HTML

    名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 创作者:Code_流苏(CSDN) (一个喜欢古诗词和编程的Coder😊) 一、HTML 1、前端引入和HTML标签 ①前端引入 安装fllask 咱们的网站与别人的不一样: Flask框架为了让咱们写标签方便,支持将字符串写入到文件里面

    2024年02月21日
    浏览(30)
  • C++day1(笔记整理)

    1.第一个c++程序:hello world 2.cout的使用  3.输出斐波那契的前10项。    1 1 2 3 5 8 13 ···· 4. cin标准输入流对象 5.终端输入一个字符,判断该字符的类型,字母(大写/小写)、数字字符,其他字符。 6.局部变量和命名空间冲突 7.全局变量和命名空间冲突问题 8.命名空间的嵌套 9.给

    2024年02月12日
    浏览(25)
  • leedcode刷题笔记day1

    题目大意: 暴力解法 两个for循环(也是我一看到题目想到的方法) 枚举在数组中所有的不同的两个下标的组合逐个检查它们所对应的数的和是否等于 target 复杂度分析 时间复杂度:O(n2),这里 n 为数组的长度 空间复杂度:O(1),只用到常数个临时变量 使用哈希表 为了省去一层

    2024年01月20日
    浏览(22)
  • 算法刷题Day1 二分查找+移除元素

    代码随想录-数组-1.数组理论基础 数组是存放在 连续内存空间 上的 相同类型 数据的 集合 优点:常数时间复杂度访问元素 缺点: 在删除或者增添元素的时候,就难免要移动其他元素的地址 ,时间复杂度为O(n) 代码随想录-数组-2.二分查找 前提条件 二分查找前提条件: 数组

    2024年02月10日
    浏览(37)
  • 代码随想录算法练习Day1:二分查找

    题目链接:704. 二分查找 卡哥视频讲解:手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找 二分法概述: 二分法(Binary Search)是一种在有序数组或列表中查找目标元素的算法。 二分法使用前提 : 有序数组或列表 :二分法要求在查找的数据结

    2024年04月23日
    浏览(27)
  • UWB学习——day1

    UWB:Ultra Wideband(超宽频) UWB所谓的超宽频区别于其它近场通信技术可总结为 时域上跳跃,频域上矮胖 从图中可以看出,时域上通过短且强的脉冲信号,频域上主要是超宽的频谱(Spectrum) 调制(Modulation):把信号进行编码使其方便传播的过程 PPM 通过在 固定时间范围 内改

    2024年02月09日
    浏览(29)
  • 【算法训练(day1)】李白打酒加强版(dp问题)

    目录 一.题目描述 输入格式 输出格式 输入输出样例 说明/提示 二.解题思路 定义状态 推导状态方程 细节处理  三.实现代码 四.小结一下 话说大诗人李白,一生好饮。幸好他从不开车。 一天,他提着酒壶,从家里出来,酒壶中有酒 22 斗。他边走边唱: 无事街上走,提壶去

    2024年02月02日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包