结构体的定义:结构体是由一批数据组合而成的结构型数据。组成结构型数据的每个数据称为结构型数据的“成员”,其描述了一块内存区间的大小及解释意义。
我们在解决实际问题的时候,经常会遇见用几个数据类型来表示某个变量。
例如我们在用变量来表示一个学生的时候,会用到他的(字符串)姓名,(字符串)性别,(整型)学号
那我们要怎么集合这些学生的信息
形成一个整体学生呢
这个时候就用到了结构体struct
struct可以将你需要来表示某个变量的信息集合在一起
将结构体封装好以后就可以重复使用
让我们来看一下如何封装一个学生的结构体
struct student//学生
{
string name;//姓名
string sex;//性别
int ID;//学号
};
结构体封装好了
那我们要怎么才能对封装好的结构体进行使用呢
结构体常用的定义的方法:
1.直接在结构体后面进行定义
struct student//学生
{
string name;//姓名
string sex;//性别
int ID;//学号
}s1={"勇裴","男",1234567890},s2={"逊宾","男",1234567891};
2.用struct构成局部变量
struct student//学生
{
string name;//姓名
string sex;//性别
int ID;//学号
};
int main()
{
student s1={"勇裴","男",1234567890},s2={"逊宾","男",1234567891};
return 0;
}
我们来看一下他们的输出结果(方式2在平时生活使用较为广泛,但他们最终的效果都一样)
#include<iostream>
using namespace std;
#include<string>
struct student//学生
{
string name;//姓名
string sex;//性别
int ID;//学号
};
int main()
{
student s1 = { "勇裴","男",1234567890 }, s2 = { "逊宾","男",1234567891 };
cout << s1.name << " " << s1.sex << " " << s1.ID << endl;
cout << s2.name << " " << s2.sex << " " << s2.ID << endl;
return 0;
}
输出结果:
效果很明显
我们通过结构体
轻松的将一个学生的基本信息结合到了一起
那我们在做题的时候会在哪些方面用到结构体呢
博主在这里介绍几种常用的结构体的使用场景
1.在进行bfs和dfs的时候
1)在做深度优先搜索(dfs)题的时候
通常我们进行dfs 的时候可能会碰到
需要进行上下左右的移动
这个时候我们就可以用
struct来存我们要走的方向
例如:
struct direction
{
int x;//代表第几行
int y;//代表第几列
};
一般使用模板:
struct direction
{
int x;//代表第几行
int y;//代表第几列
}around[] = { {0,1} ,{1,0},{0,-1},{-1,0} };
for (int i = 0; i < 4; i++)//分别走四个方向
{
int fx = nowx + around[i].x;
int fy = nowy + around[i].y;
if (x > n || y > m || x < 1 || y < 1) continue;//超出所给地方的边界
if (......) continue;//......代表是什么不满足条件的走法(如该地方有障碍物不能走)
vis[fx][fy] = 1;//记录该位置走过
dfs(fx, fy);//继续dfs
}
2)在做bfs的时候:
我们除了可以和做dfs一样用来当做运动方向
还可以用来存队列queue里面的位置
一般查找时使用模板:
struct direction
{
int x;//代表第几行
int y;//代表第几列
}around[] = { {0,1} ,{1,0},{0,-1},{-1,0} };
struct node
{
int x;
int y;
};
for (int i = 0; i < 4; i++)
{
node t;
int t.x = nowx + around[i].x;
int t.y = nowy + around[i].y;
if (x > n || y > m || x < 1 || y < 1) continue;//超出所给地方的边界
if (......) continue;//......代表是什么不满足条件的走法(如该地方有障碍物不能走)
vis[fx][fy] = 1;//记录该位置走过
q.push(t);//如果满足条件那么将t放入队列里面
}
2.链表
对链表进行连接的时候
用一个结构体连接下一个结构体
构成链表
struct Node {
int data;
struct Node * nextNode; //指针
};
恭喜!你已经成功对struct了解了常用的用法了,加油!!!
PS:今人不见古时月,今月曾经照古人。