用c语言定义一个包含学生信息(学号,姓名,成绩)的链式队列,使其具有以下功能:1.初始化一个空队列,2.诸葛输入学生信息并入队,3.出队,4.删除队列,5统计当前队列排队学生个数,6.设计一个绿色通道,设计完整代码
时间: 2023-05-27 18:04:07 浏览: 170
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Student{
int id; //学号
char name[20]; //姓名
float score; //成绩
struct Student *next; //指向下一个结点的指针
}Student;
typedef struct Queue{
Student *front; //队头指针
Student *rear; //队尾指针
int size; //队列大小
}Queue;
Queue *InitQueue() //初始化一个空队列
{
Queue *q = (Queue*)malloc(sizeof(Queue));
q->front = q->rear = NULL;
q->size = 0;
return q;
}
void EnQueue(Queue *q) //插入学生信息并入队
{
Student *s = (Student*)malloc(sizeof(Student));
printf("请输入学生的学号:");
scanf("%d", &s->id);
printf("请输入学生的姓名:");
scanf("%s", s->name);
printf("请输入学生的成绩:");
scanf("%f", &s->score);
s->next = NULL;
if(q->rear == NULL){ //队列为空
q->front = q->rear = s;
}
else{ //队列不为空
q->rear->next = s;
q->rear = s;
}
q->size++;
printf("已将学生%s的信息入队!\n", s->name);
}
void DeQueue(Queue *q) //出队
{
if(q->front == NULL){ //队列为空
printf("队列为空,无法出队!\n");
return ;
}
Student *s = q->front;
q->front = q->front->next;
if(q->front == NULL){ //出队后队列为空
q->rear == NULL;
}
q->size--;
printf("学号:%d,姓名:%s,成绩:%.2f的学生已出队!\n", s->id, s->name, s->score);
free(s);
}
void ClearQueue(Queue *q) //删除队列
{
Student *p, *s;
p = q->front;
while(p){
s = p->next;
free(p);
p = s;
}
q->front = q->rear = NULL;
q->size = 0;
printf("队列已清空!\n");
}
int QueueSize(Queue *q) //统计当前队列排队学生个数
{
int size = q->size;
printf("当前队列排队学生个数为:%d\n", size);
return size;
}
void GreenChannel(Queue *q) //绿色通道
{
if(q->front == NULL){ //队列为空
printf("队列为空,无法使用绿色通道!\n");
return ;
}
Student *s = q->front;
q->front = q->front->next;
if(q->front == NULL){ //出队后队列为空
q->rear == NULL;
}
q->size--;
printf("学号:%d,姓名:%s,成绩:%.2f的学生通过绿色通道已出队!\n", s->id, s->name, s->score);
free(s);
}
int main()
{
Queue *q = InitQueue(); //初始化一个空队列
int choice;
printf("=============================\n");
printf(" 欢迎使用 \n");
printf("学生信息队列管理系统版本1.0\n");
printf("=============================\n");
while(1){
printf("请选择以下功能:\n");
printf("[1]入队 [2]出队 [3]删除队列 [4]统计队列大小 [5]绿色通道 [0]退出系统\n");
scanf("%d", &choice);
switch(choice){
case 1:
EnQueue(q);
break;
case 2:
DeQueue(q);
break;
case 3:
ClearQueue(q);
break;
case 4:
QueueSize(q);
break;
case 5:
GreenChannel(q);
break;
case 0:
printf("感谢使用学生信息队列管理系统,再见!\n");
return 0;
default:
printf("输入错误,请重新选择!\n");
break;
}
}
return 0;
}
```
阅读全文