abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×

    dnes 13:00 | Bezpečnostní upozornění
    Nové vydání zlib opravuje několik problémů při kompresi a dekompresi dat, přetečení bufferů, čtení mimo vyhrazenou paměť, únik neinicializovaných dat. Zvlášť významné jsou chyby v inflateGetDictionary(), inflateSync() a gzwrite(), které mohou způsobit poškození paměti. Vysoká relevance - zlib používá řada systémových i aplikačních komponent.
    vencour | Komentářů: 0
    dnes 12:25 | Bezpečnostní upozornění
    Digicert hlásí neoprávněné čtení archivních zákaznických údajů. Došlo k němu po migraci z února 2025, po níž se interní systém, dříve dostupný jen přes VPN, stal přístupným z internetu. Chyba v oprávněních umožnila nově vytvořeným účtům číst archivní záznamy. K přístupu k datům mělo dojít mezi 27. červnem a 2. červencem 2026. DigiCert neoprávněné čtení potvrdil až 19. října 2026. Problém zpočátku vyhodnotil jako tvorbu účtů, ne jako … více »
    vencour | Komentářů: 1
    dnes 04:44 | Pozvánky

    O víkendu probíhá na FIT VUT v Brně konference OpenAlt 2026 o otevřeném softwaru a datech, IT bezpečnosti, DIY a IoT. Na programu je spousta zajímavých přednášek. Pokud jste v Brně, stavte se. Vstup zdarma. Přednášky lze sledovat i online na VHSky a YouTube.

    Ladislav Hagara | Komentářů: 1
    dnes 02:11 | IT novinky

    Qualcomm uzavřel víceletou dohodu se SpaceX. Bude dodávat rádiové technologie, baseband jednotky a software pro plánovanou pozemní 5G síť Starlink Mobile. Výstavba má zahrnovat desítky tisíc základnových stanic v USA. Zahájení nasazování se očekává v roce 2027. Qualcomm dohodu označuje za svůj dosud největší 5G kontrakt.

    vencour | Komentářů: 1
    dnes 02:00 | IT novinky

    Google rozšířil Cloud Vulnerability Reward Program. Nově nabízí odměnu až 250 tisíc dolarů za vysoce závažné architektonické bezpečnostní chyby označované jako Root-in-Cloud.

    vencour | Komentářů: 1
    včera 12:22 | IT novinky

    V březnu byla oznámena spolupráce GrapheneOS s Motorolou. Nejnovější vlajka Motorola Signature 27 je první Motorola s oficiální podporou GrapheneOS. GrapheneOS (Wikpedie) je varianta Androidu zaměřující se na bezpečnost a soukromí.

    Ladislav Hagara | Komentářů: 0
    včera 04:55 | Nová verze

    Omarchy (Wikipedie) je linuxová distribuce s dlaždicovým správcem oken Hyprland. Založena je na Arch Linuxu. Vydána byla v nové verzi 4.5.0. Nově také pro Apple Silicon, konkrétně pro M1/M2/M3/Neo MacBooky.

    Ladislav Hagara | Komentářů: 3
    včera 03:22 | Nová verze

    Byla vydána nová stabilní verze 8.3 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 156 s bezpečnostními opravami z Chromia 157. Přehled novinek i s náhledy v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    5.11. 19:53 | Bezpečnostní upozornění
    V Xenu objevena zranitelnost. Chyba v mechanismu grant copy umožňuje škodlivému virtuálnímu stroji číst a přepisovat libovolnou paměť jiných VM včetně privilegované domény Dom0. Dotčené verze jsou Xen 4.6 a novější. V upstreamu jsou dostupné patche pro Xen 4.17 až 4.19 a vývojovou větev. Pro starší nepodporované verze 4.6–4.16 nejsou v XSA-523 přiloženy opravy.
    vencour | Komentářů: 2
    5.11. 16:55 | Nová verze

    Multimediální přehrávač mpv byl vydán ve verzi 0.42.0. Jde o větší balík změn po bezmála roce. Mimo jiné se lépe integruje s Waylandem nebo rozšiřuje podporu DVD/Blu-ray, např. umožňuje přehrávat rovnou obrazy médií (soubory iso).

    ʚĭɞ 🍉 | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (9%)
     (7%)
     (4%)
     (21%)
     (30%)
     (9%)
     (5%)
     (2%)
     (14%)
     (20%)
    Celkem 2996 hlasů
     Komentářů: 35, poslední včera 23:27
    Rozcestník

    Dotaz: Spojovy seznam v C - osvetleni principu traverzovani

    tomes.io avatar 4.4.2012 20:40 tomes.io | skóre: 12 | blog: tomesh
    Spojovy seznam v C - osvetleni principu traverzovani
    Přečteno: 2009×
    Ahoj,

    neobracim se na vas s problemem, ale s zadosti o radu zkusenych. Snazim se ucit C poctive a vse chapat, ne jen pouzivat predem pripravene sablony aniz bych znal princip, proto jsem jako prvni jazyk na doporuceni zvolil prave C, ne javu ne C++ kde je toho pry spousta predchystaneho :) Ale k veci.

    Jedna se o spojovy seznam. Jeho princip (algoritmus) chapu, nerozumim vsak jedne veci v jeho implementaci - traverzovani.

    Vychazejme treba z tohto prikladu:
    
    
    typedef struct _node {
      struct _node* pNext;  // pointer to next node in dynamically allocated list
      int data;            // data carried by this item
    } Node;
    
    int main() {
        
        char name[1024];
        Node *head = NULL;
    
        do
        {
           printf("Zadej jmeno: ");
           scanf("%s", name);
    
           // dynamic allocation of single structure (heap)
           Node* newNode = malloc(sizeof(Node));
           newNode->data = strlen(name);
           newNode->pNext = NULL;
    
           if(head == NULL) // First element
           {
               head = newNode;
               continue;
           }
    
           // Not first element
           Node* pNode = head;  // current node
           while(pNode->pNext != NULL)
               pNode = pNode->pNext;
    
           // Add
           pNode->pNext = newNode;
        }
        while(strcmp(name, "KONEC") != 0);
    
        Node* pNode = head;
    
    Kdyz si to rozeberu, tak:
    pNode = head; 
    Zkopiruje prvni node do druheho.
    while (pNode->next != NULL) {
                pNode = pNode->next;
              } 
    Tohle prochazi seznam od prvniho node. Ale jak si to mam predstavit? Program v druhe iteraci utvoril kopii stuktury prvniho node (head), tzn. jeho obsah zkopiroval do pointeru na strukturu jmenem pNode.

    V tom pripade podle toho, co vim, polozka pNode->next jako "protejsek" head->next obsahuje adresu na strukturu, ktera je nulova (head->next = NULL). Vysledek WHILE je tedy nenulovy a provede se prikaz:
    pNode = pNode->next;
    A tady nerozumim, co se timto prikazem mysli. Resp. jak se timto zajisti traverze. Co presne udela? Ja to vidim takto:

    pNode je kopie head a pNode->next jako pointer obsahuje adresu na strukturu, ktera ma hodnotu NULL. Prikaz tedy ve druhe iteraci prepise pNode na strukturu, kde maji vsechny prvky NULL hodnotu. Dalsi WHILE tedyneprobehne a dojde k pridani noveho node do pNode-next.

    Pak dojde ke treti iteraci, znovu se vytvori pNode jako kopie head a udela se test. Jenze tady me chapani konci... nechapu, proc se znovu kopiruje head... Vim, ze kopie struktury ukazuje na stejne misto v pameti (kopie "mělká"). Dojde snad k tomu, ze kdyz ve treti (az n-te) iteraci porad kopiruju head, ty predchozi nody jsou nejak uchovavany provazane v pameti, kam ukazuje head? Potom by se jednalo o jakesi pole struktur.

    Ono to asi cele bude jinak ja jen chtel nastinit, k cemu jsem zatim v mych uvahach dospe. Nedokazu jaksi prolomit tu barieru abstrakce, takze kdyby me nekdo nakopl, velmi bych to ocenil.

    Jeste tu mam jednu moznost:

    pNode->next je v definici struktury ukazatel na strukturu samu. Takze struktura se prepise sama sebou? Potom nerozumim, jakym zpusobem je pak propojena s head...


    Řešení dotazu:


    Odpovědi

    tomes.io avatar 4.4.2012 20:47 tomes.io | skóre: 12 | blog: tomesh
    Rozbalit Rozbalit vše Re: Spojovy seznam v C - osvetleni principu traverzovani
    Sakra, nevsiml jsem si, ze to vkladam do spatne rubriky... tohle ma byt do poradny Programování. Tak kdyby to snad nekdo mohl presunout... omlouvam se
    4.4.2012 21:04 rastos | skóre: 63 | blog: rastos
    Rozbalit Rozbalit vše Re: Spojovy seznam v C - osvetleni principu traverzovani
    Kdyz si to rozeberu, tak:
    pNode = head; 
    Zkopiruje prvni node do druheho.
    while (pNode->next != NULL) 
    {
        pNode = pNode->next;
    } 
    Tohle prochazi seznam od prvniho node. Ale jak si to mam predstavit? Program v druhe iteraci utvoril kopii stuktury prvniho node (head), tzn. jeho obsah zkopiroval do pointeru na strukturu jmenem pNode.

    Linkovaný zoznam sa graficky znázorňuje, ako rad krabičiek pospájaných šipkami. Šipka v tom rade, je vlastne to 'next' a je to pointer na štruktúru Node(krabičku). pNode je dočasná premenná. Priradením pNode=head sa povie, že premenná pNode (šípka) ukazuje na tú istú krabičku, na ktorú ukazuje šípka head. Nekopíruje sa celá štruktúra, ale sa kopíruje adresa na štruktúru - teda pointer. V tom while cykle sa potom premenná pNode postupne namieri na ďalšiu a ďalšiu krabičku v zozname a cyklus skončí vtedy, keď bude namierená na poslednú krabičku - teda tú, ktorej next je NULL.

    Po skonečení while cyklu je pNode teda šípka ukazujúca na posledný prvok v zozname. A do pNode->next sa priradí adresa na pridávaný prvok - ten, na ktorý ukazuje šípka newNode. Tým je prvok pridaný na koniec zonamu.

    Lepšie?
    Řešení 1× (buff)
    4.4.2012 20:57 Milan Roubal | skóre: 25
    Rozbalit Rozbalit vše Re: Spojovy seznam v C - osvetleni principu traverzovani
    Ahoj, pNode = head; Zkopiruje prvni node do druheho.
    Tvoje uvaha je chybna jiz na tomto prvnim kroku. pNode totiz neni kopie head, ale jen ukazatel (pointer, proto to male p) na head.

    Tedy cast
    while (pNode->next != NULL) { pNode = pNode->next; }
    dela to, ze v existujici strukture hleda adresu posledniho prvku v seznamu.

    Koukni se treba sem, ten pNode se posouva stejne jako pAkt na te strance na obrazku 3.
    tomes.io avatar 4.4.2012 22:13 tomes.io | skóre: 12 | blog: tomesh
    Rozbalit Rozbalit vše Re: Spojovy seznam v C - osvetleni principu traverzovani
    Diky vam obema. Uz se mi to vyjasnilo. Me zmatl ten prvek pNode->next, kdyz jsem ho tam videl, neuvedomil jsem si, ze to je prvek ukazatele kterym pristupuji na prvek ve strukture, nak terou odkazuje. Napsal jsem si pro sebe jednoduchy programek a uz je mi to jasne. Je to proste zpusob pristupu na prvky struktury skrze pointer na strukturu.

    Obrazky taky pomohly ;)

    Založit nové vlákno • Nahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.