问题
//循环队列
#include <stdio.h>
#include <stdlib.h>
#include<iostream>
#include<string>
using namespace std;
//数组结构体
typedef struct{
char name[20];
char sex;
}Persion;
typedef Persion * QElemType;
#define MAXSIZE 100
//循环队列
typedef struct{
QElemType base;
int front;
int rear;
}SqQueue,*Sqlink;
//初始化
void InitQueue(Sqlink &Q){
Q = (Sqlink)malloc(sizeof(SqQueue));
Q->base = (QElemType)malloc(MAXSIZE*sizeof(Persion));
Q->front = Q->rear = 0;
return;
}
//入队
bool EnQueue(Sqlink &Q, QElemType p){
if ((Q->rear + 1) % MAXSIZE == Q->front)return false;
Q->base[Q->rear] = *p;
/*Q->base[Q->rear].name= p->name;
Q->base[Q->rear].sex = p->sex;*/
Q->rear = (Q->rear + 1) % MAXSIZE;
return true;
}
//出队
void DeQueue(Sqlink &Q, QElemType &p){
p = Q->base+Q->front;
Q->front = (Q->front + 1) % MAXSIZE;
return;
}
//队空
bool EmptyQueue(Sqlink Q){
if (Q->front == Q->rear)return true;
return false;
}
int main(){
Sqlink Fdancers , Mdancers;
//Sqlink Fdancers = (Sqlink)malloc(sizeof(SqQueue)), Mdancers = (Sqlink)malloc(sizeof(SqQueue));
InitQueue(Fdancers);
InitQueue(Mdancers);
QElemType temp=(QElemType)malloc(sizeof(Persion));
int num;
scanf("%d", &num);
while (num--){
cin >> temp->name;
getchar();
cin>>temp->sex;
if (temp->sex == 'M'){
if (!EnQueue(Mdancers, temp)){
printf("\n队满\n");
break;
}
}
else if (temp->sex == 'F'){
if (!EnQueue(Fdancers, temp)){
printf("\n队满\n");
break;
}
}
}
printf("匹配舞伴(男/女):\n");
while (!EmptyQueue(Mdancers) && !EmptyQueue(Fdancers)){
DeQueue(Mdancers, temp);
printf("%s ", temp->name);
DeQueue(Fdancers, temp);
printf("%s\n", temp->name);
}
printf("分配完毕\n");
if (!EmptyQueue(Mdancers) || !EmptyQueue(Fdancers)){
printf("待配对者:\n");
if (!EmptyQueue(Mdancers)){
DeQueue(Mdancers, temp);
printf("%s\n", temp->name);
}
else{
DeQueue(Fdancers, temp);
printf("%s\n", temp->name);
}
}
system("PAUSE");
return 0;
}
0.结构体
//数组结构体
typedef struct{
char name[20];
char sex;
}Persion;
typedef Persion * QElemType;
#define MAXSIZE 100
//循环队列
typedef struct{
QElemType base;
int front;
int rear;
}SqQueue,*Sqlink;
1.循环队列的基本操作(初始化,入队,出队,判空)
提示
p是Persion*,所以 星号p 是Persion
temp也是Persion*
Q->base[Q->front]是Persion
但Q->base+Q->front是Persion*,所以 星号(Q->base+Q->front)是Persion
//初始化
void InitQueue(Sqlink &Q){
Q = (Sqlink)malloc(sizeof(SqQueue));
Q->base = (QElemType)malloc(MAXSIZE*sizeof(Persion));
Q->front = Q->rear = 0;
return;
}
//入队
bool EnQueue(Sqlink &Q, QElemType p){
if ((Q->rear + 1) % MAXSIZE == Q->front)return false;
Q->base[Q->rear] = *p;
/*Q->base[Q->rear].name= p->name;
Q->base[Q->rear].sex = p->sex;*/
Q->rear = (Q->rear + 1) % MAXSIZE;
return true;
}
//出队
void DeQueue(Sqlink &Q, QElemType &p){
p = Q->base+Q->front;
Q->front = (Q->front + 1) % MAXSIZE;
return;
}
//队空
bool EmptyQueue(Sqlink Q){
if (Q->front == Q->rear)return true;
return false;
}
2.舞伴问题函数
## 输入
输入到暂存值QElemType temp,根据性别入队
注意
队列指针Fdancers , Mdancers要分配指针的内存空间,
暂存值QElemType temp也要分配指针的内存空间
Sqlink Fdancers , Mdancers;
//Sqlink Fdancers = (Sqlink)malloc(sizeof(SqQueue)), Mdancers = (Sqlink)malloc(sizeof(SqQueue));
InitQueue(Fdancers);
InitQueue(Mdancers);
QElemType temp=(QElemType)malloc(sizeof(Persion));
int num;
scanf("%d", &num);
while (num--){
cin >> temp->name;
getchar();
cin>>temp->sex;
if (temp->sex == 'M'){
if (!EnQueue(Mdancers, temp)){
printf("\n队满\n");
break;
}
}
else if (temp->sex == 'F'){
if (!EnQueue(Fdancers, temp)){
printf("\n队满\n");
break;
}
}
}
输出
printf("匹配舞伴(男/女):\n");
while (!EmptyQueue(Mdancers) && !EmptyQueue(Fdancers)){
DeQueue(Mdancers, temp);
printf("%s ", temp->name);
DeQueue(Fdancers, temp);
printf("%s\n", temp->name);
}
printf("分配完毕\n");
if (!EmptyQueue(Mdancers) || !EmptyQueue(Fdancers)){
printf("待配对者:\n");
if (!EmptyQueue(Mdancers)){
DeQueue(Mdancers, temp);
printf("%s\n", temp->name);
}
else{
DeQueue(Fdancers, temp);
printf("%s\n", temp->name);
}
}