按下列要求编写程序: 1. 定义学生信息的栈数据结构 (包括 学号 姓名 成绩) 2. 设计栈的初始化、入栈、出栈等功能函数,实现学生信息的依次入栈与出栈 3. 编写程序主函数,对各个功能函数进行调用 4. 物理存储结构不限,顺序存储或者链式存储均可c语言
时间: 2023-05-30 08:06:06 浏览: 88
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100 // 定义栈的最大容量
// 定义学生信息结构体
typedef struct student {
int id; // 学号
char name[20]; // 姓名
int score; // 成绩
} Student;
// 定义栈结构体
typedef struct stack {
int top; // 栈顶指针
Student data[MAX_SIZE]; // 栈元素
} Stack;
// 初始化栈
Stack* initStack() {
Stack *S = (Stack*)malloc(sizeof(Stack));
S->top = -1; // 置空栈
return S;
}
// 判断栈是否为空
int isEmpty(Stack *S) {
return S->top == -1;
}
// 判断栈是否已满
int isFull(Stack *S) {
return S->top == MAX_SIZE - 1;
}
// 入栈操作
void push(Stack *S, Student stu) {
if (isFull(S)) {
printf("栈已满,无法入栈!\n");
return;
}
S->data[++S->top] = stu; // 元素入栈并把栈顶指针加1
printf("学号为%d的学生已入栈!\n", stu.id);
}
// 出栈操作
void pop(Stack *S) {
if (isEmpty(S)) {
printf("栈已空,无法出栈!\n");
return;
}
Student stu = S->data[S->top--]; // 取出栈顶元素并把栈顶指针减1
printf("学号为%d的学生已出栈!\n", stu.id);
}
// 打印栈中所有学生信息
void printStack(Stack *S) {
if (isEmpty(S)) {
printf("栈已空,无法打印!\n");
return;
}
printf("当前栈中的学生信息为:\n");
for (int i = S->top; i >= 0; i--) {
printf("%d\t%s\t%d\n", S->data[i].id, S->data[i].name, S->data[i].score);
}
}
int main() {
Stack *S = initStack(); // 初始化栈
Student stu1 = { 1001, "张三", 80 };
Student stu2 = { 1002, "李四", 90 };
Student stu3 = { 1003, "王五", 85 };
push(S, stu1); // 元素入栈
push(S, stu2);
push(S, stu3);
printStack(S); // 打印栈中所有学生信息
pop(S); // 元素出栈
printStack(S);
return 0;
}