数据结构作业:实验项目三:队列的基本操作应用

实验项目三:队列的基本操作应用
截至:11月14日
课程名称:数据结构

实验目的:

1.掌握队列的定义及实现;

2.掌握利用队列的基本操作。

实验要求:

1、 使用链式结构完成队列的各种基本操作;

2、 补充完善教材81页的舞伴问题。

实验项目名称:队列的基本操作应用

实验过程:

1、 先建立一个舞者队列,依次往队列中添加人员信息(8个人,5男3女);

2、 分别创建男女队列;

扫描二维码关注公众号,回复: 9166947 查看本文章

3、 从舞者队列中依次将队首元素出队并判断其性别并添加至男队(5人)或女队(3人);

4、 分别从男队和女队出队队首元素并配对输出;(男队女队分别3人)

5、 将未完成的一队队首元素输出(男队的队首成员名称)。

实验结果:

输入:8人信息(A,B,C,D,E,F,G,H)

输出:The dancepartners:

A—B

  C---D

  E---F

G is waiting for a partner.

实验分析:

1.队列的操作特点;

2.列举调试运行过程中出现的错误并分析原因。

要求:

(1) 程序要添加适当的注释,程序的书写要采用缩进格式。

(2) 程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反应。

(3) 程序要做到界面友好,在程序运行时用户可以根据相应的提示信息进行操作。

(4) 上传源程序到课堂派。顺序表的源程序保存为dancepartner.cpp。
.

.
(丰富的代码注释)给个赞再走呗;

#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int status;
#define MAXSIZE 100
typedef struct//保存舞者的个人信息 
{
	char name[20];
	char sex;
}person;
typedef struct{
	person *base;//存储空间的基地址 
	int front;//头指针 
	int rear;//尾指针 
}queue;
queue Mdancers,Fdancers;
status initqueue(queue &q)//初始化一个队列 
{
	q.base=(person*)malloc(sizeof(person)*MAXSIZE);//给队列分配空间 
	if(!q.base) exit(OVERFLOW);//如果分配失败则结束函数返回错误 
	q.front=q.rear=0;//头指针和尾指针置为零,队列为空 
	return OK;
}
int queuelength(queue q){
	return (q.rear-q.front+MAXSIZE)%MAXSIZE;//返回队列元素的个数,即队列的长度 
}
status enqueue(queue &q,person e)//插入元素e为队列的新元素 
{
	if((q.rear+1)%MAXSIZE==q.front)	return ERROR;//尾指针在循环意义上加1后等于头指针,表示队满 
	q.base[q.rear]=e;//新元素插入到队尾 
	q.rear=(q.rear+1)%MAXSIZE;//队尾指针加1 
	return OK;
}
status dequeue(queue &q,person &e)//删除队列队头元素,并且作为元素e返回 
{
	if(q.front==q.rear) return ERROR;//如果队列为空,则返回错误 
	e=q.base[q.front];//保存队头指针 
	q.front=(q.front+1)%MAXSIZE;//队头指针加1 
	return OK;
}
person gethead(queue q)//返回对头的元素,并且不修改队头指针 
{
	if(q.front!=q.rear)//队列非空 
		return q.base[q.front];//返回队头的元素,队头指针不变 
}
status queueempty(queue q){
	return(q.front==q.rear);//判断队列是否为空 
}
void dancepartner(person dancer[],int num)//结构体数组dancer中存放跳舞的男女,num是跳舞的总人数 
{	int i;
	person p;
	initqueue(Mdancers);//男队列初始化 
	initqueue(Fdancers);//女队列初始化 
	for(i=1;i<=num;i++)//依次将跳舞者根据性别入队 
	{
		p=dancer[i];
		if(p.sex=='F')	enqueue(Fdancers,p);//插入女队 
		else enqueue(Mdancers,p);//插入男队 
	}
	printf("The dancing partners are:\n");
	while(!queueempty(Fdancers)&&!queueempty(Mdancers))//依次输出舞伴的名字 
	{
		dequeue(Fdancers,p);//女士出队 
		printf("%s",p.name);
		dequeue(Mdancers,p);//男士出队 
		printf("%s\n",p.name);
	}
	if(!queueempty(Fdancers))//如果、女士队列非空,就输出女士队列的队头的姓名 
	{
		p=gethead(Fdancers);
		printf("the first woman to get a partner is: %s\n",p.name);
	}
	else if(!queueempty(Mdancers))//如果男士队列非空,就输出男士队列的队头的姓名 
	{
		p=gethead(Mdancers);
		printf("the first man to get a partner is: %s\n",p.name);
	}
}
void meue()//主操作菜单 
{
	int num,i;
	person dancer[MAXSIZE];//构建保存舞者个人信息的结构体数组 
	printf("请输入总共有几位舞者:\n");
	scanf("%d",&num);
	for(i=1;i<=num;i++)
	{
		printf("请输入第%d位舞者的名字\n",i);
		scanf("%s",&dancer[i].name);
		printf("请输入第%d位舞者的性别\n",i);
		scanf("%s",&dancer[i].sex);
	}
	dancepartner(dancer,num);
}
int main()
{	
	meue();
	return 0; 
}
发布了197 篇原创文章 · 获赞 36 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43872728/article/details/103191515