//顺序队列
#define MAXSIZE 100
int flag = 0; //入队成功标识1,出队就标识0
typedef struct sqQueue {
int front;
int rear;
int *base;
} sqQueue;
bool initqueue(sqQueue &q) {
q.base = (int *)malloc(MAXSIZE * sizeof(int));
if (!q.base) {
return 0;
}
q.front = q.rear = 0;
return 1;
}//入队
bool enqueue(sqQueue &q, int e) {
//判断队满
if (q.front == q.rear && flag == 1) {
return 0;
}
q.base[q.rear] = e;
q.rear = (q.rear + 1) % MAXSIZE;
flag = 1;
return 1;
}
//出队
bool outqueue(sqQueue &q, int &e) {
//判断队空
if (q.front == q.rear && flag == 0) {
return 0;
}
e = q.base[q.front];
q.front = (q.front + 1) % MAXSIZE;
flag = 0;
return 1;
}
//求队列长度
int queuelength(sqQueue q) {
int length;
if (q.front == q.rear && flag == 1) {
length = MAXSIZE;
} else {
length = (q.rear - q.front + MAXSIZE) % MAXSIZE;
}
return length;
}
//队列链表
typedef struct QNode{
int data;
struct QNode* next;
}QNode,*QueuePtr;
typedef struct{
*QueuePtr front;
*QueuePtr rear;
}LinkQueue;
链队列初始化
bool InitQueue(LinkQueue &Q){
Q.front=(QueuePtr)malloc(sizeof(QNode));
if(!Q.front){
return 0;
}
Q.front->next=NULL;
Q.rear=Q.front;
return 1;
}
进队列
bool EnQueue(LinkQueue %Q,e){
QueuePtr p=(QueuePtr)malloc(sizeof(QueuePtr));
p->data=e;
p->next=Q.rear->next;
Q.rear->next=p;
Q.rear=p
return 1;}
出队列
bool DeQueue(LinkQueue&Q,&e){
if(Q.rear==Q.front){
printf("队列已满");
return 0;
}
QueuePtr p=Q.front->next;
Q.front->next=p->next ;
e=p->data;
if(Q.rear==p){
Q.rear=Q.front;
}
free(p);
return 1;
}
//Q1男生女生跳舞配对问题
typedef struct Person{
char sex;
char name[10];
}QElemtype;
void DancerPartner(QElemtype dancer[],int num){//dancer[]是人员信息,num是人数
LinkQueue boys,girls;
InitQueue(boys);
InitQueue(girls);
for(int i=0;i<num;i++){
QElemtype p= dancer[i];
if(p.sex=='W'){
EnQueue(girls,p);
}
else if(p.sex=='M'){
EnQueue(boys,p);
}
else{
printf("输入的性别有误");
continue;
}
}
printf("配对成功的人是:");
while(!QueueEmpty(girls)&&!QueueEmpty(boys)){
DeQueue(girls,p);
printf("女生:%s",p.name);
DeQueue(bors,p);
printf("男生:%s",p.name);
printf("成功配对");
}
while(!QueueEmpty(girls)){
printf("还有%d名女生没舞伴",QueueLength(girls));
GetHead(girls,p);//取头这个我认为直接DeQueue就行
printf("下一位最先配对的女生是%s",p->name);
}
while(!QueueEmpty(boys)){
printf("还有%d名男生没舞伴",QueueLength(boys));//取长度我认为与单链表相同while(p){length++;}
GetHead(boys,p);
printf("下一位最先配对的男生是%s",p->name);
}
}
int main(){
QElemtype dancer[30];
int n;
printf("共有%d个人排队",n);
for(int i=0;i<n;i++){
printf("请输入姓名");
scanf("%s",dancer[i].name);
printf("请输入sex,男生用M,女生用W");
scanf("%c",dancer[i].sex);
}
DancerPartner(dancer,n);
}
//函数中参数是数组的调用方式,就是说调用的时候都是光一个数组名
//void processArray(char *array)
// processArray(array);
//
//void processArray(char array[], int length)
// processArray(array, strlen(array));
//
//void processArray(char array[10])
// processArray(array);