STL之队列(链表实现)
1 实验项目三:队列的基本操作应用
截止时间:11月14日23:59
课程名称:数据结构
实验目的:
1.掌握队列的定义及实现;
2.掌握利用队列的基本操作。
实验要求:
1、 使用链式结构完成队列的各种基本操作;
2、 补充完善教材81页的舞伴问题。
实验项目名称:队列的基本操作应用
实验过程:
1、 先建立一个舞者队列,依次往队列中添加人员信息(8个人,5男3女);
2、 分别创建男女队列;
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。
#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
#define pi acos(-1.0)
#define e exp(1.0)
typedef long long ll;
ll N,M;
string S;
//string men,women;
//struct Dancer
//{
// char name;
//};
struct Lnode//定义队列结点
{
char date;
Lnode *next;
};
struct Queue
{
ll size;//队列元素的个数
Lnode *front,*rear;//指向头结点和尾结点
}Q1,Q2;
//Lnode *front,*rear;
void Init(Queue &Q)//初始化
{
Q.front=Q.rear=NULL;
Q.size=0;
return ;
}
bool Empty(Queue &Q)//判断队列是否为空
{
if(!Q.size)
return true;
return false;
}
void Push(char c,Queue &Q)//将信息Push到队列Q里
{
Lnode *pos=new Lnode;
pos->date=c;
pos->next=NULL;
if(Empty(Q))
Q.front=pos;
else
Q.rear->next=pos;
Q.rear=pos;
Q.size++;
return ;
}
void Front(Queue &Q)//打印队列头结点
{
if(Empty(Q))
{
cout<<"队列已空"<<endl;
return ;
}
cout<<Q.front->date;
return ;
}
void Pop(Queue &Q)//删除头结点
{
if(Empty(Q))
{
cout<<"队列已空"<<endl;
return ;
}
Lnode *pos=Q.front;
Q.front=Q.front->next;
delete pos;
Q.size--;
return ;
}
int main()
{
// freopen(".../.txt","w",stdout);
ios::sync_with_stdio(false);
cout<<"请输入舞者"<<endl;
while(cin>>S)
{
ll i,j;
Init(Q1);//建立队列
Init(Q2);
for(i=0;i<S.length();i++)
{
if(!(i&1))
Push(S[i],Q1);
else
Push(S[i],Q2);
}
while(!Empty(Q1)&&!Empty(Q2))//进行匹配
{
Front(Q1);
cout<<"---";
Front(Q2);
cout<<endl;
Pop(Q1);
Pop(Q2);
}
while(!Empty(Q1))//将没有匹配的输出出来,实际上循环只会执行一次
{
Front(Q1);
cout<<" is waiting for a partner."<<endl;
Pop(Q1);
}
while(!Empty(Q2))
{
Front(Q2);
cout<<" is waiting for a partner."<<endl;
Pop(Q2);
}
}
return 0;
}