《算法笔记知识点记录》第二章——快速入门4[结构体、输入输出、复杂度和黑盒测试](1)

简介: 《算法笔记知识点记录》第二章——快速入门4[结构体、输入输出、复杂度和黑盒测试](1)

☘前言☘

咕咕咕、鸽子精又回来了。🐒

今天是我开坑的第四次发文,大家最近应该都在忙期末把?明天要考六级的我还在写文章是不是疯了-.-

今天是基础知识的最后一次,接下来慢慢就要开始接触算法了,有没有很期待?如果我有哪些没有讲清楚的,欢迎大家联系我,你提出的问题是我修改完善的基础,万分感谢。


欢迎大家加入我的打卡队列,如果你刷完了对你有帮助请你评论一个打卡。

如果你觉得这本书有用的话还希望多多支持作者。

如果觉得这个文章有用还希望大家交出素质三连呀。


🧑🏻作者简介:一个从工业设计改行学嵌入式的年轻人

✨联系方式:2201891280(QQ)

📔源码地址:https://gitee.com/xingleigao/algorithm-notes

⏳全文大约阅读时间: 80min


文章目录

 ☘前言☘

 🍭1. 基础知识点

          ⚽️1.1 结构体(struct)

                    🏀1.1.1 结构体的定义

                    🏈1.1.2 访问结构体内的元素

                    ⚾️1.1.3 结构体的初始化

          📡1.2 cin与cout

           🎚1.3 浮点数的比较

          🥩1.4 复杂度

                    🍔1.时间复杂度

                    🍟2.空间复杂度

                    🌭3.编码复杂度

           🥚1.5黑盒测试

                    🥙1.单点测试

                    🥗2.多点测试

 🐳课后习题

🍭1. 基础知识点

其实上次文章所讲的指针是c语言最难的部分,也不知道大家消化了没有,最好的方式肯定是多做题啦。我补充了一个参考链接,如果还是懵懵懂懂的可以看看上次文章里提到的链接0.0


⚽️1.1 结构体(struct)

到现在,我们了解了基本数据类型的使用(char、int、long long 、double),但是如果我们需要一种情况:实现一个手机通讯录:需要以人为单位,且每个人的内部信息由姓名、年龄、手机号、住址信息之类的不同信息组成,这个时候如果用之前的单种数据就会非常不方便,就需要结构体。


🏀1.1.1 结构体的定义

结构体的基本格式如下:


struct Name{
  //一些基本数据类型或者自定义的数据类型
};


当需要一些相关的变量的放在一起存储的时候,只需要依次写出他们的数据类型和变量名称。

举个栗子🌰


struct studentInfo{
  int id;
  char gender; //'F' or 'M'
  char name[20];
  char magor[20];
}Alice, Bob, stu[1000];


其中studentInfo是结构体类型名。内部定义了id(学号)、gender(性别)、name(姓名)和mahor(专业),这些就是单个学生的信息。而结构体外定义了Alice和Bob两个结构体变量和一个stu结构体数组。

结构体除了在定义的时候进行定义外,还可以在使用的时候定义


studentInfo Alice;
studentInfo stu[1000];


注意:


c语言里的struct不能省略,所以定义一个结构体变量c里面的写法是:

struct studentInfo Alice;


结构体能定义除自身的的所有数据类型。但是可以定义自身类型的指针

struct node{
  node n; //错误示例
  node *next;//c语言里的写法是 struct node *next;
}


🏈1.1.2 访问结构体内的元素

访问结构体内的元素有两种方法:.和->操作。现在有如下结构体


struct studentInfo{
  int id;
  char name[20];
  studentInfo *next;
}stu, *p;


这样多了一个指针来指向下一个学生地址,且定义了普通变量stu和指针变量p

于是访问数组元素的写法如下:


stu.id;
stu.name;
stu.next;
(*p).id;
p->name;
p->next;


观察上面的写法,其实(*p).id和p->id写法是完全等效的。可以说->就是一种简洁写法罢了。不过要注意这种写法是针对指针的,对于stu这种普通的结构体就不能使用!!!


⚾️1.1.3 结构体的初始化

这部分基本上都是C++的写法,C语言没有这些,老老实实自己初始化。。。

一般的做法是先声明一个变量。然后再初始化


stu.id = 1;
stu.gender = 'M';


还记得我们平常int类型可以声明的时候顺带初始化写法就是int i = 1;,那么结构体有没有这种写法呢?答案是有的。


构造函数

构造函数就是用来初始化结构体的一种函数,它直接定义在结构体中。

特点是不需要放回类型,且函数名和结构体名相同

一般来说都有一个默认的构造函数就是studentInfo(){}

就是声明的时候对变量不做任何初始化操作。


struct studentInfo{
  int id;
  char gender;
  studentInfo(){}//默认构造函数
}


我们也可以手动重构这个函数


