{"id":8482,"date":"2023-04-16T21:22:57","date_gmt":"2023-04-16T19:22:57","guid":{"rendered":"https:\/\/blue.pri.ee\/ttu\/?p=8482"},"modified":"2026-04-27T10:59:15","modified_gmt":"2026-04-27T08:59:15","slug":"pr2et12-ahelloend","status":"publish","type":"post","link":"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2et12-ahelloend\/","title":{"rendered":"PR2ET12: Ahelloend"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2et12-ahelloend\/#Praktikumi_materjal\" >Praktikumi materjal<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2et12-ahelloend\/#Praktikumi_ulesanded\" >Praktikumi \u00fclesanded<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2et12-ahelloend\/#Nouded\" >N\u00f5uded<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2et12-ahelloend\/#Samm-sammuline_juhend\" >Samm-sammuline juhend<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2et12-ahelloend\/#Testimine\" >Testimine<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2et12-ahelloend\/#Lisaulesanne_1_W12-2_Tahestikulises_jarjestikus_sorteeritud_ahelloend\" >Lisa\u00fclesanne 1 [W12-2]: T\u00e4hestikulises j\u00e4rjestikus sorteeritud ahelloend<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2et12-ahelloend\/#Nouded-2\" >N\u00f5uded<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2et12-ahelloend\/#Markused\" >M\u00e4rkused<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2et12-ahelloend\/#Lisaulesanne_2_W12-3_Elementide_eemaldamine\" >Lisa\u00fclesanne 2 [W12-3]: Elementide eemaldamine<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2et12-ahelloend\/#Nouded-3\" >N\u00f5uded<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2et12-ahelloend\/#Markused-2\" >M\u00e4rkused<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2et12-ahelloend\/#Parast_seda_tundi_peaksid\" >P\u00e4rast seda tundi peaksid<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2et12-ahelloend\/#Taiendav_materjal\" >T\u00e4iendav materjal<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"Praktikumi_materjal\"><\/span>Praktikumi materjal<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>Slaidid: <a href=\"https:\/\/blue.pri.ee\/ttu\/files\/iax0584\/slaidid-et\/12_ahelloend.pdf\"><strong>Ahelloendid<\/strong><\/a><\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Praktikumi_ulesanded\"><\/span>Praktikumi \u00fclesanded<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Selle praktikumi baas\u00fclesande k\u00e4igus \u00f5pid looma ahelloendeid. Lisa\u00fclesande k\u00e4igus laiendad loendi funktsionaalsust sedasi, et loend oleks alati sorteeritud olekus ning v\u00f5imaldad ahelloendist elemente eemaldada.<\/p>\n<p><span style=\"font-size: 20px; font-weight: bold;\">\u00dclesanne [W12-1]: Ahelloend<\/span><\/p>\n<p>Baas\u00fclesandes tuleb sul luua rakendus, mis koostab ahelloendi, v\u00f5imaldab ahelloendi l\u00e4bik\u00e4iku ning l\u00f5pus vabastab ahelloendi m\u00e4lust.<\/p>\n<p><strong>Lae alla aluskood: <a href=\"https:\/\/blue.pri.ee\/ttu\/files\/iax0584\/aluskoodid\/12_ll_basecode.zip\">https:\/\/blue.pri.ee\/ttu\/files\/iax0584\/aluskoodid\/12_ll_basecode.zip<\/a><\/strong><\/p>\n<h5><span class=\"ez-toc-section\" id=\"Nouded\"><\/span>N\u00f5uded<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<ul>\n<li>Loo men\u00fc\u00fcprogramm, mis kasutab \u00fchesuunalist ahelloendit<\/li>\n<li>Lisatavad elemendid tuleb paigutada ahelloendi algusesse<\/li>\n<li>Iga elemendi sees on t\u00e4isarv (id) ja s\u00f5ne (nimi)\n<ul>\n<li>id on automaatselt genereeritud, unikaalne, j\u00e4rjestikuline t\u00e4isarv, mis algab nullist<\/li>\n<li>Nimi on s\u00f5ne, mille sisestab kasutaja uue elemendi loomise k\u00e4igus<\/li>\n<li>Nime jaoks rakenda d\u00fcnaamilist m\u00e4lujaotust vastavalt sisestatava nime pikkusele<\/li>\n<\/ul>\n<\/li>\n<li>\u00dclesande lahendamise k\u00e4igus tuleb sul luua minimaalselt j\u00e4rgnevad funktsioonid: <span class=\"lang:c highlight:0 decode:true crayon-inline\">PrintNode()<\/span> , <span class=\"lang:c highlight:0 decode:true crayon-inline \">CreateNode()<\/span> , <span class=\"lang:c highlight:0 decode:true crayon-inline \">InsertNode()<\/span> , <span class=\"lang:c highlight:0 decode:true crayon-inline\">FindNodeByID()<\/span> , <span class=\"lang:c highlight:0 decode:true crayon-inline \">FindNodeByName()<\/span>\u00a0 ja <span class=\"lang:c highlight:0 decode:true crayon-inline\">Unload()<\/span><\/li>\n<li>Lahendus tuleb luua etteantud aluskoodi peale<\/li>\n<li>Lahendust luues j\u00e4rgi samm-sammult j\u00e4rgnevat juhendit. Loo funktsioonid vastavalt seal kirjeldatud n\u00f5uetele.<\/li>\n<\/ul>\n<h5><span class=\"ez-toc-section\" id=\"Samm-sammuline_juhend\"><\/span>Samm-sammuline juhend<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>NB! M\u00e4rka, et struktuuri deklareerides on loodud andmet\u00fc\u00fcbile kaks erinevat nime &#8211;\u00a0 <span class=\"lang:c highlight:0 decode:true crayon-inline\">struct Node<\/span>\u00a0 ja <span class=\"lang:c highlight:0 decode:true crayon-inline\">List<\/span> . M\u00f5lemad t\u00e4hendavad sama asja &#8211; st on aliased (nimekaimud) t\u00e4nu t\u00fc\u00fcbidefinitsioonile. Kasutuse poole pealt on funktsioonid koostatud sedasi, et <span class=\"lang:c highlight:0 decode:true crayon-inline\">struct Node<\/span>\u00a0 viitab \u00fchele elemendile, samal ajal kui <span class=\"lang:c highlight:0 decode:true crayon-inline\">List<\/span>\u00a0 viitab ahelloendile kui tervikule.<\/p>\n<hr \/>\n<pre class=\"toolbar:2 nums:false lang:c decode:true\">void PrintNode(List *pNode);<\/pre>\n<p>Esimene funktsioon, mis tuleb luua, on \u00fche ahelloendi elemendi k\u00f5igi liikmete v\u00e4ljastamiseks (st id, nimi ja viit j\u00e4rgnevale elemendile). Funktsiooni protot\u00fc\u00fcp on juba p\u00e4isefailis olemas. Sinul tuleb luua funktsiooni keha ja paigutada see koodifaili.<\/p>\n<p><span class=\"lang:c highlight:0 decode:true crayon-inline\">PrintNode()<\/span>\u00a0 funktsiooni peaksid kasutama iga kord, kui tuleb v\u00e4ljastada \u00fche elemendi sisu. Sedasi kui ahelloendis olevad liikmed peaksid muutuma, tuleb muudatus v\u00e4ljastuseks teha vaid \u00fches kohas. \u00dclesande l\u00f5pupoole on sul seda funktsiooni vaja ka nt otsingufunktsioonide tulemuste v\u00e4ljastamiseks.<\/p>\n<p>Kontrolli, et funktsiooni poleks edastatud NULL-viita. NULL-viida puhul v\u00e4ljasta veateade, kehtiva viida puhul v\u00e4ljasta elemendi sisu.<\/p>\n<p><strong>Kommenteeri sisse testimise esimene osa (stage 1) ja jooksuta oma programmi!<\/strong><\/p>\n<p>NB! Testjuhtudes on s\u00f5ned kirjutatud UTF-8 vormingus, mis t\u00f6\u00f6tab v\u00e4ga kenasti Linuxis, kuid v\u00f5ib tekitada veidi lahkhelisid Windowsi keskkonnas. Probleemide korral muuda s\u00f5nesid.<\/p>\n<div class=\"su-spoiler su-spoiler-style-fancy su-spoiler-icon-chevron su-spoiler-closed\" data-scroll-offset=\"0\" data-anchor-in-url=\"no\"><div class=\"su-spoiler-title\" tabindex=\"0\" role=\"button\"><span class=\"su-spoiler-icon\"><\/span>Kliki mind, et n\u00e4ha v\u00e4ljundit<\/div><div class=\"su-spoiler-content su-u-clearfix su-u-trim\">\n<pre class=\"theme:cisco-router toolbar:2 nums:false lang:c highlight:0 decode:true\">risto@risto-tux:~\/Nextcloud\/ttu\/prog2\/wk11_linked_list$ .\/ll_basecode\r\nID: 2\r\nName: Maamees Jaanes\r\npNext: (nil)\r\n\r\nError! Node not found!<\/pre>\n<\/div><\/div>\n<hr \/>\n<p><em>NB! See funktsioon on juba sinu eest valmis tehtud. <strong>P\u00f6\u00f6ra t\u00e4helepanu funktsioonis oleva ts\u00fckli \u00fclesehitusele! Sul on seda vaja ahelloendi l\u00e4bik\u00e4iguks\u00a0 j\u00e4rgnevate funktsioonide lahendamisel.<\/strong><\/em><\/p>\n<pre class=\"toolbar:2 nums:false lang:c decode:true\">void PrintList(List *pHead);<\/pre>\n<p>Selle funktsiooni eesm\u00e4rgiks on v\u00e4ljastada k\u00f5igi ahelloendis olevate elementide sisu. Funktsioonile <span class=\"lang:c highlight:0 decode:true crayon-inline\">PrintList()<\/span>\u00a0 edastatakse ahelloendi esimese liikme m\u00e4luaadress ning ts\u00fckli k\u00e4igus liigutakse l\u00e4bi ahelloendi kuni j\u00f5utakse ahelloendi l\u00f5ppu, mida t\u00e4histab <span class=\"lang:c highlight:0 decode:true crayon-inline \">NULL<\/span> -viit.<\/p>\n<p>Funktsioonile v\u00f5ib edastada ka \u00a0<span class=\"lang:c highlight:0 decode:true crayon-inline\">NULL<\/span> -viida. See juhtub tavaliselt siis, kui ahelloend, mida v\u00e4ljastatakse, osutub t\u00fchjaks.<\/p>\n<p>Funktsioon ise v\u00e4ljastust ei teosta, vaid kasutab selle jaoks eelmises etapis loodud\u00a0 <span class=\"lang:c highlight:0 decode:true crayon-inline\">PrintNode()<\/span>\u00a0 funktsiooni.<\/p>\n<p><strong>Kommenteeri sisse testimise teine osa (stage 2) ja jooksuta oma programmi!<\/strong><\/p>\n<div class=\"su-spoiler su-spoiler-style-fancy su-spoiler-icon-chevron su-spoiler-closed\" data-scroll-offset=\"0\" data-anchor-in-url=\"no\"><div class=\"su-spoiler-title\" tabindex=\"0\" role=\"button\"><span class=\"su-spoiler-icon\"><\/span>Kliki mind, et n\u00e4ha v\u00e4ljundit<\/div><div class=\"su-spoiler-content su-u-clearfix su-u-trim\">\n<pre class=\"theme:cisco-router toolbar:2 nums:false lang:c highlight:0 decode:true\">risto@risto-tux:~\/Nextcloud\/ttu\/prog2\/wk11_linked_list$ .\/ll_basecode\r\nID: 0\r\nName: Kivipallur J\u00fcrto Nii-Dommzonn\r\npNext: 0x7ffe9d745100\r\n\r\nID: 1\r\nName: Linnud T\u00f5nisted\r\npNext: 0x7ffe9d7450e0\r\n\r\nID: 2\r\nName: Maamees Jaanes\r\npNext: (nil)<\/pre>\n<\/div><\/div>\n<hr \/>\n<pre class=\"toolbar:2 nums:false lang:c decode:true\">struct node *CreateNode(char *name);<\/pre>\n<p>Seda funktsiooni kasutame uue elemendi loomiseks ja v\u00e4\u00e4rtustamiseks. Funktsioon tagastab vastloodud uue elemendi aadressi. V\u00e4\u00e4rtused elemendile antakse kaasa parameetritena.<\/p>\n<ol>\n<li>Loo ja anna m\u00e4lu uuele elemendile<\/li>\n<li>M\u00e4\u00e4ra \u00e4ra ID v\u00e4\u00e4rtus (j\u00e4rjestikuline suurenev t\u00e4isarv, kasuta\u00a0 <span class=\"lang:c highlight:0 decode:true crayon-inline \">static<\/span>\u00a0 m\u00e4rks\u00f5na)<\/li>\n<li>K\u00fcsi m\u00e4lu ja kopeeri struktuuri nimi<\/li>\n<li>V\u00e4\u00e4rtusta\u00a0 <span class=\"lang:c highlight:0 decode:true crayon-inline \">pNext<\/span>\u00a0 viit<\/li>\n<li>Tagasta struktuur<\/li>\n<\/ol>\n<p>NB! Siin funktsioonis on kahel korral vaja m\u00e4lu anda. M\u00f5lemat tagastust tuleb kontrollida! Vea korral tagasta NULL-viit! Programm peab vea korral j\u00e4tkama t\u00f6\u00f6tamist.<\/p>\n<p><strong>Kommenteeri sisse testimise kolmas osa (stage 3) ja jooksuta oma programmi! <\/strong>Ainukesed visuaalselt n\u00e4htavad erinevused on aadressiruumi muutus elementidel (l\u00e4ksime funktsioonide pinust kuhja). Valgrindiga k\u00e4ivitades n\u00e4ed m\u00e4lu k\u00fcsimiste arvu suurenemist!<\/p>\n<div class=\"su-spoiler su-spoiler-style-fancy su-spoiler-icon-chevron su-spoiler-closed\" data-scroll-offset=\"0\" data-anchor-in-url=\"no\"><div class=\"su-spoiler-title\" tabindex=\"0\" role=\"button\"><span class=\"su-spoiler-icon\"><\/span>Kliki mind, et n\u00e4ha v\u00e4ljundit<\/div><div class=\"su-spoiler-content su-u-clearfix su-u-trim\">\n<pre class=\"theme:cisco-router toolbar:2 nums:false lang:c highlight:0 decode:true\">risto@risto-tux:~\/Nextcloud\/ttu\/prog2\/wk11_linked_list$ .\/ll_basecode\r\nID: 0\r\nName: Kivipallur J\u00fcrto Nii-Dommzonn\r\npNext: 0x55b81e0f92f0\r\n\r\nID: 1\r\nName: Linnud T\u00f5nisted\r\npNext: 0x55b81e0f9330\r\n\r\nID: 2\r\nName: Maamees Jaanes\r\npNext: (nil)<\/pre>\n<\/div><\/div>\n<hr \/>\n<pre class=\"toolbar:2 nums:false lang:c decode:true\">void InsertNode(List **ppHead, struct Node *pNode);<\/pre>\n<p>Selle funktsiooni eesm\u00e4rgiks on lisada eelmise funktsiooni poolt loodud uus element\u00a0 <span class=\"lang:c highlight:0 decode:true crayon-inline\">pNode<\/span>\u00a0 ahelloendisse, millele viitab <span class=\"lang:c highlight:0 decode:true crayon-inline\">ppHead<\/span> . Topeltviit on vajalik, et lisada uus element ahelloendi algusesse.<\/p>\n<p>Baas\u00fclesandes lisame uue elemendi ahelloendi algusesse. Selleks on vaja ainult 2 omistuslauset kirjutada!<\/p>\n<p>NB! Enne lisamist kontrolli, et\u00a0 <span class=\"lang:c highlight:0 decode:true crayon-inline\">pNode<\/span>\u00a0 poleks <span class=\"lang:c highlight:0 decode:true crayon-inline \">NULL<\/span> -viit!<\/p>\n<p><strong>Kommenteeri sisse testimise neljas osa (stage 4) ja jooksuta oma programmi! <\/strong>Visuaalselt v\u00e4ljundis midagi ei muutu v\u00f5rreldes eelmise korraga.<\/p>\n<div class=\"su-spoiler su-spoiler-style-fancy su-spoiler-icon-chevron su-spoiler-closed\" data-scroll-offset=\"0\" data-anchor-in-url=\"no\"><div class=\"su-spoiler-title\" tabindex=\"0\" role=\"button\"><span class=\"su-spoiler-icon\"><\/span>Kliki mind, et n\u00e4ha v\u00e4ljundit<\/div><div class=\"su-spoiler-content su-u-clearfix su-u-trim\">\n<pre class=\"theme:cisco-router toolbar:2 nums:false lang:c highlight:0 decode:true\">risto@risto-tux:~\/Nextcloud\/ttu\/prog2\/wk11_linked_list$ .\/ll_basecode\r\nID: 0\r\nName: Kivipallur J\u00fcrto Nii-Dommzonn\r\npNext: 0x55b81e0f92f0\r\n\r\nID: 1\r\nName: Linnud T\u00f5nisted\r\npNext: 0x55b81e0f9330\r\n\r\nID: 2\r\nName: Maamees Jaanes\r\npNext: (nil)<\/pre>\n<\/div><\/div>\n<hr \/>\n<pre class=\"toolbar:2 nums:false lang:c decode:true\">void Unload(List *pHead);<\/pre>\n<p>Seda funktsiooni kutsutakse h\u00e4vitajaks (<em>destructor<\/em>), mille eesm\u00e4rk on andmestruktuur m\u00e4lust vabastada. Vabastamise k\u00e4igus vabastatakse ka struktuuri liikmed, mis on d\u00fcnaamiliselt loodud &#8211; meie puhul on selleks nimi.<\/p>\n<p>Ahelloendi vabastamiseks on vaja ts\u00fcklis k\u00e4ia l\u00e4bi kogu ahelloend.\u00a0 L\u00e4bik\u00e4igu ideega tutvu <span class=\"lang:c highlight:0 decode:true crayon-inline \">PrintList()<\/span>\u00a0 funktsioonis.<\/p>\n<p>Ahelloendi vabastamise juures on <strong>oluline<\/strong> p\u00f6\u00f6rata t\u00e4helepanu praeguse elemendi vabastamisele. Nimelt p\u00e4rast praeguse elemendi vabastamist ei ole meil enam ligip\u00e4\u00e4su selle <span class=\"lang:c highlight:0 decode:true crayon-inline \">pNext<\/span>\u00a0 viidale. Sellest tingitult on meil vaja vabastamiseks t\u00e4iendavat abiviita praegusele elemendile, mis teeb selle protseduuri natuke keerukamaks.<\/p>\n<p>Ts\u00fcklis on 3 olulist sammu. K\u00f5ige elegantsema ts\u00fckli saad kasutades <span class=\"lang:c highlight:0 decode:true crayon-inline \">while()<\/span>\u00a0 t\u00fc\u00fcpi ts\u00fcklit!<\/p>\n<ol>\n<li>Tee praguse elemendi aadressist koopia (koopiat kasutame vabastamiseks)<\/li>\n<li>Liigu j\u00e4rgmise elemendi juurde (<span class=\"lang:c highlight:0 decode:true crayon-inline \">pCurrent = pCurrent-&gt;pNext<\/span>\u00a0)<\/li>\n<li>Vabasta praegune element ja selle liikmed. Kasuta selleks koopiat, mille tegid esimesel sammul.<\/li>\n<\/ol>\n<p><strong>Kommenteeri sisse testimise viies osa (stage 5). \u00a0Jooksuta programmi kasutades valgrindi! <\/strong>Peaksid n\u00e4gema, et rakendus on 6 korda m\u00e4lu k\u00fcsinud ning vabastanud.<\/p>\n<div class=\"su-spoiler su-spoiler-style-fancy su-spoiler-icon-chevron su-spoiler-closed\" data-scroll-offset=\"0\" data-anchor-in-url=\"no\"><div class=\"su-spoiler-title\" tabindex=\"0\" role=\"button\"><span class=\"su-spoiler-icon\"><\/span>Kliki mind, et n\u00e4ha v\u00e4ljundit<\/div><div class=\"su-spoiler-content su-u-clearfix su-u-trim\">\n<pre class=\"theme:cisco-router toolbar:2 nums:false lang:c highlight:0 decode:true\">risto@risto-tux:~\/Nextcloud\/ttu\/prog2\/wk11_linked_list$ valgrind .\/ll_basecode\r\n==17208== Memcheck, a memory error detector\r\n==17208== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.\r\n==17208== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info\r\n==17208== Command: .\/ll_basecode\r\n==17208==\r\n==17208==\r\n==17208== HEAP SUMMARY:\r\n==17208==     in use at exit: 0 bytes in 0 blocks\r\n==17208==   total heap usage: 6 allocs, 6 frees, 135 bytes allocated\r\n==17208==\r\n==17208== All heap blocks were freed -- no leaks are possible\r\n==17208==\r\n==17208== For lists of detected and suppressed errors, rerun with: -s\r\n==17208== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)<\/pre>\n<\/div><\/div>\n<hr \/>\n<pre class=\"toolbar:2 nums:false lang:c decode:true\">struct Node *FindNodeByName(List *pHead, char *name);<\/pre>\n<pre class=\"toolbar:2 nums:false lang:c decode:true\">struct Node *FindNodeByID(List *pHead, int id);<\/pre>\n<p>Selles osas loome kaks otsingufunktsiooni, millest \u00fcks otsib nime ja teine ID v\u00e4\u00e4rtuse j\u00e4rgi. Kui otsing annab tulemuse (st ahelloendis on selline element), tagastatakse viit leitud elemendile. Kui elementi ahelloendis ei ole, tagastatakse NULL-viit.<\/p>\n<p>Kasuta\u00a0 <span class=\"lang:c highlight:0 decode:true crayon-inline \">PrintNode()<\/span>\u00a0 funktsiooni leitud elemendi v\u00e4ljastamiseks.<\/p>\n<p><strong>Kommenteeri sisse testimise kuues osa (stage 6) ja jooksuta oma programmi! <\/strong>M\u00e4rka, et n\u00e4idisv\u00e4ljundis on veateade v\u00e4ljastatud PrintNode() poolt ja ei ole seotud otsinguga!<\/p>\n<div class=\"su-spoiler su-spoiler-style-fancy su-spoiler-icon-chevron su-spoiler-closed\" data-scroll-offset=\"0\" data-anchor-in-url=\"no\"><div class=\"su-spoiler-title\" tabindex=\"0\" role=\"button\"><span class=\"su-spoiler-icon\"><\/span>Kliki mind, et n\u00e4ha v\u00e4ljundit<\/div><div class=\"su-spoiler-content su-u-clearfix su-u-trim\">\n<pre class=\"theme:cisco-router toolbar:2 nums:false lang:c highlight:0 decode:true\">risto@risto-tux:~\/Nextcloud\/ttu\/prog2\/wk11_linked_list$ .\/ll_basecode\r\nID: 1\r\nName: Linnud T\u00f5nisted\r\npNext: 0x5627e3069330\r\n\r\nError! Node not passed!\r\n\r\nID: 2\r\nName: Maamees Jaanes\r\npNext: (nil)\r\n\r\nError! Node not passed!<\/pre>\n<\/div><\/div>\n<hr \/>\n<p>Palju \u00f5nne! K\u00f5ik baasfunktsionaalsuseks vajaminevad funktsioonid on n\u00fc\u00fcd valmis! N\u00fc\u00fcd lisa abifunktsioonid ja koodilaused, et rakendus oleks kasutatav l\u00e4bi men\u00fc\u00fc. Testimiseks m\u00f5eldud koodi v\u00f5id soovi korral oma rakendusest kustutada.<\/p>\n<p>Lisada tuleks n\u00e4iteks nime k\u00fcsimine uue kirje loomisel v\u00f5i otsitava sisestused otsingufunktsioonide kasutamiseks ning vajadusel tagastuste t\u00f6\u00f6tlemiseks. <strong>Kui valmis, anna m\u00e4rku tunnit\u00f6\u00f6 esitamiseks!<\/strong><\/p>\n<h5><span class=\"ez-toc-section\" id=\"Testimine\"><\/span>Testimine<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Siin on n\u00e4ha t\u00e4ielikult valmis programmi v\u00e4ljund.<\/p>\n<div class=\"su-spoiler su-spoiler-style-fancy su-spoiler-icon-chevron su-spoiler-closed\" data-scroll-offset=\"0\" data-anchor-in-url=\"no\"><div class=\"su-spoiler-title\" tabindex=\"0\" role=\"button\"><span class=\"su-spoiler-icon\"><\/span>Kliki mind, et n\u00e4ha v\u00e4ljundit<\/div><div class=\"su-spoiler-content su-u-clearfix su-u-trim\">\n<pre class=\"theme:cisco-router toolbar:2 nums:false lang:c highlight:0 decode:true \">risto@risto-tux:~\/Nextcloud\/ttu\/prog2\/wk11_linked_list$ .\/ll_basecode\r\nde\r\n==17678== Memcheck, a memory error detector\r\n==17678== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.\r\n==17678== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info\r\n==17678== Command: .\/ll_basecode\r\n==17678==\r\n\r\nMake your selection. Press the corresponding number and the enter key\r\n1 - Print list\r\n2 - Insert a node\r\n3 - Find a node by ID\r\n4 - Find a node by name\r\n5 - Erase a node by ID\r\n6 - Erase a node by name\r\n0 - Exit\r\n&gt; 1\r\n\r\nList empty\r\n\r\nMake your selection. Press the corresponding number and the enter key\r\n1 - Print list\r\n2 - Insert a node\r\n3 - Find a node by ID\r\n4 - Find a node by name\r\n5 - Erase a node by ID\r\n6 - Erase a node by name\r\n0 - Exit\r\n&gt; 2\r\n\r\nEnter a name:\r\nKivipallur J\u00fcrto Nii-Dommzonn\r\n\r\nMake your selection. Press the corresponding number and the enter key\r\n1 - Print list\r\n2 - Insert a node\r\n3 - Find a node by ID\r\n4 - Find a node by name\r\n5 - Erase a node by ID\r\n6 - Erase a node by name\r\n0 - Exit\r\n&gt; 2\r\n\r\nEnter a name:\r\nLinnud T\u00f5nisted\r\n\r\nMake your selection. Press the corresponding number and the enter key\r\n1 - Print list\r\n2 - Insert a node\r\n3 - Find a node by ID\r\n4 - Find a node by name\r\n5 - Erase a node by ID\r\n6 - Erase a node by name\r\n0 - Exit\r\n&gt; 2\r\n\r\nEnter a name:\r\nMaamees Jaanes\r\n\r\nMake your selection. Press the corresponding number and the enter key\r\n1 - Print list\r\n2 - Insert a node\r\n3 - Find a node by ID\r\n4 - Find a node by name\r\n5 - Erase a node by ID\r\n6 - Erase a node by name\r\n0 - Exit\r\n&gt; 1\r\n\r\nID: 2\r\nName: Maamees Jaanes\r\npNext: 0x4a80980\r\n\r\nID: 1\r\nName: Linnud T\u00f5nisted\r\npNext: 0x4a808c0\r\n\r\nID: 0\r\nName: Kivipallur J\u00fcrto Nii-Dommzonn\r\npNext: (nil)\r\n\r\n\r\nMake your selection. Press the corresponding number and the enter key\r\n1 - Print list\r\n2 - Insert a node\r\n3 - Find a node by ID\r\n4 - Find a node by name\r\n5 - Erase a node by ID\r\n6 - Erase a node by name\r\n0 - Exit\r\n&gt; 3\r\n\r\nEnter ID:\r\n66\r\nEntered ID is not in the list!\r\n\r\n\r\nMake your selection. Press the corresponding number and the enter key\r\n1 - Print list\r\n2 - Insert a node\r\n3 - Find a node by ID\r\n4 - Find a node by name\r\n5 - Erase a node by ID\r\n6 - Erase a node by name\r\n0 - Exit\r\n&gt; 3\r\n\r\nEnter ID:\r\n0\r\nID: 0\r\nName: Kivipallur J\u00fcrto Nii-Dommzonn\r\npNext: (nil)\r\n\r\n\r\nMake your selection. Press the corresponding number and the enter key\r\n1 - Print list\r\n2 - Insert a node\r\n3 - Find a node by ID\r\n4 - Find a node by name\r\n5 - Erase a node by ID\r\n6 - Erase a node by name\r\n0 - Exit\r\n&gt; 4\r\n\r\nEnter a name:\r\nmi\u00e4u!\r\nEntered name is not in the list!\r\n\r\n\r\nMake your selection. Press the corresponding number and the enter key\r\n1 - Print list\r\n2 - Insert a node\r\n3 - Find a node by ID\r\n4 - Find a node by name\r\n5 - Erase a node by ID\r\n6 - Erase a node by name\r\n0 - Exit\r\n&gt; 4\r\n\r\nEnter a name:\r\nKivipallur J\u00fcrto Nii-Dommzonn\r\nID: 0\r\nName: Kivipallur J\u00fcrto Nii-Dommzonn\r\npNext: (nil)\r\n\r\n\r\nMake your selection. Press the corresponding number and the enter key\r\n1 - Print list\r\n2 - Insert a node\r\n3 - Find a node by ID\r\n4 - Find a node by name\r\n5 - Erase a node by ID\r\n6 - Erase a node by name\r\n0 - Exit\r\n&gt; 0\r\n\r\n==17678==\r\n==17678== HEAP SUMMARY:\r\n==17678==     in use at exit: 0 bytes in 0 blocks\r\n==17678==   total heap usage: 8 allocs, 8 frees, 2,183 bytes allocated\r\n==17678==\r\n==17678== All heap blocks were freed -- no leaks are possible\r\n==17678==\r\n==17678== For lists of detected and suppressed errors, rerun with: -s\r\n==17678== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)<\/pre>\n<\/div><\/div>\n<h4><span class=\"ez-toc-section\" id=\"Lisaulesanne_1_W12-2_Tahestikulises_jarjestikus_sorteeritud_ahelloend\"><\/span>Lisa\u00fclesanne 1 [W12-2]: T\u00e4hestikulises j\u00e4rjestikus sorteeritud ahelloend<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Selle \u00fclesandega muudame oma elementide lisamise funktsiooni selliseks, et ahelloend oleks alati sorteeritud t\u00e4hestikulises j\u00e4rjekorras<\/p>\n<h5><span class=\"ez-toc-section\" id=\"Nouded-2\"><\/span>N\u00f5uded<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<ul>\n<li>Uuenda <span class=\"lang:c highlight:0 decode:true crayon-inline\">InsertNode()<\/span>\u00a0 funktsiooni sedasi, et uus element paigutataks ahelloendis olevate elementide vahele sedasi, et ahelloend oleks t\u00e4hestikulises j\u00e4rjekorras\n<ul>\n<li>Selleks pead toetama elemendi lisamist ahelloendi algusesse, l\u00f5ppu v\u00f5i keskele<\/li>\n<\/ul>\n<\/li>\n<li>Uuenda\u00a0\u00a0<span class=\"lang:c highlight:0 decode:true crayon-inline\">FindNodeByName()<\/span>\u00a0 funktsiooni, et see l\u00f5ikaks kasu t\u00e4hestikulisest j\u00e4rjekorrast.<\/li>\n<li>Kui oled varasemalt lahendanud esimese lisa\u00fclesande, siis uuenda ka eemaldamise funktsiooni, et ka see l\u00f5ikaks kasu t\u00e4hestikulisest j\u00e4rjekorrast.<\/li>\n<\/ul>\n<h5><span class=\"ez-toc-section\" id=\"Markused\"><\/span>M\u00e4rkused<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<ul>\n<li>Vastavalt ahelloendi asukohale, kuhu element lisatakse, tuleb viitasid k\u00e4idelda erinevalt.<\/li>\n<li>Veendu asukohas enne lisamise alustamist!<\/li>\n<\/ul>\n<h4><span class=\"ez-toc-section\" id=\"Lisaulesanne_2_W12-3_Elementide_eemaldamine\"><\/span>Lisa\u00fclesanne 2 [W12-3]: Elementide eemaldamine<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Loo kaks funktsiooni elementide eemaldamiseks ahelloendist vastavalt nime v\u00f5i ID alusel.<\/p>\n<h5><span class=\"ez-toc-section\" id=\"Nouded-3\"><\/span>N\u00f5uded<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<ul>\n<li>Realiseeri\u00a0 <span class=\"lang:c highlight:0 decode:true crayon-inline\">RemoveNodeByName()<\/span>\u00a0 funktsioon, mis eemaldab elemendi nimelise vaste korral.<\/li>\n<li>Realiseeri <span class=\"lang:c highlight:0 decode:true crayon-inline\">RemoveNodeByID()<\/span>\u00a0 funktsioon, mis eemaldab elemendi ID vaste korra.<\/li>\n<li>V\u00f5imalusel kasuta \u00e4ra omadust, et ahelloend on juba sorteeritud t\u00e4hestikulises j\u00e4rjekorras (lisa\u00fclesanne 1)<\/li>\n<li>Veendu ahelloendi terviklikkuses p\u00e4rast elemendi eemaldamist. Testi ahelloendi keskelt, algusest ja l\u00f5pust!<\/li>\n<\/ul>\n<h5><span class=\"ez-toc-section\" id=\"Markused-2\"><\/span>M\u00e4rkused<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<ul>\n<li>Esmalt leia, kas element, mida peaksid eemaldama, \u00fcldsegi eksisteerib<\/li>\n<li>Eemaldamisel \u00fchesuunalisest ahelloendist on sul vaja meeles pidada eelmise elemendi asukohta! Seet\u00f5ttu ei saa sa korduvkasutada\u00a0 <span class=\"lang:c highlight:0 decode:true crayon-inline \">FindNodeBy()<\/span>\u00a0 funktsioone! (<em>Saaksid, kui see oleks kahesuunaline ahelloend).<\/em><\/li>\n<li>Algusest, keskelt ja l\u00f5pust eemaldamine on erinev! Kontrolli positsiooni enne eemaldamise alustamist, seej\u00e4rel vali sobilik eemaldamise meetod.<\/li>\n<li>\u00c4ra unusta m\u00e4lu vabastada!<\/li>\n<li>Topeltviit on vajalik loendi algusest eemaldamiseks.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Parast_seda_tundi_peaksid\"><\/span>P\u00e4rast seda tundi peaksid<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>Teadma \u00fche- ja kahesuunalise ahelloendi omadusi<\/li>\n<li>Teadma, kuidas t\u00e4histatakse ahelloendi l\u00f5ppu<\/li>\n<li>M\u00f5istma ahelloendite eeliseid ja puuduj\u00e4\u00e4ke<\/li>\n<li>Teadma erinevate operatsioonide keerukust ahelloendil ning erinevusi keerukusel massiiviga v\u00f5rreldes<\/li>\n<li>Oskama ahelloendit luua, l\u00e4bi k\u00e4ia ning vabastada<\/li>\n<li>Oskama ahelloendisse elemente lisada algusse, l\u00f5ppu ning vahepeale<\/li>\n<li>Teadma, kuidas t\u00f6\u00f6tavad funktsioonides <span class=\"lang:c highlight:0 decode:true crayon-inline \">static<\/span>\u00a0 m\u00e4rks\u00f5naga deklareeritud muutujad ning millises m\u00e4lualas need paiknevad<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Taiendav_materjal\"><\/span>T\u00e4iendav materjal<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>What is a Linked list? Types of Linked List with Code Examples<br \/>\n<strong><a href=\"https:\/\/www.freecodecamp.org\/news\/what-is-a-linked-list-types-and-examples\/\">https:\/\/www.freecodecamp.org\/news\/what-is-a-linked-list-types-and-examples\/<\/a><\/strong><\/li>\n<li>Insertion in Linked List<br \/>\n<strong><a href=\"https:\/\/www.geeksforgeeks.org\/insertion-in-linked-list\/\">https:\/\/www.geeksforgeeks.org\/insertion-in-linked-list\/<\/a><\/strong><\/li>\n<li>Wikipedia: Linked list<br \/>\n<a href=\"https:\/\/en.wikipedia.org\/wiki\/Linked_list\"><strong>https:\/\/en.wikipedia.org\/wiki\/Linked_list<\/strong><\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Praktikumi materjal Slaidid: Ahelloendid Praktikumi \u00fclesanded Selle praktikumi baas\u00fclesande k\u00e4igus \u00f5pid looma ahelloendeid. Lisa\u00fclesande k\u00e4igus laiendad loendi funktsionaalsust sedasi, et loend oleks alati sorteeritud olekus ning v\u00f5imaldad ahelloendist elemente eemaldada. \u00dclesanne [W12-1]: Ahelloend Baas\u00fclesandes tuleb sul luua rakendus, mis koostab ahelloendi, v\u00f5imaldab ahelloendi l\u00e4bik\u00e4iku ning l\u00f5pus vabastab ahelloendi m\u00e4lust. Lae alla aluskood: https:\/\/blue.pri.ee\/ttu\/files\/iax0584\/aluskoodid\/12_ll_basecode.zip N\u00f5uded Loo &hellip; <a href=\"https:\/\/blue.pri.ee\/ttu\/laborid\/pr2et12-ahelloend\/\" class=\"more-link\">Loe edasi <span class=\"screen-reader-text\">PR2ET12: Ahelloend<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[97,176],"tags":[],"class_list":["post-8482","post","type-post","status-publish","format-standard","hentry","category-laborid","category-pr2-et"],"_links":{"self":[{"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/posts\/8482","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/comments?post=8482"}],"version-history":[{"count":18,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/posts\/8482\/revisions"}],"predecessor-version":[{"id":11405,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/posts\/8482\/revisions\/11405"}],"wp:attachment":[{"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/media?parent=8482"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/categories?post=8482"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blue.pri.ee\/ttu\/wp-json\/wp\/v2\/tags?post=8482"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}