用C++实现一个包含学生信息(学号,姓名,成绩)的顺序队列,使其具有如下功能: (1) 初始化一个空队列; (2) 逐个输入学生信息并入队; (3) 出队,输出学号、姓名、成绩等信息; (4) 删除队列。 (5) 统计当前队列排队学生个数;
时间: 2023-05-24 08:05:37 浏览: 93
代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Student {
char id[20]; // 学号
char name[20]; // 姓名
int score; // 成绩
} Student;
typedef struct Queue {
Student *data; // 队列数据
int front, rear; // 队头和队尾指针
int size, capacity; // 队列大小和容量
} Queue;
// 初始化一个空队列
void InitQueue(Queue *q, int capacity) {
q->data = (Student *) malloc(capacity * sizeof(Student));
q->front = q->rear = 0;
q->size = 0;
q->capacity = capacity;
}
// 入队
void EnQueue(Queue *q, Student s) {
if (q->size == q->capacity) {
printf("队列已满,入队失败!\n");
return;
}
q->data[q->rear] = s;
q->rear = (q->rear + 1) % q->capacity; // 队尾指针加1,取余是为了循环利用队列空间
q->size++;
}
// 出队
void DeQueue(Queue *q) {
if (q->size == 0) {
printf("队列已空,出队失败!\n");
return;
}
printf("出队学生信息:学号:%s,姓名:%s,成绩:%d\n", q->data[q->front].id, q->data[q->front].name, q->data[q->front].score);
q->front = (q->front + 1) % q->capacity; // 队头指针加1,取余是为了循环利用队列空间
q->size--;
}
// 统计当前队列排队学生个数
int CountQueue(Queue *q) {
return q->size;
}
// 删除队列
void DeleteQueue(Queue *q) {
free(q->data);
q->front = q->rear = 0;
q->size = 0;
q->capacity = 0;
}
int main() {
int capacity, n, i;
Queue q;
Student s;
printf("请输入队列容量:");
scanf("%d", &capacity);
InitQueue(&q, capacity); // 初始化队列
printf("请输入学生个数:");
scanf("%d", &n);
for (i = 0; i < n; i++) {
printf("请输入第%d个学生的信息(学号、姓名、成绩),用空格隔开:", i + 1);
scanf("%s %s %d", s.id, s.name, &s.score);
EnQueue(&q, s); // 入队
}
printf("当前队列中有%d个学生。\n", CountQueue(&q));
while (q.size > 0) {
DeQueue(&q); // 出队
}
DeleteQueue(&q); // 删除队列
return 0;
}
```