struct studnetInfo{
  int id;
  char name[20];
  studentInfo(int _id, int _gender){
  id = _id;
  gender = _gender;
  }
}


当然可以做一个简化


struct studentInfo{
  int id;
  char name[20];
  studentInfo(int _id, int _gender) : id(_id), gender(_gender) {}
}


这样就可以在声明的时候顺带赋值了

studentInfo stu = studentInfo(10086, 'M');

如果自定义了构造函数,那么就不能不初始化就定义结构体变量。 也就是下面的写法就不合法了。


studentInfo stu;


那如果我们想要都要呢?

这里其实利用的是c++语言的函数多态,我们定义多个同名函数,根据变量数目的多少,进行调用。


#include<stdio.h>
struct Point{
  int x,y;
  Point(){} //不初始化就定义
  Point(int _x, int _y) : x(_x), y(_y) {} //用提供的x、y初始化结构体
}pt[10];
int main(){
  int num = 0;
  for(int i = 0;i <= 3;i++)
  for(int j = 0;j <=3;j++)
    pt[num++] = Point(i, j);  //调用构造函数
  for(int i = 0;i < num;i++)
  printf("%d,%d\n",pt[i].x,pt[i].y);
  return 0 ;
}

构造函数在结构体内元素较多的时候能极大的简化我们的代码。

相关文章
|
1月前
|
机器学习/深度学习 存储 算法
【算法与数据结构】复杂度深度解析(超详解)
【算法与数据结构】复杂度深度解析(超详解)
【算法与数据结构】复杂度深度解析(超详解)
|
2月前
|
机器学习/深度学习 存储 算法
如何评判算法好坏?复杂度深度解析
如何评判算法好坏?复杂度深度解析
26 0
|
2月前
|
存储 算法
数据结构与算法:复杂度
数据结构: 数据结构是用于存储和组织数据的方式,以便可以有效地访问和修改数据。不同的数据结构适用于不同类型的应用,并且具体的数据结构可以大幅影响程序的性能。数据结构分为两大类:线性数据结构和非线性数据结构。 算法: 算法是完成特定任务的一系列操作步骤,是解决问题的明确规范。算法的效率通常通过时间复杂度和空间复杂度来评估,即算法执行所需的时间和空间资源。
|
2月前
|
算法 搜索推荐 Java
数据结构与算法(Java篇)笔记--希尔排序
数据结构与算法(Java篇)笔记--希尔排序
|
2月前
|
机器学习/深度学习 存储 算法
【算法沉淀】刷题笔记:并查集 带权并查集+实战讲解
【算法沉淀】刷题笔记:并查集 带权并查集+实战讲解
|
2月前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到&quot;hand.txt&quot;文件。
|
1天前
|
搜索推荐 C语言
【C语言/数据结构】排序(归并排序|计数排序|排序算法复杂度)
【C语言/数据结构】排序(归并排序|计数排序|排序算法复杂度)
8 0
|
8天前
|
算法 TensorFlow 算法框架/工具
基于直方图的图像阈值计算和分割算法FPGA实现,包含tb测试文件和MATLAB辅助验证
这是一个关于图像处理的算法实现摘要,主要包括四部分:展示了四张算法运行的效果图;提到了使用的软件版本为VIVADO 2019.2和matlab 2022a;介绍了算法理论,即基于直方图的图像阈值分割,通过灰度直方图分布选取阈值来区分图像区域;并提供了部分Verilog代码,该代码读取图像数据,进行处理,并输出结果到&quot;result.txt&quot;以供MATLAB显示图像分割效果。
|
22天前
|
算法 计算机视觉 异构计算
基于直方图相似性的图像分类算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容包含了一段关于图像处理算法的摘要,主要包括: 1. 展示了MATLAB和FPGA的测试结果图像,显示了图像读取完成的标志和相似性指标,其中图1与图2有较强相似性,图1与图3相似性较弱。 2. 算法使用的是vivado 2019.2和matlab 2022A版本。 3. 算法原理涉及图像直方图统计和直方图相似性度量,通过计算直方图的差异来衡量图像相似度,FPGA实现包括图像采集、直方图计算、比较和分类决策步骤。 4. 提供了一个部分核心Verilog程序,用于读取图像数据并在FPGA上进行直方图相似性计算。
|
28天前
|
算法 安全 Java
java代码 实现AES_CMAC 算法测试
该代码实现了一个AES-CMAC算法的简单测试,使用Bouncy Castle作为安全提供者。静态变量K定义了固定密钥。`Aes_Cmac`函数接受密钥和消息,返回AES-CMAC生成的MAC值。在`main`方法中,程序对给定的消息进行AES-CMAC加密,然后模拟接收ECU的加密结果并进行比较。如果两者匹配,输出&quot;验证成功&quot;,否则输出&quot;验证失败&quot;。辅助方法包括将字节转为16进制字符串和将16进制字符串转为字节。