1 00:00:07,260 --> 00:00:10,050 [Powered by Google Translate] En programado, ni ofte bezonas por reprezenti listoj de valoroj, 2 00:00:10,050 --> 00:00:12,840 kiel la nomoj de studentoj en sekcio 3 00:00:12,840 --> 00:00:15,100 aŭ liaj partituroj al la lasta kvizo. 4 00:00:15,100 --> 00:00:17,430 >> En la lingvo C, deklaris tabeloj povas esti uzata 5 00:00:17,430 --> 00:00:19,160 stoki lertaj. 6 00:00:19,160 --> 00:00:21,200 Estas facile numeri la eroj de listo 7 00:00:21,200 --> 00:00:23,390 stokita en tabelo, kaj se vi bezonas aliron 8 00:00:23,390 --> 00:00:25,050 aŭ modifi la th,-a listo elemento 9 00:00:25,050 --> 00:00:27,570 por iuj arbitraj indekso mi, 10 00:00:27,570 --> 00:00:29,910 kiu povas esti farita en konstanta tempo, 11 00:00:29,910 --> 00:00:31,660 sed arrays havas malavantaĝojn, ankaŭ. 12 00:00:31,660 --> 00:00:33,850 >> Kiam ni deklari ilin, ni postulas por diri 13 00:00:33,850 --> 00:00:35,900 ĉe fronto kiom granda estas, 14 00:00:35,900 --> 00:00:38,160 tio estas, kiom da elementoj ne povas stoki 15 00:00:38,160 --> 00:00:40,780 kaj kiel grandan tiuj elementoj estas, kiu estas difinita per sia tipo. 16 00:00:40,780 --> 00:00:45,450 Ekzemple, int Arr (10) 17 00:00:45,450 --> 00:00:48,220 povas stoki 10 artikoloj 18 00:00:48,220 --> 00:00:50,200 kiuj estas la grandeco de int. 19 00:00:50,200 --> 00:00:52,590 >> Ni ne povas ŝanĝi tabelo de grandeco post deklaro. 20 00:00:52,590 --> 00:00:55,290 Ni devas fari novan tabelo se ni volas konservi pli elementoj. 21 00:00:55,290 --> 00:00:57,410 La kialo ĉi tiu limigo ekzistas estas ke nia 22 00:00:57,410 --> 00:00:59,040 programo stokas la tutan tabelo 23 00:00:59,040 --> 00:01:02,310 kiel bela eron de memoro. 24 00:01:02,310 --> 00:01:04,500 Diru ĉi tiu estas la bufro kie ni gardas en nia tabelo. 25 00:01:04,500 --> 00:01:06,910 Povas esti aliaj variabloj 26 00:01:06,910 --> 00:01:08,310 lokita tuj apud la tabelo 27 00:01:08,310 --> 00:01:10,060 en memoro, do ni ne povas 28 00:01:10,060 --> 00:01:12,060 nur fari la tabelo pli granda. 29 00:01:12,060 --> 00:01:15,700 >> Kelkfoje ni ŝatus komerci la tabelo de rapida datumoj aliro rapido 30 00:01:15,700 --> 00:01:17,650 por iom pli fleksebleco. 31 00:01:17,650 --> 00:01:20,380 Entajpu la ligitaj listo, alia baza datumstrukturo 32 00:01:20,380 --> 00:01:22,360 vi eble ne estos tiel familiara kun. 33 00:01:22,360 --> 00:01:24,200 Je alta nivelo, 34 00:01:24,200 --> 00:01:26,840 kunligita listo stokas datumojn en vico de verticoj 35 00:01:26,840 --> 00:01:29,280 ke estas konektitaj inter aliaj kun ligoj, 36 00:01:29,280 --> 00:01:31,760 tie la nomo 'ligitaj listo.' 37 00:01:31,760 --> 00:01:33,840 Kiel ni vidos, tiu diferenco en dezajno 38 00:01:33,840 --> 00:01:35,500 kondukas al malsamaj avantaĝoj kaj malavantaĝoj 39 00:01:35,500 --> 00:01:37,000 ol tabelo. 40 00:01:37,000 --> 00:01:39,840 >> Jen kelkaj C-kodo por tre simplaj ligitaj listo de entjeroj. 41 00:01:39,840 --> 00:01:42,190 Vi povas vidi ke ni reprezentis ĉiu nodo 42 00:01:42,190 --> 00:01:45,520 en la listo kiel struct kiuj enhavas 2 aferojn, 43 00:01:45,520 --> 00:01:47,280 entjero stoki nomita 'val' 44 00:01:47,280 --> 00:01:50,460 kaj ligon al la sekva nodo en la listo 45 00:01:50,460 --> 00:01:52,990 kiuj ni reprezentas kiel puntero nomita 'sekva'. 46 00:01:54,120 --> 00:01:56,780 Tiel, ni povas spuri la tutan liston 47 00:01:56,780 --> 00:01:58,790 kun nur unu sagon al la 1-a nodo, 48 00:01:58,790 --> 00:02:01,270 kaj poste ni povas sekvi la sekvanta punteros 49 00:02:01,270 --> 00:02:03,130 al la 2a nodo, 50 00:02:03,130 --> 00:02:05,280 al la 3a nodo, 51 00:02:05,280 --> 00:02:07,000 al la 4a nodo, 52 00:02:07,000 --> 00:02:09,889 kaj tiel plu, ĝis ni atingos la finon de la listo. 53 00:02:10,520 --> 00:02:12,210 >> Vi eble povos vidi 1 avantaĝon ĉi tiu havas 54 00:02:12,210 --> 00:02:14,490 super la statika tabelo strukturo - kun ligitaj listo, 55 00:02:14,490 --> 00:02:16,450 ni ne bezonas grandan eron de memoro aro. 56 00:02:17,400 --> 00:02:20,530 La 1-a nodo de la listo povus vivi en tiu loko en la memoro, 57 00:02:20,530 --> 00:02:23,160 kaj la 2-a vertico povus esti la tuta vojo super tie. 58 00:02:23,160 --> 00:02:25,780 Ni povas alveni al ĉiuj nodoj negrave kie en memoro estas, 59 00:02:25,780 --> 00:02:28,890 ĉar ekde la 1a nodo, ĉiu nodo La sekva puntero 60 00:02:28,890 --> 00:02:31,700 diras ni precize kien iri proksima. 61 00:02:31,700 --> 00:02:33,670 >> Aldone, ni ne devas diri supren fronto 62 00:02:33,670 --> 00:02:36,740 kiom granda estas ligitaj listo estos la maniero ni faras kun statika arrays, 63 00:02:36,740 --> 00:02:39,060 ĉar ni povas subteni aldonante nodoj al listo 64 00:02:39,060 --> 00:02:42,600 tiel longe, kiel ekzistas spaco ie en memoro por novaj nodoj. 65 00:02:42,600 --> 00:02:45,370 Sekve, kunligita lertaj estas facilaj regrandigi dinamike. 66 00:02:45,370 --> 00:02:47,950 Diru, poste en la programo necesas aldoni pli nodoj 67 00:02:47,950 --> 00:02:49,350 en nian liston. 68 00:02:49,350 --> 00:02:51,480 Por enmeti novan nodon en nia listo de la muŝo, 69 00:02:51,480 --> 00:02:53,740 ĉiuj ni devas fari estas rezervi memoron por tiu nodo, 70 00:02:53,740 --> 00:02:55,630 plop en la datumoj valoro, 71 00:02:55,630 --> 00:02:59,070 kaj poste meti ĝin kie volas modifu la taŭgajn punteros. 72 00:02:59,070 --> 00:03:02,310 >> Ekzemple, se ni volis meti nodo en inter 73 00:03:02,310 --> 00:03:04,020 la 2-a kaj 3-a nodoj de la listo, 74 00:03:04,020 --> 00:03:06,800  ni ne devus movi la 2-a aŭ 3-a nodoj ajn. 75 00:03:06,800 --> 00:03:09,190 Diru ni enmeto ĉi ruĝa nodo. 76 00:03:09,190 --> 00:03:12,890 Ĉiuj ni devus fari estas metita la nova vertico La sekva puntero 77 00:03:12,890 --> 00:03:14,870 atentigi al la 3a nodo 78 00:03:14,870 --> 00:03:18,580 kaj tiam ReWire la 2-a nodo La sekva puntero 79 00:03:18,580 --> 00:03:20,980 atentigi al nia nova nodo. 80 00:03:22,340 --> 00:03:24,370 Do, ni povas regrandigi niaj listoj en la muŝo 81 00:03:24,370 --> 00:03:26,090 ekde nia komputilo ne fidi indeksado, 82 00:03:26,090 --> 00:03:28,990 sed prefere en ligas uzante punteros stoki ilin. 83 00:03:29,120 --> 00:03:31,600 >> Tamen, malavantaĝo de ligitaj listoj 84 00:03:31,600 --> 00:03:33,370 estas ke, kontraste kun statika tabelo, 85 00:03:33,370 --> 00:03:36,690 la komputilo ne povas ĝuste salti al la mezo de la listo. 86 00:03:38,040 --> 00:03:40,780 Ekde la komputilo devas viziti ĉiu vertico en la ligitaj listo 87 00:03:40,780 --> 00:03:42,330 alveni ĝis la sekva, 88 00:03:42,330 --> 00:03:44,770 ĝi tuj preni plu trovi apartan nodon 89 00:03:44,770 --> 00:03:46,400 ol would en tabelo. 90 00:03:46,400 --> 00:03:48,660 Tra la tuta listo prenas tempon proporcia 91 00:03:48,660 --> 00:03:50,580 al la longo de la listo, 92 00:03:50,580 --> 00:03:54,630 aŭ O (n) en asimptota skribmaniero. 93 00:03:54,630 --> 00:03:56,510 Averaĝe, atingante ajna nodo 94 00:03:56,510 --> 00:03:58,800 ankaŭ prenas tempon proporcia al n. 95 00:03:58,800 --> 00:04:00,700 >> Nun, ni reale skribi iom da kodo 96 00:04:00,700 --> 00:04:02,000 kiu funkcias kun ligitaj listoj. 97 00:04:02,000 --> 00:04:04,220 Supozu ke ni volas ligitaj listo de entjeroj. 98 00:04:04,220 --> 00:04:06,140 Ni povas reprezenti nodo en nia listo denove 99 00:04:06,140 --> 00:04:08,340 kiel struct kun 2 kampoj, 100 00:04:08,340 --> 00:04:10,750 entjera valoro nomita 'val' 101 00:04:10,750 --> 00:04:13,490 kaj proksima sagon al la sekva nodo de la listo. 102 00:04:13,490 --> 00:04:15,660 Nu, ŝajnas sufiĉe simpla. 103 00:04:15,660 --> 00:04:17,220 >> Supozu ke ni volas skribi funkcio 104 00:04:17,220 --> 00:04:19,329 kiu trairas la listo kaj gravuraĵoj el la 105 00:04:19,329 --> 00:04:22,150 valoro stokita en la lasta nodo de la listo. 106 00:04:22,150 --> 00:04:24,850 Nu, tio signifas ke ni bezonos tra ĉiuj nodoj en la listo 107 00:04:24,850 --> 00:04:27,310 trovi la lasta, sed ekde ni ne aldonante 108 00:04:27,310 --> 00:04:29,250 aŭ forigi ion, ni ne volas ŝanĝi 109 00:04:29,250 --> 00:04:32,210 la interna strukturo de la sekvanta punteros en la listo. 110 00:04:32,210 --> 00:04:34,790 >> Do, ni bezonas puntero specife por traversal 111 00:04:34,790 --> 00:04:36,940 kiuj ni vokos 'crawler.' 112 00:04:36,940 --> 00:04:38,870 Ĝi rampas tra ĉiuj eroj de la listo 113 00:04:38,870 --> 00:04:41,190 sekvante la ĉeno de la proksima punteros. 114 00:04:41,190 --> 00:04:43,750 Ĉiuj ni stokis estas sagon al la 1-a nodo, 115 00:04:43,750 --> 00:04:45,730 aŭ 'kapo' de la listo. 116 00:04:45,730 --> 00:04:47,370 Kapo poentojn al la 1-a vertico. 117 00:04:47,370 --> 00:04:49,120 Estas de tipo puntero-al-nodo. 118 00:04:49,120 --> 00:04:51,280 >> Por ricevi la reala 1er nodo en la listo, 119 00:04:51,280 --> 00:04:53,250 ni devas dereference ĉi pointer, 120 00:04:53,250 --> 00:04:55,100 sed antaŭ ol ni povas dereference ĝin, ni devas kontroli 121 00:04:55,100 --> 00:04:57,180 se la puntero estas nula unua. 122 00:04:57,180 --> 00:04:59,190 Se estas nula, la listo estas malplena, 123 00:04:59,190 --> 00:05:01,320 kaj ni devus presi mesaĝon ke, ĉar la listo estas malplena, 124 00:05:01,320 --> 00:05:03,250 ne estas lasta nodo. 125 00:05:03,250 --> 00:05:05,190 Sed, diru la listo ne estas malplena. 126 00:05:05,190 --> 00:05:08,340 Se ĝi ne estas, tiam ni devus rampi tra la tutan liston 127 00:05:08,340 --> 00:05:10,440 ĝis ni atingos la lastan nodon de la listo, 128 00:05:10,440 --> 00:05:13,030 kaj kiel ni povas diri se ni rigardas la lastan nodon en la listo? 129 00:05:13,670 --> 00:05:16,660 >> Nu, se vertico La sekva puntero estas nula, 130 00:05:16,660 --> 00:05:18,320 ni scias ni fine 131 00:05:18,320 --> 00:05:22,390 ekde la pasinta sekva puntero ne havus sekva nodo en la listo atentigi al. 132 00:05:22,390 --> 00:05:26,590 Ĝi estas bona praktiko ĉiam subteni la lastan nodon La sekva puntero inicializado al nula 133 00:05:26,590 --> 00:05:30,800 havi normigita propraĵo kiu alarmas nin kiam ni atingis la finon de la listo. 134 00:05:30,800 --> 00:05:33,510 >> Do, se crawler → sekva estas nula, 135 00:05:34,120 --> 00:05:38,270 memoru ke la sago sintakso estas simbola ligilo por dereferencing 136 00:05:38,270 --> 00:05:40,010 puntero al struct, tiam alirante 137 00:05:40,010 --> 00:05:42,510 lia proksima kampo ekvivalento al la mallerta: 138 00:05:42,510 --> 00:05:48,750 (* Crawler). Proksima. 139 00:05:49,820 --> 00:05:51,260 Iam ni trovis la lasta nodo, 140 00:05:51,260 --> 00:05:53,830 ni volas presi crawler → val, 141 00:05:53,830 --> 00:05:55,000 la valoron en la nuna nodo 142 00:05:55,000 --> 00:05:57,130 kiuj ni scias estas la lasta. 143 00:05:57,130 --> 00:05:59,740 Alie, ĉu ni ankoraŭ ne en la lasta nodo en la listo, 144 00:05:59,740 --> 00:06:02,340 ni devas movi al la venonta vertico en la listo 145 00:06:02,340 --> 00:06:04,750 kaj kontrolu ĉu tio estas la lasta. 146 00:06:04,750 --> 00:06:07,010 Por fari tion, ni simple metis niajn crawler puntero 147 00:06:07,010 --> 00:06:09,840 atentigi al la nuna nodo La sekva valoro, 148 00:06:09,840 --> 00:06:11,680 tio estas, la sekvanta nodo en la listo. 149 00:06:11,680 --> 00:06:13,030 Ĉi tiu estas farita per opcio 150 00:06:13,030 --> 00:06:15,280 crawler = crawler → proksima. 151 00:06:16,050 --> 00:06:18,960 Tiam ni ripetu ĉi tiun procezon, kun buklo ekzemple, 152 00:06:18,960 --> 00:06:20,960 ĝis ni trovos la lastan nodon. 153 00:06:20,960 --> 00:06:23,150 Do, ekzemple, se crawler estis indikante kapon, 154 00:06:24,050 --> 00:06:27,710 ni aro crawler atentigi al crawler → proksima, 155 00:06:27,710 --> 00:06:30,960 kiu estas la sama kiel la proksima kampo de la 1-a vertico. 156 00:06:30,960 --> 00:06:33,620 Do, nun nia crawler notas al la 2a nodo, 157 00:06:33,620 --> 00:06:35,480 kaj, denove, ni ripetu ĉi kun buklo, 158 00:06:37,220 --> 00:06:40,610 ĝis ni trovis la lasta nodo, tio estas, 159 00:06:40,610 --> 00:06:43,640 kie la nodo la sekva puntero notas al nula. 160 00:06:43,640 --> 00:06:45,070 Kaj tie ni havas, 161 00:06:45,070 --> 00:06:47,620 ni trovis la lasta nodo en la listo, kaj presi lian valoron, 162 00:06:47,620 --> 00:06:50,800 ni simple uzu crawler → val. 163 00:06:50,800 --> 00:06:53,130 >> Lauxiris ne estas tiel malbona, sed kio pri enmeto? 164 00:06:53,130 --> 00:06:56,290 Lasas ke ni volas enmeti entjero en la 4a pozicio 165 00:06:56,290 --> 00:06:58,040 en entjera listo. 166 00:06:58,040 --> 00:07:01,280 Kiu estas inter la aktuala 3a kaj 4a nodoj. 167 00:07:01,280 --> 00:07:03,760 Denove, ni devas trairi la listo nur por 168 00:07:03,760 --> 00:07:06,520 alveni al la 3a ero, la ni enmeto poste. 169 00:07:06,520 --> 00:07:09,300 Do, ni krei crawler puntero denove tra la listo, 170 00:07:09,300 --> 00:07:11,400 kontroli se nia kapo puntero estas nula, 171 00:07:11,400 --> 00:07:14,810 kaj se ĝi ne estas, atentigi niajn crawler puntero ĉe la kapo nodo. 172 00:07:16,880 --> 00:07:18,060 Do, ni estas en la 1-a elemento. 173 00:07:18,060 --> 00:07:21,020 Ni devas iri antaŭen 2 pli elementoj antaŭ ol ni povas enigi, 174 00:07:21,020 --> 00:07:23,390 do ni povas uzi por buklo 175 00:07:23,390 --> 00:07:26,430 int i = 1; i <3; i + + 176 00:07:26,430 --> 00:07:28,590 kaj en ĉiu ripeto de la ciklo, 177 00:07:28,590 --> 00:07:31,540 antaŭi nia crawler puntero antaŭen per 1 nodo 178 00:07:31,540 --> 00:07:34,570 kontrolante se la nuna nodo La sekva kampo estas nula, 179 00:07:34,570 --> 00:07:37,550 kaj se ĝi ne estas, movi niajn crawler sagon al la sekva nodo 180 00:07:37,550 --> 00:07:41,810 per opcio ĝi egala al la nuna nodo La sekva puntero. 181 00:07:41,810 --> 00:07:45,210 Do, ekde nia por buklo diras fari tion 182 00:07:45,210 --> 00:07:47,550 dufoje, 183 00:07:49,610 --> 00:07:51,190 ni atingis la 3-a nodo, 184 00:07:51,190 --> 00:07:53,110 kaj unu fojon nia crawler puntero atingis la nodo post 185 00:07:53,110 --> 00:07:55,270 kion ni volas enmeti nia nova entjero, 186 00:07:55,270 --> 00:07:57,050 how do ni efektive ne la enmeto? 187 00:07:57,050 --> 00:07:59,440 >> Nu, nia nova entjero devas esti enmetita en la listo 188 00:07:59,440 --> 00:08:01,250 kiel parto de lia propra vertico struct, 189 00:08:01,250 --> 00:08:03,140 ekde ĉi tiu estas vere vico de nodoj. 190 00:08:03,140 --> 00:08:05,690 Do, ni faru novan puntero al nodo 191 00:08:05,690 --> 00:08:08,910 nomita 'new_node: 192 00:08:08,910 --> 00:08:11,800 kaj starigis gxin rekte al la memoro, ke ni nun atribui 193 00:08:11,800 --> 00:08:14,270 sur la havaĵon por la nodo mem, 194 00:08:14,270 --> 00:08:16,000 kaj kiom memoro Kion ni bezonas atribui? 195 00:08:16,000 --> 00:08:18,250 Nu, la grandeco de nodo, 196 00:08:20,450 --> 00:08:23,410 kaj ni volas establi lia val kampo al la entjera ke ni volas enmeti. 197 00:08:23,410 --> 00:08:25,590 Diru, 6. 198 00:08:25,590 --> 00:08:27,710 Nun, la nodo enhavas niajn entjera valoro. 199 00:08:27,710 --> 00:08:30,650 Estas ankaŭ bona praktiko por pravalorizi la nova vertico La sekva kampo 200 00:08:30,650 --> 00:08:33,690 atentigi al nula, 201 00:08:33,690 --> 00:08:35,080 sed nun, kion? 202 00:08:35,080 --> 00:08:37,179 >> Ni devas ŝanĝi la interna strukturo de la listo 203 00:08:37,179 --> 00:08:40,409 kaj la sekvan punteros enhavita en la listo de ekzistantaj 204 00:08:40,409 --> 00:08:42,950 3-a kaj 4-a nodoj. 205 00:08:42,950 --> 00:08:46,560 Ekde la venonta punteros determini la ordon de la listo, 206 00:08:46,560 --> 00:08:48,650 kaj pro tio ni enmeto nia nova nodo 207 00:08:48,650 --> 00:08:50,510 rekte en la mezo de la listo, 208 00:08:50,510 --> 00:08:52,010 ĝi povas esti iom malfacila. 209 00:08:52,010 --> 00:08:54,250 Ĉi tio estas ĉar, memoru, nia komputilo 210 00:08:54,250 --> 00:08:56,250 nur konas la situon de nodoj en la listo 211 00:08:56,250 --> 00:09:00,400 pro la sekva punteros stokita en la antaŭa nodoj. 212 00:09:00,400 --> 00:09:03,940 Do, se ni iam miskalkulis iu el tiuj lokoj, 213 00:09:03,940 --> 00:09:06,860 diru ŝanĝante unu el la sekvaj indikoj en nia listo, 214 00:09:06,860 --> 00:09:09,880 ekzemple, supozu ke ni ŝanĝis 215 00:09:09,880 --> 00:09:12,920 la 3-a nodo La sekva kampo 216 00:09:12,920 --> 00:09:15,610 atentigi al iu nodo super tie. 217 00:09:15,610 --> 00:09:17,920 Ni ŝatus el sorton, ĉar ni ne volis 218 00:09:17,920 --> 00:09:20,940 havi neniun ideon kie trovi la resto de la listo, 219 00:09:20,940 --> 00:09:23,070 kaj tio evidente vere malbona. 220 00:09:23,070 --> 00:09:25,080 Do, ni devas esti vere zorgema pri la ordo 221 00:09:25,080 --> 00:09:28,360 en kiu ni manipuli nian proksiman punteros dum inserción. 222 00:09:28,360 --> 00:09:30,540 >> Do, por simpligi ĉi tion, diru ke 223 00:09:30,540 --> 00:09:32,220 nia unua 4 nodoj 224 00:09:32,220 --> 00:09:36,200 nomas A, B, C, kaj D, kun la sagoj reprezentas la ĉeno de punteros 225 00:09:36,200 --> 00:09:38,070 kiuj konektas la nodoj. 226 00:09:38,070 --> 00:09:40,050 Do, ni bezonas enmeti nia nova nodo 227 00:09:40,050 --> 00:09:42,070 en inter nodoj C kaj D. 228 00:09:42,070 --> 00:09:45,060 Estas kritika fari ĝin en la rajton ordo, kaj mi montros al vi kial. 229 00:09:45,060 --> 00:09:47,500 >> Ni rigardu la malĝusta vojo al fari ĝin unue. 230 00:09:47,500 --> 00:09:49,490 Hej, ni scias la nova vertico devas veni tuj post C, 231 00:09:49,490 --> 00:09:51,910 do ni starigis C La sekva puntero 232 00:09:51,910 --> 00:09:54,700 atentigi al new_node. 233 00:09:56,530 --> 00:09:59,180 Bone, ŝajnas bone, ni nur devas fini nun per 234 00:09:59,180 --> 00:10:01,580 farante la nova vertico La sekva puntero punkto al D, 235 00:10:01,580 --> 00:10:03,250 sed atendas, kiel ni povas fari? 236 00:10:03,250 --> 00:10:05,170 La sola afero, kiu povus diri al ni kie D estis, 237 00:10:05,170 --> 00:10:07,630 estis la sekva puntero antaŭe stokitaj en C, 238 00:10:07,630 --> 00:10:09,870 sed ni nur reverkis ke puntero 239 00:10:09,870 --> 00:10:11,170 atentigi al la nova nodo, 240 00:10:11,170 --> 00:10:14,230 do ni ne plu havas neniun postsignon kie D estas en memoro, 241 00:10:14,230 --> 00:10:17,020 kaj ni perdis la resto de la listo. 242 00:10:17,020 --> 00:10:19,000 Ne bona ajn. 243 00:10:19,000 --> 00:10:21,090 >> Do, kiel ni faru tiun rajton? 244 00:10:22,360 --> 00:10:25,090 Unue, notas la novan nodon La sekva puntero en D. 245 00:10:26,170 --> 00:10:28,990 Nun, tiel la nova nodo kaj C la sekva punteros 246 00:10:28,990 --> 00:10:30,660 estas montrante la sama nodo, D, 247 00:10:30,660 --> 00:10:32,290 sed tio estas bone. 248 00:10:32,290 --> 00:10:35,680 Nun ni povas noti C La sekva puntero ĉe la nova nodo. 249 00:10:37,450 --> 00:10:39,670 Do, ni faris tion sen perdi neniun datumon. 250 00:10:39,670 --> 00:10:42,280 En kodo, C estas la nuna nodo 251 00:10:42,280 --> 00:10:45,540 ke la traversal puntero crawler estas indikante, 252 00:10:45,540 --> 00:10:50,400 kaj D estas reprezentita de la nodo montradis per la nuna nodo La sekva kampo, 253 00:10:50,400 --> 00:10:52,600 aŭ crawler → proksima. 254 00:10:52,600 --> 00:10:55,460 Do, ni unue starigis la nova vertico La sekva puntero 255 00:10:55,460 --> 00:10:57,370 atentigi al crawler → proksima, 256 00:10:57,370 --> 00:11:00,880 la sama maniero ni diris new_node La sekva puntero should 257 00:11:00,880 --> 00:11:02,780 noti al D en la ilustraĵo. 258 00:11:02,780 --> 00:11:04,540 Tiam, oni povas agordi la nuna nodo La sekva puntero 259 00:11:04,540 --> 00:11:06,330 al nia nova nodo, 260 00:11:06,330 --> 00:11:10,980 kiel ni devis atendi al punkto C al new_node en la desegno. 261 00:11:10,980 --> 00:11:12,250 Nun ĉiu estas en ordo, kaj ni ne perdu 262 00:11:12,250 --> 00:11:14,490 spuri de ajna datumoj, kaj ni povis nur 263 00:11:14,490 --> 00:11:16,200 batos nia nova nodo en la mezo de la listo 264 00:11:16,200 --> 00:11:19,330 sen rekonstruado la tuta afero aŭ eĉ ŝanĝante ajna elementoj 265 00:11:19,330 --> 00:11:22,490 la vojo ni estus devinta kun fiksa longeco tabelo. 266 00:11:22,490 --> 00:11:26,020 >> Do, kunligita lertaj estas baza, sed grava, dinamika datumstrukturo 267 00:11:26,020 --> 00:11:29,080 kiuj havas ambaŭ avantaĝojn kaj malavantaĝojn 268 00:11:29,080 --> 00:11:31,260 kompare kun tabeloj kaj aliaj datumstrukturoj, 269 00:11:31,260 --> 00:11:33,350 kaj kiel ofte okazas en komputiko, 270 00:11:33,350 --> 00:11:35,640 ĝi estas grave scii kiam uzi ĉiu ilo, 271 00:11:35,640 --> 00:11:37,960 tiel vi povos repreni la dekstra ilo por la rajto laboron. 272 00:11:37,960 --> 00:11:40,060 >> Por pli oportuna, provu skribi funkciojn al 273 00:11:40,060 --> 00:11:42,080 forviŝi nodoj de ligitaj listo - 274 00:11:42,080 --> 00:11:44,050 memori esti zorgema pri la ordo en kiu vi reordigi 275 00:11:44,050 --> 00:11:47,430 via venonta punteros por certigi ke vi ne perdu eron de via listo - 276 00:11:47,430 --> 00:11:50,200 aŭ funkcio por rakonti la nodoj en ligitaj listo, 277 00:11:50,200 --> 00:11:53,280 aŭ amuza unu, por inversigi la ordon de ĉiuj el la nodoj en ligitaj listo. 278 00:11:53,280 --> 00:11:56,090 >> Mia nomo estas Jackson Steinkamp, ​​ĉi tiu estas CS50.