实验目的:

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;
}

队列的基本用法 舞者相关推荐

  1. python deque双端队列的神奇用法

    python中的deque双端队列,类似list的任意一端都可实现较快的add和pop操作 from collections import dequed=deque(maxlen=20) for i ...

  2. MQ消息队列的常见用法

    消息队列MQ是分布式中重要的组件 目前常见的消息队列有三种:ActiveMQ,RabbitMQ,Kafka 今天我想来梳理一下MQ消息队列的具体常见用法: 1.异步处理 用户注册之后,需要发短信和加积 ...

  3. Java中队列(Queue)用法

    Java中队列的用法 1. 队列的定义 2. 队列的基本操作 3. Java中队列的应用 1. 队列的定义 队列(Queue):队列简称队,也是一种操作受限的线性表,只允许在表的一端进行插入,而在表的 ...

  4. Java 循环队列原理与用法详解

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:iphone 也是办公神器,用了就知道了,不行送你一个试试个人原创+1博客:点击前往,查看更多 链接:https ...

  5. C++ 中queue(队列)的用法

    #include <iostream> #include <queue> #include <assert.h> 调用的时候要有头文件: #include<s ...

  6. Python中的队列结构及其用法

    Python标准库queue提供了LILO队列类Queue.LIFO队列类LifoQueue.优先级队列类PriorityQueue,标准库collections提供了双端队列. >>&g ...

  7. C++队列queue的用法

    文章目录 1. 基础 2. 申明 3. 添加元素 push() 4. 获取第一个元素 front() 5. 获取最后一个元素 back() 6. 队列的大小 size() 7. 删除第一个元素 pop ...

  8. java队列课程_Java 实例 – 队列(Queue)用法

    Java 实例 - 队列(Queue)用法 队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作. LinkedList类实现了Queue接口,因此我们可以把LinkedL ...

  9. queue java 用法_Java队列(Queue)用法

    Java 实例 - 队列(Queue)用法 队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作. LinkedList类实现了Queue接口,因此我们可以把LinkedL ...

最新文章

  1. 【数据安全案例】交警计算机系统再遭***,交通违法记录随意删除
  2. 第五章:面向对象(上)
  3. MIT一招霸气颠覆传统:勇敢换导师,成本我买单,学生沸腾了
  4. ntfs分区对linux的局限,如何使Linux支持NTFS分区
  5. 前端面试-综合问题版
  6. 单纯形 c语言 程序,单纯形法完全c语言程序
  7. LintCode Python 简单级题目 96.链表划分
  8. G6 图可视化引擎——核心概念——节点/边/Combo——内置节点——内置节点总览
  9. python字符串函数运算_Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】 原创...
  10. unity应用开发实战案例_「简历」STAR法则的实战应用,附手把手教学案例
  11. 从0到1构建支撑企业自动化运维体系
  12. 十荟团关停全国业务 社区电商开启“降本增效”大突围
  13. python怎么设置回文数_Python中的回文数
  14. 通过pip下载的包默认位置在哪
  15. 唐山初中计算机考试知识点,画法几何点知识点及考点.doc
  16. linux笔记本触屏方向反了,[已解决]如何设置触摸板上下滚屏反转(像mac一样,和windows是反的)...
  17. WPS新建文字分享微信.docx形式_高效神器:花 5 分钟输入文字,就能自动变成 PPT...
  18. Python抖音弹幕
  19. rgb sw 线主板接口在哪_自带RGB风扇,支持神光同步的九州风神小堡垒120I水冷散热器...
  20. VUE三目运算使用 :style与:class

热门文章

  1. ERP系统个性化定制生产计划,简化排产流程
  2. 一文教你弄懂Flink核心功能和原理
  3. 猫狗大战——pytorch+resnet18
  4. 计数计量单位KMGTPEZY【计算机】【天文】
  5. 用babel时出现的问题及browser的使用
  6. POJ 3618 Exploration
  7. 刘一男词汇课(从tiger到zip)::“重复是记忆之母,理解是记忆之父。“
  8. printf计算参数是从右到左压栈的原理(a++和++a的压栈的区别)
  9. OneNote遇到临时服务器无法登录的问题
  10. 回溯法(八皇后问题)及C语言实现