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

1 请勿直接CV啊,学习是一种态度……

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务