//学生结构体数据 typedef struct Student { int sequence; //序号 char name[21]; //姓名 char stu_num[11]; //学号 char sex; //性别 男:M 女:F int age; //年龄 char dor_num[5]; // 宿舍号/房号 char flo_num[5]; //楼号 }Student;以此为结构体,填写函数void Straight_Insertion_Sort_Sequence(std::vector<Student>& stu); //按序号排序--直接插入排序
时间: 2023-08-06 13:07:07 浏览: 232
下面是按照序号进行直接插入排序的函数实现:
```c++
void Straight_Insertion_Sort_Sequence(std::vector<Student>& stu) {
int n = stu.size();
for (int i = 1; i < n; i++) {
Student temp = stu[i];
int j = i - 1;
while (j >= 0 && stu[j].sequence > temp.sequence) {
stu[j + 1] = stu[j];
j--;
}
stu[j + 1] = temp;
}
}
```
该函数接受一个 `vector<Student>` 类型的参数 `stu`,按照学生的序号进行直接插入排序,并直接修改原 `vector` 中的元素顺序。具体实现过程为:
1. 初始化变量 `n` 为 `stu` 中元素的个数。
2. 循环变量 `i` 从 1 到 `n-1`,表示对序号为 `i` 的学生进行排序。
3. 将当前学生 `stu[i]` 存储在临时变量 `temp` 中。
4. 从上一个学生开始往前遍历,如果遇到序号比 `temp` 大的学生,则将该学生后移一个位置。
5. 最终将 `temp` 插入到合适的位置。
6. 循环结束后,`stu` 中的元素已经按照序号排序。
相关问题
#include <stdio.h> #include <string.h> #define MAX_STUDENT_NUM 30 //最大学生个数 #define MAX_COURSE_NUM 6 //最大课程个数 #define NAME_LEN 20 //最大名字个数 typedef struct Student { char id[10];//学生学号 char name[NAME_LEN];//姓名 int scores[MAX_COURSE_NUM];//各科分数 int total_score;//总分 float avg_score;//平均分 } XUESHENG;//将结构体名称命名为XUESHENG void sort_by_total_score(XUESHENG students[], int num);//输出按每个学生的总分由高到低排出名次表 请补充函数
下面是 sort_by_total_score 函数的实现代码:
```c
void sort_by_total_score(XUESHENG students[], int num) {
int i, j;
XUESHENG temp;
//按学生总分由高到低排序
for(i = 0; i < num; i++) {
for(j = i + 1; j < num; j++) {
if(students[i].total_score < students[j].total_score) {
temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
//输出名次表
printf("名次\t学号\t姓名\t总分\t平均分\n");
for(i = 0; i < num; i++) {
printf("%d\t%s\t%s\t%d\t%.2f\n", i+1, students[i].id, students[i].name, students[i].total_score, students[i].avg_score);
}
}
```
该函数使用冒泡排序的方法按学生总分由高到低排序,然后输出名次表。具体实现过程为:
1. 使用双重循环遍历所有学生,将总分高的学生排在前面,总分低的学生排在后面。
2. 输出名次表,其中包括学生的名次、学号、姓名、总分和平均分。
该函数的参数为一个学生结构体数组和学生的个数,返回值为 void,即没有返回值。
pcb[PCBNum];//创建进程结构体数组
在计算机科学中,进程控制块(PCB)是操作系统用于跟踪进程的数据结构。在C语言中,可以通过定义结构体来创建进程控制块数组。下面是一个简单的例子[^1]:
```c
struct Process
{
int processID;
char processName[20];
float processTime;
};
struct Process pcb[PCBNum]; //定义进程控制块数组
```
这个例子定义了一个包含三个成员的 `Process` 结构体,分别是进程 ID、进程名称和进程运行时间。`pcb[PCBNum]` 便是一个进程控制块数组, `PCBNum`是数组的大小。在这个数组中,每个元素都是一个 `Process` 结构体,可以使用下标来访问每个元素。
阅读全文