PI-ITBA / 2024_01

9 stars 0 forks source link

AeropuertoADT #380

Closed WaluiguiVevo closed 1 week ago

WaluiguiVevo commented 1 week ago

Dejo este codigo que no estoy pudiendo correr por las lineas que tienen comentarios (son errores que no el entiendo el porque). Si me podrian corregir el codigo y decirme donde me equivoco seria una gran ayuda. Desde ya muchas gracias

#include <stdio.h>
#include <stdlib.h>
#include <strings.h>

typedef struct counterCDT
{
    coso *Counters;
    size_t maxcounter;
} lcounters;

typedef struct counter
{
    size_t numpasa;
    pasajeros *lpasa; //iterador (nose por que lo llame asi)
    pasajeros *final;
    pasajeros *inicio;
} coso;

typedef struct counter
{
    char *pasajeros;
    pasajeros *tail;
} pasajeros;

lcounters newCounters(size_t maxCounters)
{
    lcounters *new = malloc(sizeof(lcounters)); // tira error si no pongo puntero
    new->Counters = calloc(maxCounters, sizeof(coso));
    new->maxcounter = maxCounters;
    return new; // se que los tipos no coinciden
}

void enterCounter(lcounters counters, size_t counterNumber, const char *passenger)
{
    if (counters.maxcounter <= counterNumber)
    {
        return;
    }
    pasajeros *nuevo = malloc(sizeof(pasajeros)); // tira error si no pongo puntero
    nuevo->pasajeros = passenger;
    nuevo->tail = NULL;
    if (counters.Counters[counterNumber].inicio == NULL)
    {
        counters.Counters[counterNumber].inicio = nuevo;
    }
    counters.Counters[counterNumber].final = nuevo;
    counters.Counters[counterNumber].numpasa++;
    return;
}

void toBeginByCounter(lcounters counters, size_t counterNumber)
{
    if (counters.maxcounter <= counterNumber)
    {
        return;
    }
    counters.Counters[counterNumber]->lpasa = counters.Counters[counterNumber]->inicio;
    return;
}

struct checkInResult
{
    size_t counterNumber;
    const char *checkedInPassenger;
    size_t waitingPassengers;
};

struct checkInResult *checkInCounters(lcounters counters, size_t *checkInResultDim)
{
    struct checkInResult *new = calloc(counters.maxcounter, sizeof(struct checkInResult));
    int j = 0;
    for (int i = 0; i < counters.maxcounter; i++)
    {
        if (counters.Counters[i].numpasa != 0)
        {
            new[j].counterNumber = i + 1; // El counter 0 no existe
            new[j].waitingPassengers = counters.Counters[i].numpasa - 1;
            new[j].checkedInPassenger = counters.Counters[i].inicio;
            borrapasajero(&counters.Counters[i]);
            j++;
        }
    }
    checkInResultDim = j;
    return new;
}

void borrapasajero(coso *l)
{
    if (l->numpasa == 1)
    {
        free(l->inicio->pasajeros);
        free(l);
    }
    else
    {
        coso *aux= malloc(sizeof(coso));
        aux->inicio->pasajeros=l->inicio->tail;
        free(l->inicio->pasajeros);
        l->inicio->pasajeros=aux->inicio;
        free(aux);
        l->numpasa--;
    }
    return;
}
marcelogarberoglio commented 1 week ago

Como que tendría que volver a explicarte la clase de heap y la de structs, y por acá no da. No es para eso.