初次见到结构体,第一印象就是结构体实在好用,将多种数据类型不同的数据存到一个“包”里,这样就可以避免定义多个、多种类型的数组来存储多个且不同类型的数据,使代码更加简洁。在处理比如学校学生信息的时候,诸如学号,姓名,年龄,家庭地址等关于同一名学生的信息就可以同时输入输出,极为简便。在没有学习高级算法之前,像按照年龄,字典序将学生信息从大到小或从小到大排序后输出的问题,就只能使用在数组中常见的排序方法例如冒泡排序等等。引用结构体成员的一般形式是结构体变量.成员名,用指针则是结构体变量->成员名,所以像诸如stu[i].name等等出现的就很是频繁,代码看上去很长。所以就需要高级算法来尽量减少stu[i].name这样的引用次数。例如H题(病人的诊治):
题目:
感染新病毒后,来医院就诊的病人越来越多,每位病人包括的信息如下:姓名、病重程度和年龄。 对于来就诊的病人,医院按照如下规则对病人进行排序并进行诊治,具体规则为:病重程度高的优先诊治,同样病重程度,优先诊治年龄大的,如果年龄也相同,优先诊治名字按照字典顺序排在前面的。现在给出n个病人的信息,请编程输出排序后病人的信息。 输入描述: 共n + 1行, 第一行,一个整数n(3≤n≤1000),表示n个病人, 第2至第n + 1行,每行为一个病人的信息,包括姓名(长度小于100)、病重程度和年龄,用空格分隔。 输出描述: 排序后病人的信息,共n行,每行为一个病人的信息。
如果用冒泡排序,需要使用三次冒泡,代码冗长不说,还容易出错。但如果运用高级算法,就会简单得多。
头文件添加<algorithm>后,就可以直接使用sort函数,它的形式很多,本题适用其中一种:
struct Patient {
    string name;
    int severity;
    int age;
};
bool cmp(Patient p1, Patient p2) 
{
    if (p1.severity!=p2.severity) 
    {
    return p1.severity>p2.severity;
    }else if(p1.age!=p2.age) 
    {
    return p1.age>p2.age;
    }else 
    {
    return p1.name<p2.name;
    }
}
sort(patients,patients+n,cmp);
这里运用sort函数,创建返回值为bool型的函数cmp,按照题意先将severity高的排在前面,之后再将age大的排在前面,最后再将字典顺序(name)小的排在前面,这样最后在主函数里就只需输入输出结构体成员就可以了,代码简短清晰。
之后和结构体有关的就是链表了,它乍一看很难写,但只要将其画在纸上一遍就可以理解了。链表的优点是可以随时添加或删除节点,可以使用分散的内存,一般不会出现内存超限的情况。
总结一下就是结构体作为一个实用的工具本身不难理解,很容易使用,难理解的就是结构体和链表的组合使用,另外就是运用高级算法可以极大的减少代码,降低出错率,提高代码可读性。