問題
//循環隊列
#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);
}
}