《算法笔记知识点记录》第二章——快速入门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月前
|
算法
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
65 1
|
1月前
|
算法 索引
❤️算法笔记❤️-(每日一刷-141、环形链表)
❤️算法笔记❤️-(每日一刷-141、环形链表)
45 0
|
1月前
|
算法
【❤️算法笔记❤️】-(每日一刷-876、单链表的中点)
【❤️算法笔记❤️】-(每日一刷-876、单链表的中点)
43 0
|
1月前
|
算法 API 计算机视觉
人脸识别笔记(一):通过yuface调包(参数量54K更快更小更准的算法) 来实现人脸识别
本文介绍了YuNet系列人脸检测算法的优化和使用,包括YuNet-s和YuNet-n,以及通过yuface库和onnx在不同场景下实现人脸检测的方法。
33 1
|
1月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
57 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
1月前
|
算法
❤️算法笔记❤️-(每日一刷-160、相交链表)
❤️算法笔记❤️-(每日一刷-160、相交链表)
17 1
|
30天前
|
移动开发 算法 前端开发
前端常用算法全解:特征梳理、复杂度比较、分类解读与示例展示
前端常用算法全解:特征梳理、复杂度比较、分类解读与示例展示
21 0
|
1月前
|
存储 算法
动态规划算法学习一:DP的重要知识点、矩阵连乘算法
这篇文章是关于动态规划算法中矩阵连乘问题的详解,包括问题描述、最优子结构、重叠子问题、递归方法、备忘录方法和动态规划算法设计的步骤。
100 0
|
1月前
|
数据可视化 搜索推荐 Python
Leecode 刷题笔记之可视化六大排序算法:冒泡、快速、归并、插入、选择、桶排序
这篇文章是关于LeetCode刷题笔记,主要介绍了六大排序算法(冒泡、快速、归并、插入、选择、桶排序)的Python实现及其可视化过程。
13 0
|
1月前
|
算法
❤️算法笔记❤️-(每日一刷-83、删除排序链表中的重复项)
❤️算法笔记❤️-(每日一刷-83、删除排序链表中的重复项)
30 0