Я пытаюсь реализовать очередь, в которой будут стоять люди, ожидающие очереди в ванной, но дело в том, что ванная для мужчин и женщин, но когда мужчины присутствуют, женщины не могут войти и когда женщины присутствуют, мужчины не могут войти. Это моя проблема. (Его демо для одного из моих классов его не оценили едва ли не академическим)Реализация простой очереди с помощью связанного списка
Я могу вставлять людей в ванную комнату и в очередь (когда женщины пытаются войти, а в ванной она добавляется, очередь), но я не могу взять людей из очереди и вставить затем в ванную, когда они имеют право на вход. Вот мой код.
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
struct Node
{
int Data;
struct Node* next;
}*rear, *front;
void delQueue()
{
struct Node *temp, *var=rear;
if(var==rear)
{
rear = rear->next;
free(var);
}
else
printf("\nQueue Empty");
}
void push(int value)
{
struct Node *temp;
temp=(struct Node *)malloc(sizeof(struct Node));
temp->Data=value;
if (front == NULL)
{
front=temp;
front->next=NULL;
rear=front;
}
else
{
front->next=temp;
front=temp;
front->next=NULL;
}
}
void display()
{
struct Node *var=rear;
if(var!=NULL)
{
printf("\nElements in queue are: ");
while(var!=NULL)
{
printf("\t%d",var->Data);
var=var->next;
}
printf("\n");
}
else
printf("\nQueue is Empty\n");
}
int main() {
int man_busy = 0;
int woman_busy = 0;
int input = 0;
int i = 0;
printf("\n(1) Man enters\n");
printf("(2) Woman enters\n");
printf("(3) Man leaves\n");
printf("(4) Woman leaves\n");
printf("\nEmpty!\n");
for(i=0; i<20; i++) {
scanf("%d", &input);
if(input == 1){
if(woman_busy > 0){
printf("Man Can't enter when women are present\n");
printf("You will have to wait in the queue\n");
push(input);
display();
}
else if(woman_busy == 0) {
man_busy = man_busy + 1;
printf("Occupied By Man: %d\n", man_busy);
}
}
else if(input == 2) {
if(man_busy > 0){
printf("Woman Can't enter when men are present\n");
printf("You will have to wait in the queue\n");
push(input);
display();
}
else if(man_busy == 0) {
woman_busy = woman_busy + 1;
printf("Occupied By Woman: %d\n", woman_busy);
}
}
else if(input == 3) {
man_busy = man_busy - 1;
if (man_busy == 0 && woman_busy == 0){
printf("Empty!\n");
delQueue();
display();
}
else if (man_busy < 0) {
printf("Invalid command!\n");
man_busy = man_busy + 1;
}
else {
printf("Occupied By Man: %d\n", man_busy);
}
}
else if(input == 4) {
woman_busy = woman_busy - 1;
if (man_busy == 0 && woman_busy == 0) {
printf("Empty!\n");
delQueue();
display();
}
else if (woman_busy < 0) {
printf("Invalid command!\n");
woman_busy = woman_busy + 1;
}
else {
printf("Occupied By Woman: %d\n", woman_busy);
}
}
}
return 0;
}
Неужели мужчины прыгают впереди женщин, ожидающих в очереди, если мужчина уже находится в ванной, а v.v.? –
да мужчины прыгают по линии и входят, если в ванной уже есть мужчины, и она работает в обоих направлениях. – user2133160