目录
1、根据实验内容描述需求分析:
(1)输入的形式和输出值的范围;
输入的形式:是将舞者的姓名及性别输入(2)输出的形式:以(性名1,姓名2)的形式输出舞者彼此的舞伴(3)程序所能达到的功能:将男女舞者相互匹配,不同性别的两个人为一组。
(4)队列常见的一些操作:
入队:将元素添加到队列的尾部。
出队:将队列头部的元素移除并返回。
获取队头元素:查看队列头部的元素,但不移除。
判空:判断队列是否为空。
获取队列大小:返回队列中元素的个数。
2、主程序的流程及各程序模块之间的调用关系。
InitQueue(Queue &Que):初始化顺序表Que;
Queuelength(Queue Que):求队列长度的函数;
EnterQueue(Queue &Que,Person e):入队的函数,及那个e入队;
OutQueue(Queue &Que,Person &e):出队函数;
emptyQueue(Queue Que):判断队列是否为空;
Gethead(Queue Que):取队头元素的函数;
text(Person dancers[],int num):将输入数值的结构体数组传入函数中并进行测试、运行的函数;
3、源码分析:
以下是程序的部分函数及数据结构的定义:
(2) 使用队列编程解决舞伴问题。
typedef struct informations
{
char name[20];
//string name;
char sex;
}Person;
Person Per[max1];
typedef struct queue
{
Person *data;
int front;
int rear;
}Queue,*Queue1;
Queue Mdancers,Fdancers;
//求队列的长度
int Queuelength(Queue Que){
return (Que.rear-Que.front+max)%max;
}
//初始化队列
bool InitQueue(Queue &Que)
{
Que.data = new Person[max];
if(!Que.data) return 0;
else Que.front=Que.rear=0;
return OK;
}
//入队
bool EnterQueue(Queue &Que,Person e)
{
if((Que.rear+1)%max==Que.front) return 0;
Que.data[Que.rear]=e;
Que.rear=(Que.rear+1)%max;
return OK;
}
//出队
//Person &e 切记要用&(引用符号)否则下面的出队到p1p2后输出的会是乱码
bool OutQueue(Queue &Que,Person &e)
{
if(Que.front==Que.rear) return 0;
e = Que.data[Que.front];
Que.front=(Que.front+1)%max;
return OK;
}
//判断队列空时
bool emptyQueue(Queue Que)
{
if(Que.front==Que.rear) return OK;
else return 0;
}
//取队头的元素
Person Gethead(Queue Que)
{
if(Que.front!=Que.rear) return Que.data[Que.front];
}
//
void text(Person dancers[],int num)
{
bool w1= InitQueue(Fdancers);
bool q1 = InitQueue(Mdancers);
if(w1&&q1){
Sleep(500);
printf("女士队列与男士队列创建成功.......\n");
}
Person p1,p2;
for(int i=0 ;i<num;i++){
if(dancers[i].sex=='F'){
EnterQueue(Fdancers,dancers[i]);
}else EnterQueue(Mdancers,dancers[i]);
}
//队空时输出1OK
while(!emptyQueue(Mdancers) && !emptyQueue(Fdancers)){
bool w= OutQueue(Fdancers,p1);
if(w) printf("女士队列中出队成功!\n");
Sleep(500);
bool q = OutQueue(Mdancers,p2);
if(q) printf("男士队列中出队成功!\n");
Sleep(500);
cout<<"舞伴组队为:"<<"("<<p1.name<<","<<p2.name<<")"<<endl;
}
if(!emptyQueue(Mdancers)){
p1 = Gethead(Fdancers);
cout<<"下一轮的第一位女士的舞伴是:"<<p1.name<<endl;
}
else if(!emptyQueue(Fdancers)){
p1 = Gethead(Mdancers);
cout<<"下一轮的第一位男士的舞伴是:"<<p1.name<<endl;
}
}
//队列(Queue)是一种基本的数据结构,遵循先进先出的原则。
//它类似于我们日常生活中排队等待的场景。
//队列拥有两个主要操作:入队(enqueue)和出队(dequeue)。入队操作将元素添加到队列的尾部,而出//队操作则删除队列的头部元素。这保证了先入队的元素先出队,保持了元素的顺序性。
//队列的实现方式可以使用数组或链表。数组实现的队列大小固定,需要进行扩容操作。链表实现的队列大//小可以动态调整,不存在固定大小的限制。
//队列常用于广度优先搜索(BFS)算法、系统任务调度、缓冲区管理等场景。它是解决相关问题和设计高效//算法的重要工具。
//总之,队列是一种简单但重要的数据结构,通过先进先出的原则来管理元素的顺序。它的实现方式可以是//数组或链表,并广泛应用于算法和实际应用中。
4、函数之间的调用
int num=0;
printf("输入参加舞会的舞者的个数:");
scanf("%d",&num);
printf("输入舞者的基本信息姓名以及性别(F代表女性,M代表男性)\n");
for(int i=0;i<num;i++){
printf("请输入第%d个舞者的姓名及性别:",i+1);
cin>>Per[i].name;
cin>>Per[i].sex;
}
text(Per,num);
博主制作文章需要付出时间和心血制作不易!!如果对你有帮助的话 不妨点个赞噢
————————————————
版权声明:本文为CSDN博主「峰屹小奕」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_73620832/article/details/134089297