元素在结构体用顺序表插入元素怎么写
时间: 2023-12-04 11:01:41 浏览: 29
假设我们已经定义了一个结构体 `Student`,其中包括了学生的姓名和年龄:
```c
typedef struct {
char name[20];
int age;
} Student;
```
同时,我们用顺序表来存储学生信息,可以定义一个数组来存储:
```c
#define MAX_STUDENTS 100
Student students[MAX_STUDENTS];
int num_students = 0;
```
现在,我们要实现一个函数 `insert_student`,用来向顺序表中插入一个新的学生。对于这个函数,我们需要传入两个参数:要插入的学生信息以及要插入的位置。假设要插入的位置是 `pos`(从 0 开始计数),则可以按照以下步骤进行:
1. 先将位置 `pos` 后面的所有元素依次后移一位,为要插入的元素腾出空间:
```c
for (int i = num_students; i > pos; i--) {
students[i] = students[i-1];
}
```
2. 将要插入的元素放到空出来的位置上:
```c
students[pos] = new_student;
```
3. 更新学生数量:
```c
num_students++;
```
完整的代码如下所示:
```c
void insert_student(Student new_student, int pos) {
if (num_students >= MAX_STUDENTS) {
printf("Error: too many students\n");
return;
}
if (pos < 0 || pos > num_students) {
printf("Error: invalid position\n");
return;
}
for (int i = num_students; i > pos; i--) {
students[i] = students[i-1];
}
students[pos] = new_student;
num_students++;
}
```
调用该函数的方式如下:
```c
Student new_student = {"Tom", 20};
int pos = 1;
insert_student(new_student, pos);
```
这将在顺序表的第 2 个位置(从 0 开始计数)插入一个名为 "Tom"、年龄为 20 的学生。