Tyto stránky již nejsou udržovány. Obsah je postupně přesouván/aktualizován na adrese chytrosti.marrek.cz.
1/1
Na této stránce jsou k dispozici zdrojové soubory, které jsem vytvářel při výkladu během výuky. Nejsou to ukázkové a bezchybné zdrojové soubory. Ba naopak, jsou to pracovní neučesané verze, které vznikaly interaktivně ve výuce, často s cílem ukázat, že "takto se to nemá".
1 /*
2 * Soubor: 20111201-Thu-seznam.c
3 * Datum: 01.12.2011 09:12
4 * Autor: Marek Nožka, nozka <@t> spseol <d.t> cz
5 * Licence: GNU/GPL
6 * Úloha:
7 * Popis:
8 ****************************************************/
9 #define _ISOC99_SOURCE
10 #define _GNU_SOURCE
11 #include <stdio.h>
12 #include <stdlib.h>
13
14
15 typedef struct bod {
16 int x;
17 int y;
18 struct bod *next;
19 } BOD;
20 /****************************************************
21 * Hlavní program.
22 ****************************************************/
23 int main(void)
24 {
25 BOD *prvni; // první položka seznamu
26 BOD *novy; // nová položka zeznamu
27 int bodX, bodY;
28
29 prvni = NULL;
30
31 // zadávám tak dlouho dokud nejsou obě hodnoty 0
32 while (1) {
33 printf("zadej X a Y: ");
34 scanf("%d %d", &bodX, &bodY);
35 if (bodX == 0 && bodY == 0) {
36 break;
37 }
38 // přídám na zaščátek seznamu
39 novy = malloc(sizeof(BOD));
40 novy->x = bodX;
41 novy->y = bodY;
42 novy->next = prvni;
43 prvni = novy;
44 }
45 novy = NULL;
46
47 // Vypíšu první položku v seznamu
48 printf("X: %d, Y: %d\n", prvni->x, (*prvni).y);
49
50 // Vypíšeme všechny položky v seznamu
51 BOD *pracovni = prvni;
52 while (1) {
53 printf("X: %7d, Y: %7d\n", pracovni->x, pracovni->y);
54 pracovni = pracovni->next;
55 if (pracovni == NULL) {
56 break;
57 }
58 }
59 pracovni = NULL;
60
61 // je třeba korektně uvolnit paměť
62 while (1) {
63 pracovni = prvni;
64 prvni = (*prvni).next; // stejné jako prvni->next
65 free(pracovni);
66 if (prvni == NULL) {
67 break;
68 }
69 }
70 prvni = NULL;
71 pracovni = NULL;
72
73 return 0;
74 }