#include
#include
#include
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100
typedef int Status;
typedef struct
{
char name[20];
char sex;
}Person,QElemType;
typedef struct Qnode
{
QElemType data;
struct Qnode *next;
}QNode, *QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
int main()
{
LinkQueue MDancers,FDancers;
Person dancers[MAXSIZE],p;
int i,num;
Status InitQueue (LinkQueue &Q);
Status QueueEmpty (LinkQueue Q);
Status GetHead(LinkQueue Q, QElemType &e);
Status EnQueue(LinkQueue &Q,QElemType e);
Status DeQueue (LinkQueue &Q,QElemType &e);
InitQueue(MDancers);
InitQueue(FDancers);
printf("有多少人参加舞会:");
scanf("%d",&num);
for(i=0;i<num;i++)
{
printf("请输入第%d个人的姓名和性别:",i+1);
scanf("%s",dancers[i].name);
scanf("%c",dancers[i].sex);
dancers[i].sex=toupper(dancers[i].sex);
}
for(i=0;i<num;i++)
{
if(dancers[i].sex=='M')
EnQueue(MDancers,dancers[i]);
else
EnQueue(FDancers,dancers[i]);
}
printf("组合的舞伴是:\n");
while(!QueueEmpty(FDancers)&&!QueueEmpty(MDancers))
{
DeQueue(FDancers,p);
printf("%s",p.name);
DeQueue(MDancers,p);
printf("%s",p.name);
}
if(!QueueEmpty(FDancers))
{
GetHead(FDancers,p);
printf("下一曲第一个获得舞伴的女士是:%s\n",p.name);
}
if(!QueueEmpty(MDancers))
{
GetHead(MDancers,p);
printf("下一曲第一个获得舞伴的男士是:%s\n",p.name);
}
return 0;
}
Status InitQueue(LinkQueue &Q)
{
Q.front=Q.rear=new(Qnode);
if(!Q.front) exit(OVERFLOW);
Q.front->next=NULL;
return OK;
}
Status QueueEmpty(LinkQueue Q)
{
return ( Q.front==Q.rear);
}
Status GetHead(LinkQueue Q,QElemType &e)
{
if(QueueEmpty(Q))
return ERROR;
else
e=Q.front->next->data;
return OK;
}
Status EnQueue(LinkQueue &Q,QElemType e)
{
QueuePtr p;
p=new Qnode;
if(!p)
exit(OVERFLOW);
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return OK;
}
Status DeQueue(LinkQueue &Q,QElemType &e)
{
QueuePtr p;
if(QueueEmpty(Q))
return ERROR;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p)
Q.rear=Q.front;
delete p;
return OK;
}
#include
#include
#include
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100
typedef int Status;
typedef struct
{
char name[20];
char sex;
}Person,QElemType;
typedef struct Qnode
{
QElemType data;
struct Qnode *next;
}QNode, *QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
int main()
{
LinkQueue MDancers,FDancers;
Person dancers[MAXSIZE],p;
int i,num;
Status InitQueue (LinkQueue &Q);
Status QueueEmpty (LinkQueue Q);
Status GetHead(LinkQueue Q, QElemType &e);
Status EnQueue(LinkQueue &Q,QElemType e);
Status DeQueue (LinkQueue &Q,QElemType &e);
InitQueue(MDancers);
InitQueue(FDancers);
printf("有多少人参加舞会:");
scanf("%d",&num);
for(i=0;i<num;i++)
{
printf("请输入第%d个人的姓名和性别:",i+1);
scanf("%s",dancers[i].name);
scanf("%c",dancers[i].sex);
dancers[i].sex=toupper(dancers[i].sex);
}
for(i=0;i<num;i++)
{
if(dancers[i].sex=='M')
EnQueue(MDancers,dancers[i]);
else
EnQueue(FDancers,dancers[i]);
}
printf("组合的舞伴是:\n");
while(!QueueEmpty(FDancers)&&!QueueEmpty(MDancers))
{
DeQueue(FDancers,p);
printf("%s",p.name);
DeQueue(MDancers,p);
printf("%s",p.name);
}
if(!QueueEmpty(FDancers))
{
GetHead(FDancers,p);
printf("下一曲第一个获得舞伴的女士是:%s\n",p.name);
}
if(!QueueEmpty(MDancers))
{
GetHead(MDancers,p);
printf("下一曲第一个获得舞伴的男士是:%s\n",p.name);
}
return 0;
}
Status InitQueue(LinkQueue &Q)
{
Q.front=Q.rear=new(Qnode);
if(!Q.front) exit(OVERFLOW);
Q.front->next=NULL;
return OK;
}
Status QueueEmpty(LinkQueue Q)
{
return ( Q.front==Q.rear);
}
Status GetHead(LinkQueue Q,QElemType &e)
{
if(QueueEmpty(Q))
return ERROR;
else
e=Q.front->next->data;
return OK;
}
Status EnQueue(LinkQueue &Q,QElemType e)
{
QueuePtr p;
p=new Qnode;
if(!p)
exit(OVERFLOW);
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return OK;
}
Status DeQueue(LinkQueue &Q,QElemType &e)
{
QueuePtr p;
if(QueueEmpty(Q))
return ERROR;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p)
Q.rear=Q.front;
delete p;
return OK;
}
__ //你的代码里面少了&符,这样导致非法内存访问了,应该是scanf_s("%c", &dancers[i].sex);具体的代码逻辑我没看...
#if 1
#include
#include
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100
typedef int Status;
typedef struct
{
char name[20];
char sex;
}Person, QElemType;
typedef struct Qnode
{
QElemType data;
struct Qnode *next;
}QNode, *QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
int main()
{
LinkQueue MDancers, FDancers;
Person dancers[MAXSIZE], p;
int i, num;
Status InitQueue(LinkQueue &Q);
Status QueueEmpty(LinkQueue Q);
Status GetHead(LinkQueue Q, QElemType &e);
Status EnQueue(LinkQueue &Q, QElemType e);
Status DeQueue(LinkQueue &Q, QElemType &e);
InitQueue(MDancers);
InitQueue(FDancers);
printf("有多少人参加舞会:");
scanf_s("%d", &num);
for (i = 0; i<num; i++)
{
printf("请输入第%d个人的姓名和性别:", i + 1);
scanf_s("%s", dancers[i].name);
fflush(stdin);
//你的代码里面少了&符,这样导致非法内存访问了,应该是scanf_s("%c", &dancers[i].sex);具体的代码逻辑我没看...
scanf_s("%c", dancers[i].sex);
dancers[i].sex = toupper(dancers[i].sex);
}
for (i = 0; i<num; i++)
{
if (dancers[i].sex == 'M')
EnQueue(MDancers, dancers[i]);
else
EnQueue(FDancers, dancers[i]);
}
printf("组合的舞伴是:\n");
while (!QueueEmpty(FDancers) && !QueueEmpty(MDancers))
{
DeQueue(FDancers, p);
printf("%s", p.name);
DeQueue(MDancers, p);
printf("%s", p.name);
}
if (!QueueEmpty(FDancers))
{
GetHead(FDancers, p);
printf("下一曲第一个获得舞伴的女士是:%s\n", p.name);
}
if (!QueueEmpty(MDancers))
{
GetHead(MDancers, p);
printf("下一曲第一个获得舞伴的男士是:%s\n", p.name);
}
return 0;
}
Status InitQueue(LinkQueue &Q)
{
Q.front = Q.rear = new(Qnode);
if (!Q.front) exit(OVERFLOW);
Q.front->next = NULL;
return OK;
}
Status QueueEmpty(LinkQueue Q)
{
return (Q.front == Q.rear);
}
Status GetHead(LinkQueue Q, QElemType &e)
{
if (QueueEmpty(Q))
return ERROR;
else
e = Q.front->next->data;
return OK;
}
Status EnQueue(LinkQueue &Q, QElemType e)
{
QueuePtr p;
p = new Qnode;
if (!p)
exit(OVERFLOW);
p->data = e;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
return OK;
}
Status DeQueue(LinkQueue &Q, QElemType &e)
{
QueuePtr p;
if (QueueEmpty(Q))
return ERROR;
p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if (Q.rear == p)
Q.rear = Q.front;
delete p;
return OK;
}
#endif