1 00:00:00,000 --> 00:00:02,832 >> [Muusika mängib] 2 00:00:02,832 --> 00:00:05,670 3 00:00:05,670 --> 00:00:08,560 >> DOUG LLOYD: OK, nii et siinkohal muidugi 4 00:00:08,560 --> 00:00:15,300 oleme kaetud palju põhitõdesid C. Me teame palju muutujaid, massiivid, 5 00:00:15,300 --> 00:00:17,610 suunanäitajaks, kõik, mis hea kraam. 6 00:00:17,610 --> 00:00:21,610 Need on kõik omamoodi ehitatud et näha, kui alused, 7 00:00:21,610 --> 00:00:23,880 kuid me saame teha rohkem, eks? 8 00:00:23,880 --> 00:00:27,930 Me võime kombineerida asju koos huvitavaid võimalusi. 9 00:00:27,930 --> 00:00:31,010 >> Ja teeme siis, et alustame Tegevust, mida C annab meile 10 00:00:31,010 --> 00:00:35,270 ja alustada luua oma andmed struktuure kasutades neid hoone 11 00:00:35,270 --> 00:00:40,590 plokid koos midagi teha tõesti väärtuslik, kasulik. 12 00:00:40,590 --> 00:00:43,420 Üks viis, kuidas me saame seda teha on rääkida kogudest. 13 00:00:43,420 --> 00:00:48,360 Nii seni oleme olnud ühte liiki andmeid struktuuri esindavad kogud 14 00:00:48,360 --> 00:00:51,030 sarnaste väärtuste, sarnased väärtused. 15 00:00:51,030 --> 00:00:52,350 See oleks massiivi. 16 00:00:52,350 --> 00:00:57,020 Meil on kogud täisarvud, või kogude tegelased ja nii edasi. 17 00:00:57,020 --> 00:01:00,890 >> Struktuurid on ka omamoodi andmeid struktuur teabe kogumiseks, 18 00:01:00,890 --> 00:01:03,220 kuid see ei ole kogumiseks nagu väärtusi. 19 00:01:03,220 --> 00:01:08,090 Tavaliselt segab erinevat tüüpi andmeid koos sees ühe kasti. 20 00:01:08,090 --> 00:01:10,750 Aga see ei ole iseenesest kasutatakse kett koos 21 00:01:10,750 --> 00:01:16,920 või omavahel ühendada sarnase esemed, nagu massiivi. 22 00:01:16,920 --> 00:01:20,960 Massiivid on suur element otsida, kuid tagasikutsumise 23 00:01:20,960 --> 00:01:24,262 et see on väga raske lisada massiivi, 24 00:01:24,262 --> 00:01:26,470 kui me oleme sisestamist juures päris lõpus, et massiivi. 25 00:01:26,470 --> 00:01:29,730 >> Ja parim näide mul eest, mis on sisestamise omamoodi. 26 00:01:29,730 --> 00:01:31,650 Kui te mäletate meie video paigutamist omamoodi, 27 00:01:31,650 --> 00:01:34,110 seal oli palju kulul kaasatud võttes 28 00:01:34,110 --> 00:01:37,970 kiirenemist elemente ja suunata neid välja viis sobitada midagi 29 00:01:37,970 --> 00:01:41,290 keskele oma valikut. 30 00:01:41,290 --> 00:01:44,690 Massiivid kannatavad ka teise probleem, mis on jäikus. 31 00:01:44,690 --> 00:01:47,150 Kui me kinnitame massiivi, saame ühe tulistas ta. 32 00:01:47,150 --> 00:01:49,790 Me saame öelda, ma tahan Selle elemente. 33 00:01:49,790 --> 00:01:51,940 Võib olla 100, see võib olla 1000, see võib 34 00:01:51,940 --> 00:01:55,930 olla x, kus x on number, et kasutaja andis meile kiire või käsk 35 00:01:55,930 --> 00:01:56,630 line. 36 00:01:56,630 --> 00:01:59,905 >> Aga me ainult saada üks lask, siis me ei saada, siis ütle oh, tegelikult ma 37 00:01:59,905 --> 00:02:04,360 vaja 101 või ma vajasin x pluss 20. 38 00:02:04,360 --> 00:02:07,910 Liiga hilja, me oleme juba tunnistanud massiiv, ja kui me tahame saada 101 või x 39 00:02:07,910 --> 00:02:12,050 pluss 20, meil on kuulutada täiesti erinevat valikut, 40 00:02:12,050 --> 00:02:15,540 kopeerige kõik elemendid massiivi üle, ja siis on meil piisavalt. 41 00:02:15,540 --> 00:02:19,880 Ja mis siis, kui oleme eksinud jälle, mida kui me tegelikult vajame 102 või x pluss 40, 42 00:02:19,880 --> 00:02:21,970 Me ei pea seda tegema jälle. 43 00:02:21,970 --> 00:02:26,250 Nii nad väga paindumatuks saneerimist meie andmeid 44 00:02:26,250 --> 00:02:29,360 aga kui me ühendame koos mõnede põhitõed, et me oleme juba 45 00:02:29,360 --> 00:02:33,230 õppinud viiteid ja struktuure, eriti kasutades dünaamilise mälu 46 00:02:33,230 --> 00:02:36,180 jaotamine malloc, me panna need tükid kokku 47 00:02:36,180 --> 00:02:40,960 luua uusi andmeid structure-- üksikult ahelloendid võiksime say-- 48 00:02:40,960 --> 00:02:45,400 mis võimaldab meil kasvada ja kahaneb kogumise väärtused 49 00:02:45,400 --> 00:02:48,800 ja me ei pea mingeid raisatud ruumi. 50 00:02:48,800 --> 00:02:53,320 >> Nii jälle, me nimetame seda ideed, Sellel põhimõttel ahelloend. 51 00:02:53,320 --> 00:02:56,320 Eelkõige selle video me oleme räägime üksikult seotud nimekirja, 52 00:02:56,320 --> 00:02:59,185 ja siis teine ​​video räägime umbes kahekordselt ahelloendid, mis 53 00:02:59,185 --> 00:03:01,560 on lihtsalt variatsioon teema siin. 54 00:03:01,560 --> 00:03:05,200 Aga üksi seotud nimekirja koosneb sõlmed, 55 00:03:05,200 --> 00:03:08,559 sõlmed lihtsalt on abstraktne term-- see on lihtsalt midagi Ma helistan 56 00:03:08,559 --> 00:03:10,350 see on mingi struktuuri, põhimõtteliselt ma olen? 57 00:03:10,350 --> 00:03:16,190 Just kavatse seda nimetada node-- ja selle sõlm on kaks liiget, või kahes valdkonnas. 58 00:03:16,190 --> 00:03:20,300 See on andmeid, tavaliselt täisarv, iseloomu float, 59 00:03:20,300 --> 00:03:23,790 või võib olla mõne muu andmetüübi et olete määratletud tüüpi def. 60 00:03:23,790 --> 00:03:29,290 Ja see sisaldab viit Järgmises sõlme sama tüüpi. 61 00:03:29,290 --> 00:03:34,710 >> Nii et meil on kaks asja sees Selle sõlme, andmete ja osuti 62 00:03:34,710 --> 00:03:36,380 teise sõlme. 63 00:03:36,380 --> 00:03:39,370 Ja kui te hakkate visualiseerida see, mida sa ei mõtle selle peale 64 00:03:39,370 --> 00:03:42,280 nagu kett sõlmed, mis on omavahel ühendatud. 65 00:03:42,280 --> 00:03:45,070 Meil on esimese sõlme, see sisaldab andmeid, ja osuti 66 00:03:45,070 --> 00:03:49,110 Teise sõlme, mis sisaldab andmed ja viit kolmanda sõlme. 67 00:03:49,110 --> 00:03:52,940 Ja nii see on, miks me nimetame seda seotud nimekirja, nad on omavahel ühendatud. 68 00:03:52,940 --> 00:03:56,070 >> Mida see eriline sõlme struktuur välja näeb? 69 00:03:56,070 --> 00:04:01,120 Noh, kui te mäletate meie video määratleda oma tüüpe, tüüpi def, 70 00:04:01,120 --> 00:04:05,400 saame määratleda structure-- ja kirjuta määratleda struktuuri niimoodi. 71 00:04:05,400 --> 00:04:11,240 tyepdef struct sllist, ja siis ma olen kasutades sõna väärtus siin meelevaldselt 72 00:04:11,240 --> 00:04:13,891 kuhu märgitakse andmete tüübi tõesti. 73 00:04:13,891 --> 00:04:16,890 Sa võid edasi täisarv või float, sa oleks võinud mida iganes sa tahad. 74 00:04:16,890 --> 00:04:19,389 See ei piirdu ainult täisarvud, või midagi sellist. 75 00:04:19,389 --> 00:04:22,790 Nii väärtus on lihtsalt suvaline andmete tüüp ja osuti 76 00:04:22,790 --> 00:04:26,310 teise sõlme sama tüüpi. 77 00:04:26,310 --> 00:04:29,690 >> Nüüd, seal on vähe saaki siin määratlemisel struktuur 78 00:04:29,690 --> 00:04:33,030 kui see on ise referentsiaalse struktuuri. 79 00:04:33,030 --> 00:04:35,340 Ma pean ajutise nimi minu struktuur. 80 00:04:35,340 --> 00:04:37,640 Lõpus päeval, kui ma selgelt tahad seda kutsuda 81 00:04:37,640 --> 00:04:43,030 sll sõlme, mis on lõppkokkuvõttes uus nimi osa minu tüübi definitsioon, 82 00:04:43,030 --> 00:04:47,450 aga ma ei saa kasutada sll sõlme keset seda. 83 00:04:47,450 --> 00:04:51,430 Põhjus on selles, ma ei ole loodud tüüp nimega sll sõlme 84 00:04:51,430 --> 00:04:55,200 kuni ma tabanud seda viimast punkti siin. 85 00:04:55,200 --> 00:04:59,720 Kuni selle punkti, ma pean olema Teine võimalus viidata andmete tüübist. 86 00:04:59,720 --> 00:05:02,440 >> Ja see on ise võrdlusandmete tüübist. 87 00:05:02,440 --> 00:05:06,314 See S andmebaasi tüübi kohta struktuur, mis sisaldab andmeid, 88 00:05:06,314 --> 00:05:08,480 ja osuti teise struktuur sama tüüpi. 89 00:05:08,480 --> 00:05:11,750 Nii et ma pean olema võimalik viidata ka See andmetüüp vähemalt ajutiselt, 90 00:05:11,750 --> 00:05:14,910 nii annab see ajutine nimi struct sllist 91 00:05:14,910 --> 00:05:18,540 võimaldab mul siis öelda, et ma tahan kursor teise struct sllist, 92 00:05:18,540 --> 00:05:24,690 struct sllist star, ja seejärel kui olen lõpetanud määratlus, 93 00:05:24,690 --> 00:05:27,220 Ma võin nüüd nimetame seda AN sll sõlme. 94 00:05:27,220 --> 00:05:30,520 >> Nii et miks sa näed seal Ajutise nimi siin 95 00:05:30,520 --> 00:05:31,879 kuid püsiva nimi. 96 00:05:31,879 --> 00:05:33,920 Mõnikord võib näha mõisted struktuuriga, 97 00:05:33,920 --> 00:05:36,570 näiteks, et ei ole ise referentsiaalse, et 98 00:05:36,570 --> 00:05:39,390 ei ole specifier nimi. 99 00:05:39,390 --> 00:05:43,040 See oleks lihtsalt öelda typedef struct, avada lokkis traksidega ja seejärel määratleda. 100 00:05:43,040 --> 00:05:45,620 Aga kui sa oled struct on ise referentsiaalse, nagu see on, 101 00:05:45,620 --> 00:05:49,010 peate määrama Ajutise tüübi nimi. 102 00:05:49,010 --> 00:05:51,310 Aga lõpuks, nüüd et me oleme seda teinud, 103 00:05:51,310 --> 00:05:53,620 saame lihtsalt viidata need sõlmed need üksused, 104 00:05:53,620 --> 00:05:57,900 kui sll sõlmede eesmärkidel ülejäänud seda videot. 105 00:05:57,900 --> 00:06:00,900 >> Kõik õige, et me teame, kuidas luua ahelloend sõlme. 106 00:06:00,900 --> 00:06:03,240 Me teame, kuidas määratleda ahelloend sõlme. 107 00:06:03,240 --> 00:06:06,670 Nüüd, kui me ei kavatse hakata kasutades neid koguda teavet, 108 00:06:06,670 --> 00:06:10,360 seal on paar toimingud oleme on vaja mõista ja töötada. 109 00:06:10,360 --> 00:06:12,860 Me peame teadma, kuidas luua ahelloend välja õhuke õhk. 110 00:06:12,860 --> 00:06:14,901 Kui seal ei ole nimekirjas juba, tahame alustada üks. 111 00:06:14,901 --> 00:06:16,960 Nii et me peame olema võimelised luua ahelloend, 112 00:06:16,960 --> 00:06:19,130 peame ilmselt otsida lingi kaudu nimekirja 113 00:06:19,130 --> 00:06:21,830 leida element ootame. 114 00:06:21,830 --> 00:06:24,430 Me peame suutma sisestada uued asjad nimekirja, 115 00:06:24,430 --> 00:06:25,930 Me tahame, et meie nimekiri saaks kasvada. 116 00:06:25,930 --> 00:06:28,638 Ja täpselt samamoodi, me tahame, et oleks võimalik kustutada asjad meie nimekirjas, 117 00:06:28,638 --> 00:06:30,250 Me tahame, et meie nimekiri saaks kahaneb. 118 00:06:30,250 --> 00:06:32,160 Ja lõpus meie programme, eriti 119 00:06:32,160 --> 00:06:34,550 Kui te mäletate, et me oleme dünaamiliselt eraldada mälu 120 00:06:34,550 --> 00:06:38,337 ehitada need nimekirjad tavaliselt, Me tahame, et vabastada kõik selle mälu 121 00:06:38,337 --> 00:06:39,670 kui me teinud koostööd selle. 122 00:06:39,670 --> 00:06:44,627 Ja seega peame suutma kustutada Kogu seotud nimekirja ühes suuda sööstma. 123 00:06:44,627 --> 00:06:46,460 Nii lähme läbi mõned nendest toimingutest 124 00:06:46,460 --> 00:06:51,192 ja kuidas me võiksime visualiseerida neid, räägib pseudokoodi koodi konkreetselt. 125 00:06:51,192 --> 00:06:53,150 Nii et me tahame luua seotud nimekirja, et äkki me 126 00:06:53,150 --> 00:06:56,480 soovite määratleda funktsiooni Selle prototüüp. 127 00:06:56,480 --> 00:07:01,690 sll sõlme star, luua, ja ma möödaminnes ühes argument, mõned suvalise andmeid 128 00:07:01,690 --> 00:07:05,530 kirjuta uuesti mõne suvalise andmete tüübi. 129 00:07:05,530 --> 00:07:10,482 Aga ma returning-- see funktsioon peaks tagasi mulle pointer, et ühekaupa 130 00:07:10,482 --> 00:07:11,190 ahelloendid sõlme. 131 00:07:11,190 --> 00:07:14,050 Jällegi, me üritame luua ahelloend välja õhuke õhk, 132 00:07:14,050 --> 00:07:17,900 nii et ma vaja viit seda nimekirja, kui ma olen teinud. 133 00:07:17,900 --> 00:07:19,420 >> Millised on etappe siin? 134 00:07:19,420 --> 00:07:20,960 Noh, esimene asi, mida ma olen lähen tegema, on dünaamiliselt 135 00:07:20,960 --> 00:07:22,550 eraldada ruumi uue sõlme. 136 00:07:22,550 --> 00:07:26,689 Jällegi, me luua see välja õhuke õhku, nii et me peame malloc ruumi on. 137 00:07:26,689 --> 00:07:28,480 Ja muidugi kohe pärast me malloc, 138 00:07:28,480 --> 00:07:31,692 me alati veenduge, et meie pointer-- me ei saanud tagasi null. 139 00:07:31,692 --> 00:07:33,650 Sest kui me püüame lugupidamisavaldus nullviida, 140 00:07:33,650 --> 00:07:36,190 me ei kavatse kannatada segfault ja me ei taha seda. 141 00:07:36,190 --> 00:07:39,510 >> Siis me tahame täita väljad, tahame initsialiseerida väärtuse väljal 142 00:07:39,510 --> 00:07:41,690 ja initsialiseerida järgmisele väljale. 143 00:07:41,690 --> 00:07:45,450 Ja siis me tahame mina-- lõpuks, kui funktsiooni prototüüp indicates-- tahame 144 00:07:45,450 --> 00:07:49,940 tagasi osuti kaasa sll sõlme. 145 00:07:49,940 --> 00:07:51,710 Mida teha seda nägema visuaalselt? 146 00:07:51,710 --> 00:07:55,230 Noh, esiteks me ei kavatse dünaamiliselt eraldada ruumi uuele SLL sõlme, 147 00:07:55,230 --> 00:07:58,320 nii et me malloc-- see on piltlikuks 148 00:07:58,320 --> 00:08:00,020 sõlme me lihtsalt loodud. 149 00:08:00,020 --> 00:08:02,757 Ja me veenduge see ei ole null-- sel juhul, 150 00:08:02,757 --> 00:08:04,840 pilt ei oleks näidanud üles, kui ta oli null, 151 00:08:04,840 --> 00:08:07,298 oleksime otsa mälu nii et me oleme hea sinna minna. 152 00:08:07,298 --> 00:08:10,200 Nüüd oleme sammuga C, initsialiseerida sõlmede väärtus valdkonnas. 153 00:08:10,200 --> 00:08:12,280 Noh, mis põhineb selle funktsiooni helistada ma kasutan siin 154 00:08:12,280 --> 00:08:16,700 Tundub, tahan sündis 6, Nii et ma 6 väärtuse valdkonnas. 155 00:08:16,700 --> 00:08:18,865 Nüüd, initsialiseerida järgmisele väljale. 156 00:08:18,865 --> 00:08:21,640 Noh, mida ma kavatsen teha seal, miski kõrval, paremal, 157 00:08:21,640 --> 00:08:23,600 see on ainus asi, mida nimekirjas. 158 00:08:23,600 --> 00:08:27,206 Mis siis järgmine asi nimekirjas? 159 00:08:27,206 --> 00:08:29,660 >> See ei tohiks näidata millelegi, eks. 160 00:08:29,660 --> 00:08:33,600 Seal on midagi olemas, nii et mis on mõiste, mida me teame, et on nothing-- 161 00:08:33,600 --> 00:08:35,638 viiteid midagi? 162 00:08:35,638 --> 00:08:37,929 See peaks olema äkki me tahame panna nullviida seal, 163 00:08:37,929 --> 00:08:40,178 ja ma esindavad null pointer kui lihtsalt punane kast 164 00:08:40,178 --> 00:08:41,559 Me ei saa minna kaugemale. 165 00:08:41,559 --> 00:08:44,430 Nagu me näeme veidi hiljem, meil lõpuks ketid 166 00:08:44,430 --> 00:08:46,330 nooli ühendamiseks need sõlmed kokku 167 00:08:46,330 --> 00:08:48,480 aga kui vajutad punane kast, mis on null, 168 00:08:48,480 --> 00:08:51,150 Me ei saa minna kaugemale, see on loendi lõppu. 169 00:08:51,150 --> 00:08:53,960 >> Ja lõpuks, me lihtsalt tahame tagasi kursor selle sõlme. 170 00:08:53,960 --> 00:08:56,160 Nii me nimetame seda uut, ja naaseb uue 171 00:08:56,160 --> 00:08:59,370 seega saab kasutada mis iganes funktsiooni loonud. 172 00:08:59,370 --> 00:09:03,100 Nii et me läheme, oleme loonud üksikult ahelloendid sõlme välja õhuke õhk, 173 00:09:03,100 --> 00:09:05,920 ja nüüd on meil nimekirjas saame töötada. 174 00:09:05,920 --> 00:09:08,260 >> Nüüd oletame, et me juba on suur kett, 175 00:09:08,260 --> 00:09:09,800 ja me tahame, et leida midagi ta. 176 00:09:09,800 --> 00:09:12,716 Ja me tahame funktsioon, mis läheb tagasi õige või vale, sõltuvalt 177 00:09:12,716 --> 00:09:15,840 kas väärtus on olemas, et nimekirja. 178 00:09:15,840 --> 00:09:18,160 Funktsioon prototüübi või deklaratsiooni, et funktsiooni, 179 00:09:18,160 --> 00:09:23,320 tunduda see-- bool leida, ja siis tahame sündis kaks argumenti. 180 00:09:23,320 --> 00:09:26,996 >> Esimene on kursor Esimene osa seotud nimekirja. 181 00:09:26,996 --> 00:09:29,620 See on tegelikult midagi, mida sa tahavad alati jälgida, 182 00:09:29,620 --> 00:09:33,110 ja tegelikult võiks olla midagi, mis sa isegi kasutusele globaalse muutuja. 183 00:09:33,110 --> 00:09:35,360 Kui olete loonud nimekirja, sa alati, alati 184 00:09:35,360 --> 00:09:38,990 soovite jälgida väga Esimene osa nimekirja. 185 00:09:38,990 --> 00:09:43,690 Nii võid pöörduda kõigi teiste elemendid, mida just pärast kett, 186 00:09:43,690 --> 00:09:47,300 ilma, et hoida viiteid tervena iga element. 187 00:09:47,300 --> 00:09:50,920 Teil on vaja ainult jälgida esimene üks, kui nad kõik aheldatud koos. 188 00:09:50,920 --> 00:09:52,460 >> Ja siis teine ​​asi me möödaminnes jälle 189 00:09:52,460 --> 00:09:54,376 on meelevaldselt some-- sõltumata andmete tüübi me oleme 190 00:09:54,376 --> 00:09:59,640 otsin seal on sees loodetavasti üks tippe nimekirja. 191 00:09:59,640 --> 00:10:00,980 Millised on sammud? 192 00:10:00,980 --> 00:10:04,250 Noh, esimene asi, mida me teeme on loome läbivaid pointer 193 00:10:04,250 --> 00:10:06,015 osutades nimekirjad pea. 194 00:10:06,015 --> 00:10:08,890 Noh, miks me seda teeme, oleme juba on osuti nimekirjad pea, 195 00:10:08,890 --> 00:10:10,974 miks me lihtsalt ei liigu, et ühe ringi? 196 00:10:10,974 --> 00:10:13,140 Noh, nagu ma ütlesin, see on tõesti meie jaoks oluline 197 00:10:13,140 --> 00:10:17,580 alati hoida silma peal Kõige esimene element nimekirjas. 198 00:10:17,580 --> 00:10:21,270 Ja nii see on tegelikult parem luua duplikaadi, et 199 00:10:21,270 --> 00:10:25,350 ja kasutada, et liikuda, et me kunagi kogemata minema, või me alati 200 00:10:25,350 --> 00:10:30,430 on osuti mingil hetkel, et on paremale esimese osa nimekirja. 201 00:10:30,430 --> 00:10:33,290 Nii et see on parem luua teine, et me kasutame liikuda. 202 00:10:33,290 --> 00:10:35,877 >> Siis me lihtsalt võrrelda, kas väärtus põllul, et sõlm 203 00:10:35,877 --> 00:10:38,960 on see, mida me otsime, ja kui see on ei, me lihtsalt liikuda järgmisele sõlme. 204 00:10:38,960 --> 00:10:41,040 Ja me peame seda tehes Üle ja üle ja üle, 205 00:10:41,040 --> 00:10:44,811 kuni me kas leida element või me tabanud 206 00:10:44,811 --> 00:10:47,310 null-- oleme jõudnud nimekirja ja seda seal ei ole. 207 00:10:47,310 --> 00:10:50,540 See peaks loodetavasti häirekella teile lihtsalt lineaarne otsing, 208 00:10:50,540 --> 00:10:54,430 me lihtsalt imitatsiooniga seda ühekaupa seotud nimekirja struktuur 209 00:10:54,430 --> 00:10:56,280 selle asemel massiivi seda teha. 210 00:10:56,280 --> 00:10:58,210 >> Nii et siin on näide ühekaupa seotud nimekirja. 211 00:10:58,210 --> 00:11:00,043 See üks koosneb viis tippu, ja meil on 212 00:11:00,043 --> 00:11:04,330 kursor juht nimekiri, mida nimetatakse nimekirja. 213 00:11:04,330 --> 00:11:07,385 Esimene asi, mida me tahame teha, on uuesti luua, et läbipääsusüsteemid pointer. 214 00:11:07,385 --> 00:11:09,760 Nii et meil on nüüd kaks viiteid Sel hetkel, et sama asi. 215 00:11:09,760 --> 00:11:15,025 >> Nüüd märgata ka siin, ma ei pea malloc tahes ruumi matk. 216 00:11:15,025 --> 00:11:18,970 Ma ei öelnud trav võrdub malloc midagi, mis sõlme juba olemas, 217 00:11:18,970 --> 00:11:21,160 et ruumi mälu on juba olemas. 218 00:11:21,160 --> 00:11:24,290 Nii ma olen tegelikult seda on luua uus kursor ta. 219 00:11:24,290 --> 00:11:28,210 Ma ei mallocing veel ruumi, lihtsalt nüüd kaks viiteid 220 00:11:28,210 --> 00:11:31,370 osutades sama asi. 221 00:11:31,370 --> 00:11:33,710 >> Nii on 2, mida ma otsin? 222 00:11:33,710 --> 00:11:37,220 Noh, ei, nii et selle asemel ma olen kavatse minna järgmise üks. 223 00:11:37,220 --> 00:11:41,740 Nii et põhimõtteliselt ma ütleksin, trav võrdub trav kõrval. 224 00:11:41,740 --> 00:11:43,630 Kas 3, mida ma otsin, ei. 225 00:11:43,630 --> 00:11:45,780 Nii et ma jätkuvalt minna läbi, kuni lõpuks 226 00:11:45,780 --> 00:11:48,690 saada 6, mis on see, mida ma otsin jaoks põhineb funktsioon kõne 227 00:11:48,690 --> 00:11:51,600 Mul on tipus seal, ja nii ma olen teinud. 228 00:11:51,600 --> 00:11:54,150 >> Nüüd, aga kui element ma olen otsin ei ole nimekirjas, 229 00:11:54,150 --> 00:11:55,510 on see ikka läheb tööle? 230 00:11:55,510 --> 00:11:57,120 Noh, märkate, et nimekiri siin on delikaatselt erinevad, 231 00:11:57,120 --> 00:11:59,410 ja see on veel üks asi, mis on tähtis ahelloendid, 232 00:11:59,410 --> 00:12:01,780 sa ei pea säilitada neid kindlas järjekorras. 233 00:12:01,780 --> 00:12:05,390 Saate, kui soovite, kuid olete juba märganud 234 00:12:05,390 --> 00:12:09,310 et me ei jälgimine Mis number element oleme. 235 00:12:09,310 --> 00:12:13,150 >> Ja see on omamoodi üks kaubanduse, et me on lingitud nimekirja salmid massiivid, 236 00:12:13,150 --> 00:12:15,300 on see meil ei ole random access enam. 237 00:12:15,300 --> 00:12:18,150 Me ei saa öelda, ma tahan minna 0. element, 238 00:12:18,150 --> 00:12:21,410 või 6. osa minu rida, mis ma teha saan massiivi. 239 00:12:21,410 --> 00:12:25,080 Ma ei saa öelda, et ma tahan minna 0. element, või 6. element, 240 00:12:25,080 --> 00:12:30,360 või 25. osa minu ahelloendid, pole indeks nendega. 241 00:12:30,360 --> 00:12:33,660 Ja nii see ei ole tegelikult küsimus Kui me säilitame oma nimekirja järjekorras. 242 00:12:33,660 --> 00:12:36,080 Kui soovite teid Kindlasti saab, kuid seal on 243 00:12:36,080 --> 00:12:38,567 mingit põhjust, miks nad peavad säilitatakse suvalises järjekorras. 244 00:12:38,567 --> 00:12:40,400 Nii jälle, proovime ja leida 6 selles nimekirjas. 245 00:12:40,400 --> 00:12:43,200 Noh, hakkame juures Alguses me ei leia 6, 246 00:12:43,200 --> 00:12:47,690 ja siis jätkame ei leia 6, kuni me lõpuks saada siin. 247 00:12:47,690 --> 00:12:52,790 Nii kohe trav punkte sõlme sisaldab 8 ja kuus ei ole olemas. 248 00:12:52,790 --> 00:12:55,250 >> Nii et järgmine samm oleks minna järgmisele pointer, 249 00:12:55,250 --> 00:12:57,440 nii öelda trav võrdub trav kõrval. 250 00:12:57,440 --> 00:13:00,750 Noh, trav kõrval, näitab punane kast seal on null. 251 00:13:00,750 --> 00:13:03,020 Nii et kuhugi minna, ja et selles kohas 252 00:13:03,020 --> 00:13:06,120 võib järeldada, et oleme jõudnud lõppu ahelloendid, 253 00:13:06,120 --> 00:13:07,190 ja 6 ei ole olemas. 254 00:13:07,190 --> 00:13:10,980 Ja see oleks tagastatud vale sel juhul. 255 00:13:10,980 --> 00:13:14,540 >> OK, kuidas me lisada uusi sõlme sisse ahelloendid? 256 00:13:14,540 --> 00:13:17,310 Nii oleme suutnud luua ahelloend välja kuhugi, 257 00:13:17,310 --> 00:13:19,370 kuid me ilmselt tahad ehitada kett ja ei 258 00:13:19,370 --> 00:13:22,620 luua hunnik eraldi nimekirja. 259 00:13:22,620 --> 00:13:25,700 Me tahame olla üks nimekiri, mis on hunnik tippe see, 260 00:13:25,700 --> 00:13:28,040 ei kamp nimekirjad ühe sõlme. 261 00:13:28,040 --> 00:13:31,260 Nii et me ei saa lihtsalt hoida abil Loo funktsiooni me eelnevalt defineeritud, nüüd 262 00:13:31,260 --> 00:13:33,860 soovite sisestada ümber nimekirja, mis on juba olemas. 263 00:13:33,860 --> 00:13:36,499 >> Nii Sel juhul me läheme läbida kaks argumenti, 264 00:13:36,499 --> 00:13:39,290 kursor juht, et seotud nimekirja, mida tahame lisada. 265 00:13:39,290 --> 00:13:40,910 Jällegi, see on põhjus, miks see nii oluline, et me alati 266 00:13:40,910 --> 00:13:43,400 jälgida, sest see on ainus viis, kuidas me tõesti 267 00:13:43,400 --> 00:13:46,690 on viidata kogu nimekirja on lihtsalt kursor esimene element. 268 00:13:46,690 --> 00:13:49,360 Nii et me tahame edasi oma kursor, et esimene element, 269 00:13:49,360 --> 00:13:52,226 ja mis iganes väärtust me tahan lisada nimekirja. 270 00:13:52,226 --> 00:13:54,600 Ja lõpuks see funktsioon läheb tagasi pointer 271 00:13:54,600 --> 00:13:57,980 Uue juhi ahelloend. 272 00:13:57,980 --> 00:13:59,700 >> Millised on etappe siin? 273 00:13:59,700 --> 00:14:02,249 Noh, nagu on luua, peame dünaamiliselt eraldada 274 00:14:02,249 --> 00:14:05,540 ruumi uue sõlme, ja kontrollige, Kindlasti me ei otsa mälu, taas, 275 00:14:05,540 --> 00:14:07,150 sest me kasutame malloc. 276 00:14:07,150 --> 00:14:09,080 Siis me tahame asustada ja paigaldage sõlme, 277 00:14:09,080 --> 00:14:12,730 nii panna number, mida iganes val on võetud sõlme. 278 00:14:12,730 --> 00:14:17,310 Tahame lisada sõlme alguses ahelloendid. 279 00:14:17,310 --> 00:14:19,619 >> Seal on põhjus, et ma tahad seda teha, ja see 280 00:14:19,619 --> 00:14:21,910 Võib-olla tasub võtta teist Video esitamise peatamiseks siin 281 00:14:21,910 --> 00:14:25,860 ja mõelda, miks ma ei tahaks sisestada alguses lingitud 282 00:14:25,860 --> 00:14:26,589 nimekirja. 283 00:14:26,589 --> 00:14:28,630 Jällegi, ma mainisin et see ei ole tegelikult 284 00:14:28,630 --> 00:14:33,020 oluline, kui me seda säilitada mis tahes Selleks, et äkki see aimugi. 285 00:14:33,020 --> 00:14:36,040 Ja sa nägid, mis juhtuks, kui me tahtsin mina-- või lihtsalt teist 286 00:14:36,040 --> 00:14:37,360 tagasi, kui me ei kavatse läbi otsida teid 287 00:14:37,360 --> 00:14:39,235 võis näha, milline võiks siis, kui me püüdsime 288 00:14:39,235 --> 00:14:41,330 sisestada lõpus nimekirjast. 289 00:14:41,330 --> 00:14:44,750 Sest me ei ole kursor nimekirja lõppu. 290 00:14:44,750 --> 00:14:47,490 >> Nii et põhjus, miks ma tahan lisada alguses, 291 00:14:47,490 --> 00:14:49,380 on, sest ma ei saa seda teha kohe. 292 00:14:49,380 --> 00:14:52,730 Mul on osuti alguses, ja me näeme seda visuaalset teine. 293 00:14:52,730 --> 00:14:55,605 Aga kui ma tahan lisada lõpus, Ma pean alustama algusest, 294 00:14:55,605 --> 00:14:58,760 läbida kõik viis lõpus ja seejärel pühitakse seda. 295 00:14:58,760 --> 00:15:01,420 Nii see tähendaks, et sisestades lõpus nimekiri 296 00:15:01,420 --> 00:15:04,140 muutuks o n operatsioon, minnes tagasi 297 00:15:04,140 --> 00:15:06,720 meie arutelu arvutuslik keerukus. 298 00:15:06,720 --> 00:15:10,140 Oleks saanud o n operatsioon, kus kui nimekiri sai suurem ja suurem, 299 00:15:10,140 --> 00:15:13,310 ja suurem, siis see muutub üha raskem tack midagi 300 00:15:13,310 --> 00:15:14,661 kohta lõpus. 301 00:15:14,661 --> 00:15:17,410 Aga see on alati väga lihtne tack midagi alguses, 302 00:15:17,410 --> 00:15:19,060 sa oled alati alguses. 303 00:15:19,060 --> 00:15:21,620 >> Ja me näeme visuaalne seda uuesti. 304 00:15:21,620 --> 00:15:24,100 Ja siis, kui me teinud, kui oleme sisestatud uus sõlm, 305 00:15:24,100 --> 00:15:26,880 tahame naasta oma viit uue juhi ahelloend, mis 306 00:15:26,880 --> 00:15:29,213 kuna me sisestamist juures hakanud, on tegelikult 307 00:15:29,213 --> 00:15:31,060 kursor sõlme me lihtsalt loodud. 308 00:15:31,060 --> 00:15:33,280 Teeme seda visualiseerida, sest ma arvan, et see aitame. 309 00:15:33,280 --> 00:15:36,661 >> Nii et siin on meie nimekirjas, siis see koosneb neli elementi, sõlm, mis sisaldavad 15, 310 00:15:36,661 --> 00:15:38,410 mis viitab sõlme sisaldab 9, mille 311 00:15:38,410 --> 00:15:41,370 osutab sõlme sisaldavad 13, mis viitab sõlme sisaldav 312 00:15:41,370 --> 00:15:44,840 10, millel on null pointer selle kõrval pointer 313 00:15:44,840 --> 00:15:47,010 nii et see lõpuks nimekirja. 314 00:15:47,010 --> 00:15:50,200 Nii et me tahame lisada uus sõlm väärtusega 12 315 00:15:50,200 --> 00:15:52,720 alguses käesoleva nimekirja, mida me teeme? 316 00:15:52,720 --> 00:15:58,770 Noh, esiteks me malloc ruumi sõlme, ja siis me paneme 12 seal. 317 00:15:58,770 --> 00:16:02,211 >> Nüüd oleme jõudnud otsuse punkti, eks? 318 00:16:02,211 --> 00:16:03,960 Meil on paar viiteid, et võiksime 319 00:16:03,960 --> 00:16:06,770 liikuda, millest üks peaks me liigume esimesena? 320 00:16:06,770 --> 00:16:09,250 Kas me peaksime tegema 12 punkti uus juht list-- 321 00:16:09,250 --> 00:16:13,020 või vabandage, me peaksime tegema 12 viitavad vana juht nimekirja? 322 00:16:13,020 --> 00:16:15,319 Või peaks ütlema, et Avalda oma kuulutused algab kell 12. 323 00:16:15,319 --> 00:16:17,110 Seal on vahet seal, ja me vaatame 324 00:16:17,110 --> 00:16:19,870 kell, mis juhtub nii teine. 325 00:16:19,870 --> 00:16:23,350 >> Aga see toob kaasa suur teema sidebar, 326 00:16:23,350 --> 00:16:26,280 mis seisneb selles, et üks trickiest asju ahelloendid 327 00:16:26,280 --> 00:16:30,980 on korraldada viiteid õiges järjekorras. 328 00:16:30,980 --> 00:16:34,520 Kui liigutad asju rikkis, võid sattuda kogemata 329 00:16:34,520 --> 00:16:36,050 orvustumine ülejäänud nimekirja. 330 00:16:36,050 --> 00:16:37,300 Ja siin on näide sellest. 331 00:16:37,300 --> 00:16:40,540 Nii lähme mõttega of-- noh, me oleme lihtsalt loodud 12. 332 00:16:40,540 --> 00:16:43,180 Me teame, 12 läheb uus juht nimekirja, 333 00:16:43,180 --> 00:16:47,660 ja miks me lihtsalt ei liigu nimekirja kursorit juhtida seal. 334 00:16:47,660 --> 00:16:49,070 >> OK, nii et see on hea. 335 00:16:49,070 --> 00:16:51,560 Nüüd, kus ei 12. Järgmine küsimus? 336 00:16:51,560 --> 00:16:54,580 Ma mõtlen, et visuaalselt näeme et see toob välja 15, 337 00:16:54,580 --> 00:16:57,250 kui inimesel on tõesti meile selge. 338 00:16:57,250 --> 00:17:00,300 Kuidas arvuti tea? 339 00:17:00,300 --> 00:17:02,720 Meil ei ole midagi osutades 15 enam, eks? 340 00:17:02,720 --> 00:17:05,869 >> Me oleme kaotanud võime viidata 15. 341 00:17:05,869 --> 00:17:11,460 Me ei saa öelda uue noolt võrdsete midagi, seal on midagi seal. 342 00:17:11,460 --> 00:17:13,510 Tegelikult oleme orvuks Ülejäänud nimekirja 343 00:17:13,510 --> 00:17:16,465 tehes oleme kogemata katki kett. 344 00:17:16,465 --> 00:17:18,089 Ja me kindlasti ei taha seda teha. 345 00:17:18,089 --> 00:17:20,000 >> Nii lähme tagasi ja proovige seda uuesti. 346 00:17:20,000 --> 00:17:24,060 Võib-olla õige asi, mida teha on seatud 12 järgmise pointer 347 00:17:24,060 --> 00:17:28,290 vana juht nimekirja esimene, siis saame liikuda nimekirja üle. 348 00:17:28,290 --> 00:17:30,420 Ja tegelikult, et on õiges järjekorras, et me 349 00:17:30,420 --> 00:17:32,836 pea järgima, kui me oleme töötavad üksi seotud nimekirja. 350 00:17:32,836 --> 00:17:36,460 Oleme alati tahtnud ühendada uus element nimekirja, 351 00:17:36,460 --> 00:17:41,010 enne võtame sellist oluline samm muutmise 352 00:17:41,010 --> 00:17:43,360 kus juht ahelloendid on. 353 00:17:43,360 --> 00:17:46,740 Jällegi, see on selline oluline asi, me ei taha kaotada jälgida seda. 354 00:17:46,740 --> 00:17:49,310 >> Nii et me tahame veenduda, et kõik on aheldatud koos, 355 00:17:49,310 --> 00:17:52,040 Enne astume, et osuti. 356 00:17:52,040 --> 00:17:55,300 Ja nii see oleks õiges järjekorras, mis on ühendada 12 loetellu, 357 00:17:55,300 --> 00:17:57,630 siis öelda, et nimekiri algab 12. 358 00:17:57,630 --> 00:18:00,860 Kui me ütlesime nimekirja algab kell 12 ja Seejärel üritas ühendada 12 nimekirja, 359 00:18:00,860 --> 00:18:02,193 me oleme juba näinud, mis juhtub. 360 00:18:02,193 --> 00:18:04,920 Me kaotame nimekirja kogemata. 361 00:18:04,920 --> 00:18:06,740 >> OK, nii et üks asi veel rääkida. 362 00:18:06,740 --> 00:18:09,750 Mis siis, kui me tahame vabaneda kogu ahelloendid korraga? 363 00:18:09,750 --> 00:18:11,750 Jällegi, me mallocing kõik selle ruumi, ja nii me 364 00:18:11,750 --> 00:18:13,351 peame vabastama seda, kui me teinud. 365 00:18:13,351 --> 00:18:15,350 Nüüd tahame kustutada Kogu seotud nimekirja. 366 00:18:15,350 --> 00:18:16,850 Noh, mida me tahame teha? 367 00:18:16,850 --> 00:18:20,460 >> Kui oleme jõudnud nullviida, me tahad lõpetada, muidu lihtsalt kustutada 368 00:18:20,460 --> 00:18:23,420 Ülejäänud nimekirjas ja seejärel vabastada mind. 369 00:18:23,420 --> 00:18:28,890 Kustuta ülejäänud nimekirja, ja siis vabastada aktiivse sõlme. 370 00:18:28,890 --> 00:18:32,850 Mida see tunduda, Mis tehnikat on rääkisime 371 00:18:32,850 --> 00:18:35,440 umbes eelnevalt Kas see tunduda? 372 00:18:35,440 --> 00:18:39,560 Kustuta kõik teised, siis tagasi tulla ja kustutada mind. 373 00:18:39,560 --> 00:18:42,380 >> See on recursion, oleme teinud Probleem natuke väiksem, 374 00:18:42,380 --> 00:18:46,910 me ütleme kustutada kõik muud, siis saab kustutada mind. 375 00:18:46,910 --> 00:18:50,940 Ja edasi mööda teed, et sõlm ütlevad, kustutada kõik teised. 376 00:18:50,940 --> 00:18:53,940 Aga lõpuks me jõuame kus nimekirjas on null, 377 00:18:53,940 --> 00:18:55,310 ja see on meie tugipunkt. 378 00:18:55,310 --> 00:18:57,010 >> Võtame pilk sellele, ja kuidas see võib töötada. 379 00:18:57,010 --> 00:18:59,759 Nii et siin on meie nimekirjas, see on sama List just rääkisime, 380 00:18:59,759 --> 00:19:00,980 ja seal on sammud. 381 00:19:00,980 --> 00:19:04,200 Seal on palju teksti siin, aga loodetavasti visualiseerimine aitab. 382 00:19:04,200 --> 00:19:08,557 >> Nii me have-- ja ma ka tõmmata up meie stack raamid illustratsioon 383 00:19:08,557 --> 00:19:10,890 meie video kõne korstnad, ja loodetavasti see kõik 384 00:19:10,890 --> 00:19:13,260 koos näitan sulle, mis toimub. 385 00:19:13,260 --> 00:19:14,510 Nii et siin on meie pseudokoodi koodi. 386 00:19:14,510 --> 00:19:17,830 Kui jõuame null pointer, peatus, muidu 387 00:19:17,830 --> 00:19:21,320 kustutada Ülejäänud nimekiri, siis tasuta aktiivse sõlme. 388 00:19:21,320 --> 00:19:25,700 Nii kohe, list-- kursorit, et me oleme 389 00:19:25,700 --> 00:19:28,410 kulgeb hävitada punkte 12. 390 00:19:28,410 --> 00:19:33,340 12 ei ole nullviida, nii et me oleme kustutamas ülejäänud nimekirja. 391 00:19:33,340 --> 00:19:35,450 >> Mis on kustutamata Ülejäänud meist kaasatud? 392 00:19:35,450 --> 00:19:37,950 Well, see tähendab, tehes helistada hävitada, öeldes 393 00:19:37,950 --> 00:19:42,060 et 15 on alguses Ülejäänud nimekiri tahame hävitada. 394 00:19:42,060 --> 00:19:47,480 Ja nii kõne hävitada 12 on selline ootele. 395 00:19:47,480 --> 00:19:52,690 See on külmunud seal, oodates helistada hävitada 15, et lõpetada oma töö. 396 00:19:52,690 --> 00:19:56,280 >> Noh, 15 ei ole nullviida ja nii see läheb öelda, on kõik korras, 397 00:19:56,280 --> 00:19:58,450 noh, kustutage ülejäänud nimekirja. 398 00:19:58,450 --> 00:20:00,760 Ülejäänud nimekirjas algab kell 9, ja nii me lihtsalt 399 00:20:00,760 --> 00:20:04,514 oodake, kuni sa kustutada kõik, mis kraami, siis tagasi tulla ja kustutada mind. 400 00:20:04,514 --> 00:20:06,680 Noh 9 läheb öelda, hästi, Ma ei ole nullviida, 401 00:20:06,680 --> 00:20:09,020 nii kustutada ülejäänud nimekirja siit. 402 00:20:09,020 --> 00:20:11,805 Ja nii proovida ja hävitada 13. 403 00:20:11,805 --> 00:20:15,550 13 ütleb, ma ei ole null pointer, Sama asi, see paneb selle. 404 00:20:15,550 --> 00:20:17,930 10 ei ole null pointer, 10 sisaldab nullviida, 405 00:20:17,930 --> 00:20:20,200 kuid 10 ei ole ise nullviida kohe, 406 00:20:20,200 --> 00:20:22,470 ja nii see paneb selle ka. 407 00:20:22,470 --> 00:20:25,560 >> Ja nüüd tuuakse loetelus olemas, siis tõesti viitaks some-- 408 00:20:25,560 --> 00:20:28,710 kui mul oleks rohkem ruumi pildi, see viitaks mõne juhusliku ruumi 409 00:20:28,710 --> 00:20:29,960 et me ei tea, mis see on. 410 00:20:29,960 --> 00:20:34,680 See on nullviida kuigi nimekirja on sõna otseses mõttes nüüdsest on väärtused null. 411 00:20:34,680 --> 00:20:36,820 See on suunatud paremale sees, et punane kast. 412 00:20:36,820 --> 00:20:39,960 Jõudsime nullviida, nii Me ei saa peatada, ja ongi kõik. 413 00:20:39,960 --> 00:20:46,230 >> Ja nii, et lilla raam on now-- juures peal stack-- see on aktiivses vaates 414 00:20:46,230 --> 00:20:47,017 kuid ta on teinud. 415 00:20:47,017 --> 00:20:48,600 Kui oleme jõudnud nullviida, peatus. 416 00:20:48,600 --> 00:20:51,290 Me ei saa midagi teha, siis ei saa vabastada nullviida, 417 00:20:51,290 --> 00:20:55,070 Me ei malloc tahes ruumi, ja nii me teinud. 418 00:20:55,070 --> 00:20:57,590 Nii et funktsioon raam on hävinud, ja me 419 00:20:57,590 --> 00:21:00,930 resume-- me sealt, kus me lahkusime maha järgmise suurima üks, mis 420 00:21:00,930 --> 00:21:02,807 see tumesinine raami siin. 421 00:21:02,807 --> 00:21:04,390 Nii me kiirenemist õigus, kus pooleli jäime. 422 00:21:04,390 --> 00:21:06,598 Me kustutatakse ülejäänud nimekiri on juba, nii et nüüd me oleme 423 00:21:06,598 --> 00:21:08,000 läheb vabalt praeguse sõlmed. 424 00:21:08,000 --> 00:21:12,920 Nüüd saame vabastada selle sõlme ja nüüd oleme jõudnud funktsiooni. 425 00:21:12,920 --> 00:21:16,810 Ja nii, et funktsiooni raam on hävinud, ja me kiirenemist helesinine üks. 426 00:21:16,810 --> 00:21:20,650 >> Seega says-- Olen juba done-- kustutada ülejäänud nimekirjas, siis 427 00:21:20,650 --> 00:21:23,140 tasuta aktiivse sõlme. 428 00:21:23,140 --> 00:21:26,520 Ja nüüd kollane raam on Tagasi peal virnas. 429 00:21:26,520 --> 00:21:29,655 Ja nii nagu näete, me oleme nüüd hävitades nimekirja paremalt vasakule. 430 00:21:29,655 --> 00:21:33,710 431 00:21:33,710 --> 00:21:37,280 >> Mis oleks juhtunud, kuigi kui me teinud asju valesti? 432 00:21:37,280 --> 00:21:39,410 Just nagu siis, kui me püüdsime lisada element. 433 00:21:39,410 --> 00:21:41,909 Kui me segi kett, kui Me ei ühenda viiteid 434 00:21:41,909 --> 00:21:44,690 õiges järjekorras, kui me lihtsalt vabaks esimene osa, 435 00:21:44,690 --> 00:21:47,420 kui me lihtsalt vabastas juht nimekirja, nüüd 436 00:21:47,420 --> 00:21:49,642 kuidagi viidata Ülejäänud nimekirjas. 437 00:21:49,642 --> 00:21:51,350 Ja nii me oleks orvuks kõike, 438 00:21:51,350 --> 00:21:53,880 oleks meil olnud, mis on nimetatakse Mälulekke. 439 00:21:53,880 --> 00:21:56,800 Kui te mäletate meie video dünaamilise mälu eraldamise, 440 00:21:56,800 --> 00:21:58,650 see ei ole väga hea. 441 00:21:58,650 --> 00:22:00,810 >> Nii nagu ma ütlesin, On mitmeid operatsioone 442 00:22:00,810 --> 00:22:04,010 et me peame kasutama tööd koos seotud nimekirja tõhusalt. 443 00:22:04,010 --> 00:22:08,430 Ja sa ehk märganud ma jätta üks, kustutada ühe elemendi lingitud 444 00:22:08,430 --> 00:22:09,064 nimekirja. 445 00:22:09,064 --> 00:22:10,980 Põhjus, miks ma seda tegin see on tegelikult omamoodi 446 00:22:10,980 --> 00:22:14,360 keeruline mõelda, kuidas kustutada ühe elemendi ühekaupa 447 00:22:14,360 --> 00:22:15,600 seotud nimekirja. 448 00:22:15,600 --> 00:22:19,950 Me peame olema võimelised vahele üle midagi nimekirjas, mis 449 00:22:19,950 --> 00:22:22,975 tähendab, et saame kaasa point-- me soovite kustutada selle node-- 450 00:22:22,975 --> 00:22:25,350 vaid selleks, et teha seda nii meil ei kaota andmeid, 451 00:22:25,350 --> 00:22:30,530 meil on vaja ühendada see sõlme siin, siin. 452 00:22:30,530 --> 00:22:33,390 >> Nii et ma vist tegin seda valesti et visuaalselt. 453 00:22:33,390 --> 00:22:36,830 Nii et me alguses oma nimekirja, me protsesside raames, 454 00:22:36,830 --> 00:22:40,510 tahame kustutada sõlme. 455 00:22:40,510 --> 00:22:43,440 Kui me lihtsalt kustutada, oleme murtud ketti. 456 00:22:43,440 --> 00:22:45,950 See sõlm siin viitab kõik muu, 457 00:22:45,950 --> 00:22:48,260 see sisaldab kett Siitmaalt. 458 00:22:48,260 --> 00:22:51,190 >> Mida me peame tegema tegelikult pärast saame selle punkti, 459 00:22:51,190 --> 00:22:56,670 on meil vaja astuda sammu tagasi üks, ja ühendada selle sõlme üle selle sõlme, 460 00:22:56,670 --> 00:22:58,590 nii et me saame siis kustuta Ühest keskel. 461 00:22:58,590 --> 00:23:02,120 Aga üksi ahelloendid ei anda meile võimalus minna tagasi. 462 00:23:02,120 --> 00:23:05,160 Seega peame kas hoida kaks suunanäitajaks, ja neid liigutada 463 00:23:05,160 --> 00:23:09,527 omamoodi off samm, üks taga muu kui me minna, või saada punkti 464 00:23:09,527 --> 00:23:11,110 ja siis saadab teise pointer kaudu. 465 00:23:11,110 --> 00:23:13,150 Ja nagu näete, see võib natuke segane. 466 00:23:13,150 --> 00:23:15,360 Õnneks on meil muul viisil lahendada, et 467 00:23:15,360 --> 00:23:17,810 kui me räägime kahekordselt seotud nimekirju. 468 00:23:17,810 --> 00:23:20,720 >> Ma olen Doug Lloyd, see on CS50. 469 00:23:20,720 --> 00:23:22,298