按下列要求编写程序: 1. 定义学生信息的栈数据结构 (包括 学号 姓名 成绩) 2. 设计栈的初始化、入栈、出栈等功能函数,实现学生信息的依次入栈与出栈 3. 编写程序主函数,对各个功能函数进行调用 4. 物理存储结构不限,顺序存储或者链式存储均可c语言
时间: 2024-06-02 22:13:42 浏览: 90
数据结构:定义一个包含学生信息(学号、姓名、成绩)的顺序表_数据结构
5星 · 资源好评率100%
// 定义学生信息的结构体
typedef struct {
int no; // 学号
char name[20]; // 姓名
double score; // 成绩
} Student;
// 定义栈数据结构
#define MAX_SIZE 100 // 栈的最大容量
typedef struct {
Student data[MAX_SIZE]; // 栈中存放的学生信息
int top; // 栈顶指针
} Stack;
// 栈的初始化
void initStack(Stack *s) {
s->top = -1; // 初始化栈顶指针为-1
}
// 判断栈是否为空
int isEmpty(Stack *s) {
return s->top == -1;
}
// 判断栈是否已满
int isFull(Stack *s) {
return s->top == MAX_SIZE - 1;
}
// 入栈
int push(Stack *s, Student stu) {
if (isFull(s)) {
printf("栈已满,无法入栈!\n");
return 0;
}
s->data[++s->top] = stu; // 将元素入栈,同时栈顶指针加1
return 1;
}
// 出栈
Student pop(Stack *s) {
if (isEmpty(s)) {
printf("栈已空,无法出栈!\n");
exit(1);
}
return s->data[s->top--]; // 将栈顶元素出栈,同时栈顶指针减1
}
// 主函数
int main() {
Stack s; // 定义一个栈
Student stu; // 定义一个学生信息
int choice;
initStack(&s); // 初始化栈
do {
printf("\n1.入栈 2.出栈 3.退出\n");
printf("请输入您的选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("请输入学生信息:\n");
printf("学号:");
scanf("%d", &stu.no);
printf("姓名:");
scanf("%s", stu.name);
printf("成绩:");
scanf("%lf", &stu.score);
push(&s, stu); // 入栈
break;
case 2:
stu = pop(&s); // 出栈
printf("出栈的学生信息为:学号:%d 姓名:%s 成绩:%lf\n", stu.no, stu.name, stu.score);
break;
case 3:
exit(0);
default:
printf("输入错误,请重新输入!\n");
}
} while (1);
return 0;
}
阅读全文