,为什么会写入冲突?帮忙运行下试试,多谢!
求助,为什么会写入冲突???帮忙运行下试试,谢谢!!!
------解决思路----------------------
有一段是这样才对吧
------解决思路----------------------
Queue类指针成员未初始化.
加上如下代码即可:
// 构造函数
Queue()
{
QM = new Men_Q;
QW = new Women_Q ;
}
另外, 可以直接typedef Men_Node Women_Node;
/*假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。
跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。
若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。
现要求写一算法模拟上述舞伴配对问题*/
#include<iostream>
using namespace std;
#define NULL 0
//////////////////////////////定义结构类型//////////////////
typedef struct Men_Node//男士队列类型
{
char name;
struct Men_Node *next;
}Men_Node;
typedef struct Women_Node//女士队列类型
{
char name;
struct Women_Node *next;
}Women_Node;
typedef struct//指向男士的头尾指针类型
{
Men_Node *Head , *Tail;
}Men_Q;
typedef struct//指向女士的头尾指针类型
{
Women_Node *Head , *Tail;
}Women_Q;
//////////////////////////////类///////////////////////
class Queue
{
public:
// Queue(Men_Q *Qm , Women_Q *Qw);//构造函数
Men_Node *create_men();//创建队列
Women_Node *create_women();
int Empty(Men_Q *Qm);//判断队空与否
int Empty(Women_Q *Qw);
void In_Queue(Men_Q *Qm);//入队操作
void In_Queue(Women_Q *Qw);
char Out_Queue(Men_Q *Qm , char *ch);//出队操作
char Out_Queue(Women_Q *Qw , char *ch);
char Get_Failname(Men_Q *Qm);//取得未配对的第一个人
char Get_Failname(Women_Q *Qw);
private:
Men_Q *QM;//指向男士的指针
Women_Q *QW;//指向女士的指针
};
//////////////////////////////创建函数///////////////////////
Men_Node *Queue::create_men()//初始化男士队列
{
QM->Head = QM->Tail = new Men_Node;
QM->Head->next = NULL;
return QM->Head;
}
Women_Node *Queue::create_women()//初始化女士队列
{
QW->Head = QW->Tail = new Women_Node;
QW->Head->next = NULL;
return QW->Head;
}
//Queue::Queue(Men_Q *Qm , Women_Q *Qw)
//{
// /*Qm->Head->next = NULL;
// Qm->Tail->next= NULL;
//
// Qw->Head->next = NULL;
// Qw->Tail->next = NULL;*/
//}
//////////////////////////////判断是否队空///////////////////////
int Queue::Empty(Men_Q *Qm)//男士队空
{
if (Qm->Head->next == NULL)
{
cout<<"男士队空!!!"<<endl;
return 1;
}
else
{
return 0;
}
}
int Queue::Empty(Women_Q *Qw)//女士队空
{
if (Qw->Head->next == NULL)
{
cout<<"女士队空!!!"<<endl;
return 1;
}
else
{
return 0;
}
}
//////////////////////////////入队操作///////////////////////
void Queue::In_Queue(Men_Q *Qm)//男士入队
{
Men_Node *p = new Men_Node;
cin>>p->name;
Qm->Tail->next= p;
Qm->Tail->next = NULL;
}
void Queue::In_Queue(Women_Q *Qw)//女士入队
{
Women_Node *p = new Women_Node;
cin>>p->name;
Qw->Tail->next = p;
Qw->Tail->next = NULL;
}
//////////////////////////////出队操作///////////////////////
char Queue::Out_Queue(Men_Q *Qm , char *ch)//男士出队
{
Men_Node *p = Qm->Head->next;
*ch = p->name;
Qm->Head->next = p->next;
delete p;
return *ch;
}
char Queue::Out_Queue(Women_Q *Qw , char *ch)//女士出队
{
Women_Node *p = Qw->Head->next;
*ch = p->name;
Qw->Head->next = p->next;
delete p;
return *ch;
}
//////////////////////////////取得未配对的第一人///////////////////////
char Queue::Get_Failname(Men_Q *Qm)//取得男士未配对的第一人
{
return Qm->Head->next->name;
}
char Queue::Get_Failname(Women_Q *Qw)//取得男士未配对的第一人
{
return Qw->Head->next->name;
}
//////////////////////////////主函数///////////////////////
int main()
{
Queue m;//Queue m(Men_Q *Qm , Women_Q *Qw);这种形式是m函数重定义返回类型为Queue;
Men_Q *Qm ;//指向男士的指针
Women_Q *Qw;//指向女士的指针
Qm->Head = Qm->Tail = m.create_men();
Qw->Head = Qw->Tail = m.create_women();
int flag = 0;
cout<<"输入男士队列"<<endl;
while (1)//男士入队
{
m.In_Queue(Qm);
cout<<"按0结束输入,其他继续输入:";
cin>>flag;
if (flag == 0)
break;
}
cout<<"输入女士队列"<<endl;
while (1)//女士入队
{
m.In_Queue(Qw);
cout<<"按0结束输入,其他继续输入:";
cin>>flag;
if (flag == false)
break;
}
char wenName = 0 , womenName = 0;
int count = 1;
while (m.Empty(Qm) == 0 && m.Empty(Qw) == 0)
{
wenName = m.Out_Queue(Qm , &wenName);
womenName = m.Out_Queue(Qw , &womenName);
cout<<"第"<<count<<"组:"<<wenName<<"和"<<womenName<<endl;
count++;
}
cout<<endl;
if (m.Empty(Qm) == 1)
{
cout<<"第二轮出场的男士为:"<<m.Get_Failname(Qm);
}
if (m.Empty(Qw) == 1)
{
cout<<"第二轮出场的女士为:"<<m.Get_Failname(Qw);
}
system ("pause");
}
------解决思路----------------------
void Queue::In_Queue(Men_Q *Qm)//男士入队
{
Men_Node *p = new Men_Node;
cin>>p->name;
Qm->Tail->next= p;
Qm->Tail->next->next = NULL;
}
void Queue::In_Queue(Women_Q *Qw)//女士入队
{
Women_Node *p = new Women_Node;
cin>>p->name;
Qw->Tail->next = p;
Qw->Tail->next->next = NULL;
}
有一段是这样才对吧
------解决思路----------------------
Queue类指针成员未初始化.
加上如下代码即可:
// 构造函数
Queue()
{
QM = new Men_Q;
QW = new Women_Q ;
}
另外, 可以直接typedef Men_Node Women_Node;