定义学生信息的栈数据结构 (包括 学号 姓名 成绩) 2. 设计栈的初始化、入栈、出栈等功能函数,实现学生信息的依次入栈与出栈
时间: 2023-05-29 18:03:47 浏览: 142
1. 学生信息的栈数据结构定义如下:
```
typedef struct {
int id; // 学号
char name[20];// 姓名
float score; // 成绩
} Student;
typedef struct {
Student *data; // 栈数据
int top; // 栈顶指针
int size; // 栈容量
} StudentStack;
```
2. 栈的初始化、入栈、出栈等功能函数如下:
```
// 初始化栈
void initStack(StudentStack *s, int size) {
s->data = (Student *)malloc(size * sizeof(Student));
s->top = -1;
s->size = size;
}
// 判断栈是否为空
int isEmpty(StudentStack *s) {
return s->top == -1;
}
// 判断栈是否已满
int isFull(StudentStack *s) {
return s->top == s->size - 1;
}
// 入栈
int push(StudentStack *s, Student stu) {
if (isFull(s)) {
return 0;
}
s->data[++s->top] = stu;
return 1;
}
// 出栈
int pop(StudentStack *s, Student *stu) {
if (isEmpty(s)) {
return 0;
}
*stu = s->data[s->top--];
return 1;
}
```
3. 实现学生信息的依次入栈与出栈的代码如下:
```
int main() {
StudentStack stack;
int n, i;
Student stu;
printf("请输入栈的大小:");
scanf("%d", &n);
initStack(&stack, n);
printf("请输入%d个学生的信息:\n", n);
for (i = 0; i < n; i++) {
printf("请输入第%d个学生的学号、姓名、成绩:", i + 1);
scanf("%d%s%f", &stu.id, stu.name, &stu.score);
push(&stack, stu);
}
printf("栈中的学生信息为:\n");
while (!isEmpty(&stack)) {
pop(&stack, &stu);
printf("%d %s %.2f\n", stu.id, stu.name, stu.score);
}
return 0;
}
```
阅读全文