队列的基本用法 舞者
实验目的:
1.掌握队列的定义及实现;
2.掌握利用队列的基本操作。
实验要求:
1、 使用链式结构完成队列的各种基本操作;
2、 补充完善教材81页的舞伴问题。
实验项目名称:队列的基本操作应用
实验过程:
1、 先建立一个舞者队列,依次往队列中添加人员信息(8个人,5男3女);
2、 分别创建男女队列;
3、 从舞者队列中依次将队首元素出队并判断其性别并添加至男队(5人)或女队(3人);
4、 分别从男队和女队出队队首元素并配对输出;(男队女队分别3人)
5、 将未完成的一队队首元素输出(男队的队首成员名称)。
#include<iostream>
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define Status int
#define MAXSIZE 100
using namespace std;//--------跳舞者个人信息 -------
typedef struct
{char name[20];char sex;
}Person;//--------队列的链式储存结构 -------
typedef struct QNode
{Person data; struct QNode *next;
}QNode,*QueuePtr;typedef struct
{QueuePtr front; //队头指针 QueuePtr rear; //队尾指针
}LinkQueue;//---------队列的操作-----------
//初始化
Status InitQueue(LinkQueue &Q)
{//构造一个空的队列 Q.front=Q.rear=new QNode; //生成新结点作为头结点,队头指针和队尾指针指向此结点 Q.front->next=NULL; //头结点的指针域置空 return OK;
} //入队Status EnQueue(LinkQueue &Q, Person e){//插入元素e为Q的新的队尾元素 QueuePtr p; p=new QNode; //为入队元素分配结点空间,用指针p指向 p->data=e; //将新结点数据域置为e p->next=NULL; Q.rear->next=p; //将新结点插入到队尾 Q.rear=p; //修改队尾指针return OK;} //出队
Status DeQueue(LinkQueue &Q,Person &e)
{//删除Q的队头元素,用e返回其值 QueuePtr p = new QNode; if(Q.front == Q.rear) //若队列空,则返回ERRORreturn ERROR;p = Q.front->next; //p指向队头元素 e = p->data ; //e保存队头元素的值 Q.front->next = p->next; //修改头结点的指针域 if(Q.rear==p) // 最后一个元素被删,队尾指针指向头结点 Q.rear=Q.front;delete p; //释放原队头元素的空间 return OK;
} //取队头元素
Person GetHead(LinkQueue Q)
{if(Q.front!=Q.rear) //队列非空 return Q.front->next->data; //返回队头元素的值,队头指针不变
} //判断是否为空
Status QueueEmpty(LinkQueue Q)
{if(Q.front == Q.rear)return OK;else return ERROR;} //----------跳舞者函数----------
void DancePartner(Person dancer[],int num)
{//结构数组dancer中存放跳舞的男女,num是跳舞的人数 LinkQueue Mdancers,Fdancers;Person p;InitQueue(Mdancers); //初始化 InitQueue(Fdancers);for(int i=1;i<=num;i++){p=dancer[i];if(p.sex=='F')EnQueue(Fdancers,p); //插入女队 elseEnQueue(Mdancers,p); //插入男队 }cout<<"\t\t\t*——————————————————————*"<<endl; cout<<"\t\t\t The dancing partners are: "<<endl; while(!QueueEmpty(Fdancers) && !QueueEmpty(Mdancers)){//依次输出男女舞伴的名字 DeQueue(Fdancers,p); //女士出队 cout<<"\t\t\t\t\t"<<p.name<<" and "; //输出女士舞者姓名 DeQueue(Mdancers,p); //男士出队 cout<<p.name<<endl; //输出男士舞者姓名 }cout<<"\t\t\t*——————————————————————*"<<endl;if(!QueueEmpty(Fdancers)){//女士队列非空,输出女士队头的姓名 p=GetHead(Fdancers); //取女士队头 cout<<"\t\t\t*——————————————————————*"<<endl; cout<<"\t\t\t The first woman to get a partener is: "<<endl;cout<<"\t\t\t "<<p.name<<endl;cout<<"\t\t\t*——————————————————————*"<<endl; }else if(!QueueEmpty(Mdancers)){//男士队列非空,输出男士队头的姓名 p=GetHead(Mdancers); //取男士队头 cout<<"\t\t\t*——————————————————————*"<<endl; cout<<"\t\t\t The first man to get a partener is: "<<endl;cout<<"\t\t\t "<<p.name<<endl;cout<<"\t\t\t*——————————————————————*"<<endl; }}int main()
{int num;cout<<"\t\t\t*——————————————————————*"<<endl; cout<<"\t\t\t| Please inout the number of danceres: |"<<endl; cout<<"\t\t\t*——————————————————————*"<<endl;cout<<"\t\t\t\t\t"; cin>>num;cout<<"\t\t\t*——————————————————————*"<<endl; cout<<"\t\t\t| Please inout the information of danceres: |"<<endl; cout<<"\t\t\t*——————————————————————*"<<endl<<endl; Person dancer[100];cout<<"\t\tPlease input 'F' or 'M' stand for the sex of danceres:"<<endl; for(int i=1;i<=num;i++){cout<<"\t\t\tThe "<<i<<" of the danceres"<<endl; cout<<"\t\t\t\t\tsex: ";cin>>dancer[i].sex ;cout<<"\t\t\t\t\t name: ";cin>>dancer[i].name ;cout<<endl; }DancePartner(dancer,num); return 0;
}
队列的基本用法 舞者相关推荐
- python deque双端队列的神奇用法
python中的deque双端队列,类似list的任意一端都可实现较快的add和pop操作 from collections import dequed=deque(maxlen=20) for i ...
- MQ消息队列的常见用法
消息队列MQ是分布式中重要的组件 目前常见的消息队列有三种:ActiveMQ,RabbitMQ,Kafka 今天我想来梳理一下MQ消息队列的具体常见用法: 1.异步处理 用户注册之后,需要发短信和加积 ...
- Java中队列(Queue)用法
Java中队列的用法 1. 队列的定义 2. 队列的基本操作 3. Java中队列的应用 1. 队列的定义 队列(Queue):队列简称队,也是一种操作受限的线性表,只允许在表的一端进行插入,而在表的 ...
- Java 循环队列原理与用法详解
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:iphone 也是办公神器,用了就知道了,不行送你一个试试个人原创+1博客:点击前往,查看更多 链接:https ...
- C++ 中queue(队列)的用法
#include <iostream> #include <queue> #include <assert.h> 调用的时候要有头文件: #include<s ...
- Python中的队列结构及其用法
Python标准库queue提供了LILO队列类Queue.LIFO队列类LifoQueue.优先级队列类PriorityQueue,标准库collections提供了双端队列. >>&g ...
- C++队列queue的用法
文章目录 1. 基础 2. 申明 3. 添加元素 push() 4. 获取第一个元素 front() 5. 获取最后一个元素 back() 6. 队列的大小 size() 7. 删除第一个元素 pop ...
- java队列课程_Java 实例 – 队列(Queue)用法
Java 实例 - 队列(Queue)用法 队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作. LinkedList类实现了Queue接口,因此我们可以把LinkedL ...
- queue java 用法_Java队列(Queue)用法
Java 实例 - 队列(Queue)用法 队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作. LinkedList类实现了Queue接口,因此我们可以把LinkedL ...
最新文章
- 【数据安全案例】交警计算机系统再遭***,交通违法记录随意删除
- 第五章:面向对象(上)
- MIT一招霸气颠覆传统:勇敢换导师,成本我买单,学生沸腾了
- ntfs分区对linux的局限,如何使Linux支持NTFS分区
- 前端面试-综合问题版
- 单纯形 c语言 程序,单纯形法完全c语言程序
- LintCode Python 简单级题目 96.链表划分
- G6 图可视化引擎——核心概念——节点/边/Combo——内置节点——内置节点总览
- python字符串函数运算_Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】 原创...
- unity应用开发实战案例_「简历」STAR法则的实战应用,附手把手教学案例
- 从0到1构建支撑企业自动化运维体系
- 十荟团关停全国业务 社区电商开启“降本增效”大突围
- python怎么设置回文数_Python中的回文数
- 通过pip下载的包默认位置在哪
- 唐山初中计算机考试知识点,画法几何点知识点及考点.doc
- linux笔记本触屏方向反了,[已解决]如何设置触摸板上下滚屏反转(像mac一样,和windows是反的)...
- WPS新建文字分享微信.docx形式_高效神器:花 5 分钟输入文字,就能自动变成 PPT...
- Python抖音弹幕
- rgb sw 线主板接口在哪_自带RGB风扇,支持神光同步的九州风神小堡垒120I水冷散热器...
- VUE三目运算使用 :style与:class
热门文章
- ERP系统个性化定制生产计划,简化排产流程
- 一文教你弄懂Flink核心功能和原理
- 猫狗大战——pytorch+resnet18
- 计数计量单位KMGTPEZY【计算机】【天文】
- 用babel时出现的问题及browser的使用
- POJ 3618 Exploration
- 刘一男词汇课(从tiger到zip)::“重复是记忆之母,理解是记忆之父。“
- printf计算参数是从右到左压栈的原理(a++和++a的压栈的区别)
- OneNote遇到临时服务器无法登录的问题
- 回溯法(八皇后问题)及C语言实现