用C++链式队列解决经典问题:舞伴问题!(带注释)
2010-10-25 16:33
966 查看
舞伴问题描述如下:
就是说有个PARTY舞会需要进行跳舞,当然是男的跟女的搭档了。就是男的一个队列,女的一个队列,然后互相出队列,进行匹配跳舞,如果男的队列跟女的队列人一样多,则输出 匹配完美结束,若最后男的剩下或者女的剩下,此时输出剩下的队列中第一个人的名字,比如I,则输出 I还在干等着呢!大体意思就是这!
代码如下:(还是没有区分.h文件,大家懂的,分不分在这里也没有什么意义可言)
就是说有个PARTY舞会需要进行跳舞,当然是男的跟女的搭档了。就是男的一个队列,女的一个队列,然后互相出队列,进行匹配跳舞,如果男的队列跟女的队列人一样多,则输出 匹配完美结束,若最后男的剩下或者女的剩下,此时输出剩下的队列中第一个人的名字,比如I,则输出 I还在干等着呢!大体意思就是这!
代码如下:(还是没有区分.h文件,大家懂的,分不分在这里也没有什么意义可言)
#include<stdio.h> #include<iostream> #include<assert.h> template<class T> class LinkQueueNode//结点类定义 { public: T data; LinkQueueNode<T>* link; LinkQueueNode(T& value):data(value),link(NULL){} }; template<class T> class LinkQueue { LinkQueueNode<T>* front; LinkQueueNode<T>* back; public: LinkQueue():front(NULL),back(NULL){} void EnQueue(T& element); T DelQueue(); T& GetFront(); void MakeEmpty(); bool IsEmpty(); }; //实现如下 template<class T> void LinkQueue<T>::EnQueue(T& value) { LinkQueueNode<T>* add=new LinkQueueNode<T>(value); if(back==NULL)//添加第一个结点,让front指向这个结点 { front=back=add; } else//如果队列中人家已经有结点,则需要改变back指针 { back->link=add; back=back->link; } } template<class T> T LinkQueue<T>::DelQueue() { //首先得判断是否为空队列 assert(!IsEmpty()); LinkQueueNode<T>* old=front; T data=old->data;//保留原对头数据 front=front->link;//移动对头指针 if(back==old) back=NULL; delete old; return data; } template<class T> T& LinkQueue<T>::GetFront() { assert(!IsEmpty());//断言,这东西挺好使滴 return front->data; } template<class T> void LinkQueue<T>::MakeEmpty() { while(!IsEmpty()) { this->DelQueue(); } } template<class T> bool LinkQueue<T>::IsEmpty() { return front==NULL; } #include<string> using namespace std; struct dancer//一会就让队列中存储这种结构体类型 { string name; char sex; }; int main() { cout<<"请输入舞伴总数量:"<<endl; int num; cin>>num; LinkQueue<dancer> mdancer; LinkQueue<dancer> fdancer; for(int i=0;i<num;i++) { cout<<"请输入舞者性别(f(女) or m(男))及姓名:"<<endl; char sex; cin>>sex; string name; cin>>name; dancer newdancer; newdancer.name=name; newdancer.sex=sex; if(sex=='f')//female { fdancer.EnQueue(newdancer); } if(sex=='m')//male { mdancer.EnQueue(newdancer); } } while( (!mdancer.IsEmpty()) && (!fdancer.IsEmpty() ) )//男女两个队列都有人 { cout<<mdancer.DelQueue().name<<"/t<---配对--->/t"<<fdancer.DelQueue().name<<endl; } if(!mdancer.IsEmpty())//剩下的帅锅 { cout<<mdancer.GetFront().name<<"先生还在干等着呢!"<<endl; } else if(!fdancer.IsEmpty())//都是剩下的霉女 { cout<<fdancer.GetFront().name<<"女士还在干等着呢!"<<endl; } else cout<<"配对完美结束!"<<endl; return 0; }
相关文章推荐
- 数据结构与算 5:C++ 顺序/链式存储,栈 模板类实现,编译模板类问题解决
- 经典的c++下面使用pthread_create问题的解决
- queue队列的建立及使用,约瑟夫问题C/C++的解决
- C++优先队列解决哈夫曼(Huffmam)编码问题 (STL priority_queue)
- 用队列解决数据结构经典问题:杨辉三角形问题。
- 解决在用ndk编译c++文件后libs/armeabi下的第三方so文件被删的问题
- gearman队列持久化引发的问题及解决方法
- 生产者和消费者经典问题OC解决
- 编写C++风格的程序,解决百钱问题,将1元人民币兑换成1,2,5分的硬币,有多少种换法
- C++ 退出双层for循环,解决 break、return、continue无法实现问题
- C++解决数据精度问题,对浮点数保存指定位小数
- RabbitMQ使用不当导致的队列堵塞问题及解决之道
- art emacs解决markdown插件的gfm-mode注释换行失效问题
- C++ - 函数模板(function template)右值引用参数 问题 及 解决
- 利用循环队列模拟舞伴配对问题:在舞会上,男、女各自排成一队。舞会开始时。依次从男队和女队的队头各出一人配成舞伴。如果两队初始人数不等,则较长的那一队中未配对者等待下一轮舞曲。
- 用C++在cocos2d-x 3.2下完美解决Menu吞掉事件导致ScrollView等无法响应的问题
- 数据结构之链式队列与链式栈的应用-球钟问题
- 解决C++全局变量只能初始化不能赋值的问题
- 用条件注释判断浏览器版本,解决兼容问题
- c++ 使用蚁群算法解决TSP问题。