BlueBear icon

doubleLinkedList.c

BlueBear | PRO | 04/16/13 05:13:35 PM UTC | 0 ⭐ | 405 👁️ | Never ⏰ | []
C |

4.16 KB

|

None

|

0 👍

/

0 👎

/*
    xnagyl2.c
    cvicenie 8
    Laszlo Nagy
*/
 
#include <stdio.h>
#include <stdlib.h>
 
 
//Práca so spájaným zoznamom štruktúr. Vytvorte spájaný zoznam záznamov o tovare v
//potravinách. Jednotlivé záznamy majú obsahovať názov tovaru, výrobcu, počet kusov a
//jednotkovú cenu (okrem týchto položiek nezabudnite do štruktúry pridať ukazovateľa na
//seba). Zoznam udržiavajte stále usporiadaný podľa názvov tovarov.
//(a) Umožnite používateľovi pridať nový tovar (podľa názvu).
//(b) Umožnite používateľovi zmazať tovar (podľa názvu).
 
 
typedef struct tovar tov_t;
 
 
struct tovar
{
    char nazov[50];
    char vyrobca[50];
    int kusy;
    double cena;
    tov_t * prev;
    tov_t * next;
};
 
 
typedef struct linked_list
{
    tov_t * first;
    tov_t * last;
}
list_t;
 
void list_init(list_t *list);
void list_add (list_t * list);
void traverse(list_t * list);
void traverse_reverse (list_t * list);
void list_delete (list_t * list);
void linked_list_delete (list_t * list, tov_t * link);
 
 
int main()
{
    list_t tov;
    char c;
 
 
    list_init(&tov);
 
    while(c = getchar())
    {
        fflush(stdin);
        switch(c)
        {
        case 'P':
            list_add(&tov);
            break;
        case 'V':
            traverse(&tov);
            break;
        case 'E':
            list_delete(&tov);
            break;
        case 'W':
            traverse_reverse(&tov);
            break;
        case 'Q':
            exit(0);
            break;
        }
    }
    return 0;
}
 
void list_init(list_t *list)
{
    list->first = list->last = 0;
}
 
void list_add (list_t * list)
{
    tov_t * link;
 
    /* calloc nam nastavi dalsie na null. */
    link = (tov_t *)calloc (1 ,sizeof(tov_t));
    if (! link)
    {
        fprintf (stderr, "nebolo alokovane.\n");
        exit (EXIT_FAILURE);
    }
    scanf("%s", &link->nazov);
    scanf("%s", &link->vyrobca);
    scanf("%d", &link->kusy);
    scanf("%lf", &link->cena);
    if (list->last)
    {
        /* spojenie zaznamov. */
        list->last->next = link;
        link->prev = list->last;
        list->last = link;
    }
    else
    {
        list->first = link;
        list->last = link;
    }
}
 
 
void linked_list_delete (list_t * list, tov_t * link)
{
    tov_t * prev;
    tov_t * next;
 
    prev = link->prev;
    next = link->next;
    if (prev)
    {
        if (next)
        {
            /* obe zaznamy su platne, len nech preskoci aktualne*/
            prev->next = next;
            next->prev = prev;
        }
        else
        {
            /* len zaznam predtym je platny, tak nam aktualny zaznam sa stane poslednym */
            prev->next = 0;
            list->last = prev;
        }
    }
    else
    {
        if (next)
        {
            /* len dalsi zaznam je platny, tak ten dalsi sa stane prvym zaznamom */
            next->prev = 0;
            list->first = next;
        }
        else
        {
            /* zoznam je prazdny */
            list->first = 0;
            list->last = 0;
        }
    }
    free(link);
}
 
void list_delete (list_t * list)
{
    tov_t * link;
    char str[50];
    scanf("%s", &str);
    fflush(stdin);
 
    for (link = list->first; link; link = link->next)
    {
        if (!strcasecmp(str, link->nazov))
        {
            linked_list_delete (list, link);
        }
    }
}
 
void traverse_reverse(list_t * list)
{
    tov_t * link;
 
    for (link = list->last; link; link = link->prev)
    {
        printf("nazov tovaru: %s\n", link->nazov);
        printf("vyrobca: %s\n", link->vyrobca);
        printf("pocet kusov: %d\n", link->kusy);
        printf("cena tovaru: %lf\n", link->cena);
        printf("\n");
    }
}
 
void traverse(list_t * list)
{
    tov_t * link;
 
    for (link = list->first; link; link = link->next)
    {
        printf("nazov tovaru: %s\n", link->nazov);
        printf("vyrobca: %s\n", link->vyrobca);
        printf("pocet kusov: %d\n", link->kusy);
        printf("cena tovaru: %lf\n", link->cena);
        printf("\n");
    }
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  • Syutrsz icon
    03/31/26 10:27:21 PM UTC
    text |

    0 B

    |

    0 👍

    /

    0 👎

    Best t33n active cpx link daily updates!
     Copy and paste the link in a new browser tab and then hit enter!
     https://crazyporn.@xxx/members/157354/?asgtbndr=1&play=true&spon=adworld&zone=400
     Remove the @ 
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