Poprawa niedziałającego kodu kolejki

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

struct FIFO
{
    struct el_FIFO* pocz;
    struct el_FIFO* kon;
};

struct el_FIFO
{
    int x;
    struct el_FIFO* nast;
};

struct FIFO* attach(struct FIFO *top, int el)
{
    struct el_FIFO * new_el_FIFO=(struct el_FIFO*)malloc(sizeof(struct el_FIFO));
    new_el_FIFO->x=el;
    if(top->kon==NULL)
    {
        new_el_FIFO->nast=NULL;
        top->kon=new_el_FIFO;
        top->pocz=new_el_FIFO;
    }
    else
    {
        new_el_FIFO->nast=NULL;
        top->pocz->nast=new_el_FIFO;
        top->pocz=new_el_FIFO;
    }
    return top;
}

struct FIFO* detach(struct FIFO *top, int *el)
{
    struct el_FIFO * temp;
    if(top->kon!=NULL)
    {
        *el=top->kon->x;
        temp=top->kon;
        top->kon=temp;
        free(top->kon);
        return top;
    }
    else
    {
        return NULL;
    }
}

int top_el(struct FIFO *top, int *el)
{
    if (top!=NULL)
    {
        *el=top->kon->x;
        return 1;
    }
    else
    {
        return 0;
    }
}

int main()
{
    struct el_FIFO * FIFO=(struct el_FIFO*)malloc(sizeof(struct el_FIFO));
    struct el_LIFO *top_FIFO=NULL;
    struct FIFO *kolejka_FIFO=NULL;

    kolejka_FIFO=attach(kolejka_FIFO,7);
    kolejka_FIFO=attach(kolejka_FIFO,12);
    kolejka_FIFO=attach(kolejka_FIFO,25);

    int t;
    if (top_el(kolejka_FIFO,&t)) printf("Wierzcholek: %d\n",kolejka_FIFO->pocz->x);
    else printf("Kolejka pusta.\n");

    int d;
    kolejka_FIFO=detach(kolejka_FIFO,&d);

    printf("Usunieto: %d\n",d);
    if (top_el(kolejka_FIFO,&t)) printf("Wierzcholek: %d\n",kolejka_FIFO->pocz->x);
    else printf("Kolejka pusta.\n");
    return 0;
}

Pomożecie to jakoś naprawić, najlepiej pewnie bedzie napisac od nowa, ale chcialbym wiedziec co mam zle zeby sie jakos nauczyc...

ps. sorry, ale nie wiem jak wstawic to w spoiler

0

Co jest nie tak z Twoim kodem?

0

Program sie włącza, ale od razu krzaczek... nie wiem co jest z tym nie tak xd

0

Co mówi debugger?

0

Nic co najlepsze

0

Zatem wyrzuć ten kod i napisz w całości od nowa, problem solved.
Zwłaszcza, że najwyraźniej nie Ty go napisałeś.

0

Znaczy, bo mam go napisać na dwóch strukturach i w tym sie gubie, ja bym to zrobil inaczej, troche prosciej z mojegu punktu widzenia. A kod pisałem ja od include'ów...

0

Opisz jak Ty byś to zrobił swoim prostszym sposobem - zobaczymy czy znajdziemy jakiś punkt zaczepienia ;-)

0

Bo te struktury pocz i kon moga byc zwyklymi intami globalnymi, prosciej na takich sie operuje chyba. Jak by sie dodawalo/odejmowalo cos z/do kolejki, wtedy mozna dodac tylko do tej pierwszej struktury po jednej zmiennej, a int przypisac wartosci indeksow poczatku i konca kolejki. A musze to zrobic na zaliczenie w dwoch strukturach.

0

Twój pomysł zakłada, że może istnieć tylko jedna kolejka FIFO w całej aplikacji - co w przypadku, gdybym potrzebował na przykład ośmiu? Albo n takich kolejek?

0

Ehh, to zapytam inaczej. Czy malloc w mainie dobrze rezerwuje pamięć dla struktury? Czy nie ma błędu w zapisie o to mi chodzi :p

0

Nope - naprawdę, użyj debuggera i przejdź przez ten kod, to zobaczysz o co chodzi ;-)

Wskazówka: podejrzyj sobie wartość zmiennej top w momencie wywołania pierwszego attach.

0

Spróbuję od nowa, ale najpierw sprawdze topa tak jak mówisz. Napisze jak będą jakieś efekty ale nadal bede miał problem ;d

0

wydaje mi się, że w tym wypadku nazwa fifo jest bardzo niefortunna ;-)

0

Dlaczego? :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1