中文用C++实现一个包含学生信息的顺序队列可以定义为一个能够存储学生信息的数组,该数组可以按顺序存储一定数量的学生记录。每个学生记录可以包含学生姓名、学号、性别、年龄、身高、体重等信息。队列在插入和删除记录时遵循先进先出的规则,即先插入的记录在队列中的位置越靠前,先删除的记录也应该是队列中的第一个。在实现队列的操作时,需要定义两个指针指向队列头和队列尾的位置,以方便插入和删除操作的实现。 点击复制后,将打开C知道体验页
时间: 2023-05-24 16:05:43 浏览: 154
队列的顺序存储与实现
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
char name[20]; // 学生姓名
int id; // 学生学号
char sex; // 学生性别
int age; // 学生年龄
float height; // 学生身高
float weight; // 学生体重
}Student;
typedef struct{
Student *data; // 存储学生记录的数组
int front; // 队列头指针,指向队列中第一个元素的位置
int rear; // 队列尾指针,指向队列中最后一个元素的位置的下一个位置
int size; // 队列中元素的数量
int capacity; // 队列的最大容量,即数组 data 的长度
}Queue;
// 初始化队列
void initQueue(Queue *q, int capacity){
q->data = (Student*)malloc(sizeof(Student)*capacity);
q->front = q->rear = q->size = 0;
q->capacity = capacity;
}
// 入队操作
void enqueue(Queue *q, Student stu){
if(q->size == q->capacity){ // 队列已满
printf("队列已满,无法入队!\n");
return;
}
q->data[q->rear] = stu; // 将学生记录存入队列
q->rear = (q->rear + 1) % q->capacity; // 将队尾指针向后移动一位,循环使用数组空间
q->size++; // 队列中元素数量加 1
}
// 出队操作,返回被删除的学生记录
Student dequeue(Queue *q){
if(q->size == 0){ // 队列为空
printf("队列为空,无法出队!\n");
Student stu_null = {"", 0, '\0', 0, 0.0, 0.0};
return stu_null;
}
Student stu = q->data[q->front]; // 将队头元素存入变量 stu
q->front = (q->front + 1) % q->capacity; // 将队头指针向后移动一位,循环使用数组空间
q->size--; // 队列中元素数量减 1
return stu; // 返回被删除的学生记录
}
// 清空队列
void clearQueue(Queue *q){
free(q->data);
q->front = q->rear = q->size = 0;
}
// 判断队列是否为空
int isEmpty(Queue *q){
return (q->size == 0) ? 1 : 0;
}
// 判断队列是否已满
int isFull(Queue *q){
return (q->size == q->capacity) ? 1 : 0;
}
int main(){
Queue q; // 定义一个队列
initQueue(&q, 10); // 初始化队列,设置队列的最大容量为 10
// 测试入队操作
Student stu1 = {"张三", 1001, 'M', 20, 175.0, 65.0};
enqueue(&q, stu1);
Student stu2 = {"李四", 1002, 'F', 21, 160.0, 50.0};
enqueue(&q, stu2);
Student stu3 = {"王五", 1003, 'M', 22, 180.0, 70.0};
enqueue(&q, stu3);
// 测试出队操作
Student stu = dequeue(&q);
printf("出队学生记录:\n");
printf("姓名:%s,学号:%d,性别:%c,年龄:%d,身高:%.1f,体重:%.1f\n", stu.name, stu.id, stu.sex, stu.age, stu.height, stu.weight);
// 测试清空队列操作
clearQueue(&q);
// 测试队列是否为空和队列是否已满的功能
printf("队列是否为空:%d\n", isEmpty(&q));
printf("队列是否已满:%d\n", isFull(&q));
return 0;
}
阅读全文