Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- 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");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement