#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 10
typedef char *element;
typedef struct {
element queue[10];
char front, rear;
}QueueType;
void error(char *message)
{
fprintf(stderr, "%sn", message);
exit(1);
}
void init(QueueType *q)
{
q->front = q->rear = 0;
}
int is_empty(QueueType *q)
{
return (q->front == q->rear);
}
int is_full(QueueType *q)
{
return ((q->rear + 1) % SIZE == q->front);
}
void enqueue(QueueType *q, element item)
{
if (is_full(q))
error("큐가 포화상태입니다!");
q->queue[++q->rear] = item;
q->rear = (q->rear + 1) % SIZE;
}
element dequeue(QueueType *q)
{
if (is_empty(q))
error("큐가 공백상태입니다!");
element temp;
temp = q->queue[++q->front];
q->front = (q->front + 1) % SIZE;
return temp;
}
element peek(QueueType *q)
{
if (is_empty(q))
error("큐가 공백상태입니다!");
return q->queue[(q->front + 1) % SIZE];
}
void main()
{
QueueType male;
QueueType Female;
init(&male);
init(&Female);
char name1[SIZE];
char name2[SIZE];
int sex;
while (1)
{
printf("성별을 입력해주세요. (남자 : 0, 여자 : 1) : ");
scanf("%d", &sex);
switch (sex) {
case 0:
printf("이름을 입력해주세요. : ");
scanf("%s", name1);
enqueue(&male, name1);
break;
case 1:
printf("이름을 입력해주세요. : ");
scanf("%s", name2);
enqueue(&Female, name2);
break;
default:
printf("성별이 잘못되었습니다.\n");
}
if ((is_empty(&male) == 1 || is_empty(&Female)) == 1)
printf("아직 기다리셔야 합니다.\n");
else if (is_empty(&male) == 0 && is_empty(&Female) == 0)
printf("커플이 탄생했습니다! %s와 %s입니다! \n", dequeue(&male), dequeue(&Female));
else
continue;
}
return;
}
오류인 점은 내가 남자를 두번 입력하면 큐가 2번 쌓여서 남자 1, 남자 2가 저장되고,
여자 1, 여자 2를 입력하면 남자 1, 여자 1이랑 남자 2, 여자 2가 매칭되는 프로그램을 작성하고 싶은데
여기서 어떻게 해야 될지 모르겠다..
해결
너만 해결하면 뭐하냐