用C语言定义一个包含学生信息(学号,姓名,成绩)的顺序队列,使其具有如下功能: (1) 初始化一个空队列; (2) 逐个输入学生信息并入队; (3) 出队,输出学号、姓名、成绩等信息; (4) 删除队列。 (5) 统计当前队列排队学生个数;
时间: 2023-05-24 11:05:22 浏览: 86
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_QUEUE_SIZE 100 // 定义最大队列长度
typedef struct student{
int num;
char name[10];
float score;
}Student; // 定义学生结构体
typedef struct queue{
Student data[MAX_QUEUE_SIZE]; // 队列元素存储
int front, rear; // 队头队尾指针
}Queue;
void initQueue(Queue *q){
q->front = q->rear = 0; // 初始化队头队尾指针为0
}
int isQueueEmpty(Queue *q){
return q->front == q->rear; // 判断队头队尾指针是否相等
}
int isQueueFull(Queue *q){
return (q->rear + 1) % MAX_QUEUE_SIZE == q->front; // 判断队尾指针+1是否等于队头指针
}
int enqueue(Queue *q, Student s){
if (isQueueFull(q)){
printf("Queue is full.\n"); // 队列已满
return 0;
}
q->data[q->rear] = s; // 新元素添加到队尾
q->rear = (q->rear + 1) % MAX_QUEUE_SIZE; // 队尾指针后移一位
return 1;
}
int dequeue(Queue *q, Student *s){
if (isQueueEmpty(q)){
printf("Queue is empty.\n"); // 队列已空
return 0;
}
*s = q->data[q->front]; // 将队头元素赋值给s
q->front = (q->front + 1) % MAX_QUEUE_SIZE; // 队头指针后移一位
return 1;
}
void deleteQueue(Queue *q){
free(q); // 释放队列所占用内存空间
}
int queueLength(Queue *q){
return (q->rear - q->front + MAX_QUEUE_SIZE) % MAX_QUEUE_SIZE; // 求队列长度
}
int main(){
Queue *q = (Queue*)malloc(sizeof(Queue)); // 创建一个空队列
initQueue(q); // 初始化队列
int num;
char name[10];
float score;
Student s;
int i, n;
printf("Enter the number of students: ");
scanf("%d", &n);
for (i = 0; i < n; i++){
printf("Enter student %d info: number, name, score: ", i + 1);
scanf("%d %s %f", &num, name, &score);
s.num = num;
strcpy(s.name, name);
s.score = score;
enqueue(q, s); // 将学生信息入队
}
printf("\nStudents waiting in line:\n");
while (!isQueueEmpty(q)){
dequeue(q, &s); // 将队头元素出队
printf("Number: %d, Name: %s, Score: %.1f\n", s.num, s.name, s.score);
}
printf("\nTotal number of students waiting in line: %d\n", queueLength(q));
deleteQueue(q); // 释放队列所占用内存空间
return 0;
}
阅读全文