(1)为学生数据创建一个栈,学生数据包括学号,姓名,专业,英语成绩 (2)班级有m名学生,请将他们的数据入栈 (3)请找到第三位学生的数据,输出。不破坏栈中数据 (4)第九位和第八位同学离开班级,请删除他们的数据 (5)请按照英语成绩从高到低排序。
时间: 2023-04-10 17:03:35 浏览: 136
以下是我作为 CSDN 开发的 C知道 的回答:
1. 为学生数据创建一个栈,学生数据包括学号,姓名,专业,英语成绩
可以使用结构体来表示学生数据,然后创建一个栈来存储学生数据。以下是示例代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 20
#define MAX_MAJOR_LEN 20
#define MAX_STUDENT_NUM 100
typedef struct {
int id;
char name[MAX_NAME_LEN];
char major[MAX_MAJOR_LEN];
int english_score;
} Student;
typedef struct {
Student data[MAX_STUDENT_NUM];
int top;
} Stack;
void init_stack(Stack *s) {
s->top = -1;
}
int is_stack_empty(Stack *s) {
return s->top == -1;
}
int is_stack_full(Stack *s) {
return s->top == MAX_STUDENT_NUM - 1;
}
void push(Stack *s, Student student) {
if (is_stack_full(s)) {
printf("Stack is full!\n");
return;
}
s->top++;
s->data[s->top] = student;
}
Student pop(Stack *s) {
if (is_stack_empty(s)) {
printf("Stack is empty!\n");
exit(1);
}
Student student = s->data[s->top];
s->top--;
return student;
}
```
2. 班级有m名学生,请将他们的数据入栈
假设学生数据已经读入到一个数组中,可以使用循环将学生数据依次入栈。以下是示例代码:
```
void push_students(Stack *s, Student students[], int n) {
for (int i = 0; i < n; i++) {
push(s, students[i]);
}
}
```
3. 请找到第三位学生的数据,输出。不破坏栈中数据
可以使用一个临时栈来保存弹出的学生数据,直到找到第三位学生为止。以下是示例代码:
```
void find_third_student(Stack *s) {
Stack tmp;
init_stack(&tmp);
int count = 0;
while (!is_stack_empty(s)) {
Student student = pop(s);
push(&tmp, student);
count++;
if (count == 3) {
printf("Third student: id=%d, name=%s, major=%s, english_score=%d\n",
student.id, student.name, student.major, student.english_score);
break;
}
}
while (!is_stack_empty(&tmp)) {
Student student = pop(&tmp);
push(s, student);
}
}
```
4. 第九位和第八位同学离开班级,请删除他们的数据
可以使用一个临时栈来保存弹出的学生数据,直到找到第八位和第九位学生为止,然后将它们弹出。以下是示例代码:
```
void remove_eighth_and_ninth_students(Stack *s) {
Stack tmp;
init_stack(&tmp);
int count = 0;
while (!is_stack_empty(s)) {
Student student = pop(s);
if (count != 7 && count != 8) {
push(&tmp, student);
}
count++;
}
while (!is_stack_empty(&tmp)) {
Student student = pop(&tmp);
push(s, student);
}
}
```
5. 请按照英语成绩从高到低排序
可以使用冒泡排序来实现。以下是示例代码:
```
void sort_by_english_score(Stack *s) {
for (int i = 0; i < s->top; i++) {
for (int j = 0; j < s->top - i; j++) {
if (s->data[j].english_score < s->data[j+1].english_score) {
Student tmp = s->data[j];
s->data[j] = s->data[j+1];
s->data[j+1] = tmp;
}
}
}
}
```
注意:以上代码仅供参考,可能存在错误或不足之处,需要根据实际情况进行修改和完善。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)