1 00:00:07,260 --> 00:00:10,050 [Powered by Google Translate] U programiranju, često je potrebno da predstavljaju popise vrijednosti, 2 00:00:10,050 --> 00:00:12,840 kao što su imena učenika u odjeljku 3 00:00:12,840 --> 00:00:15,100 ili njihovi rezultati na posljednjem kvizu. 4 00:00:15,100 --> 00:00:17,430 >> U C jeziku, izjavio polja mogu se koristiti 5 00:00:17,430 --> 00:00:19,160 za pohranu liste. 6 00:00:19,160 --> 00:00:21,200 To je lako nabrojati elemente popisa 7 00:00:21,200 --> 00:00:23,390 pohranjene u niz, a ako je potrebno pristupiti 8 00:00:23,390 --> 00:00:25,050 ili modificirati ith elementa popisa 9 00:00:25,050 --> 00:00:27,570 za neke proizvoljne indeksa sam, 10 00:00:27,570 --> 00:00:29,910 koji se može obaviti u stalnom vrijeme, 11 00:00:29,910 --> 00:00:31,660 ali nizovi imaju nedostatke, previše. 12 00:00:31,660 --> 00:00:33,850 >> Kada smo ih proglasiti, mi smo dužni reći 13 00:00:33,850 --> 00:00:35,900 up front koliki su, 14 00:00:35,900 --> 00:00:38,160 da je, koliko elementi mogu pohraniti 15 00:00:38,160 --> 00:00:40,780 i koliko su ti elementi, koji se određuje prema vrsti. 16 00:00:40,780 --> 00:00:45,450 Na primjer, int arr (10) 17 00:00:45,450 --> 00:00:48,220 može pohraniti 10 artikala 18 00:00:48,220 --> 00:00:50,200 koje su veličine int. 19 00:00:50,200 --> 00:00:52,590 >> Mi ne možemo promijeniti niz veličinu nakon proglašenja. 20 00:00:52,590 --> 00:00:55,290 Moramo napraviti novi niz ako želimo pohraniti više elemenata. 21 00:00:55,290 --> 00:00:57,410 Razlog je to ograničenje postoji je da su naši 22 00:00:57,410 --> 00:00:59,040 Program pohranjuje cijeli niz 23 00:00:59,040 --> 00:01:02,310 kao granični komad memorije. 24 00:01:02,310 --> 00:01:04,500 Recimo to je tampon gdje smo pohranjeni u našem polju. 25 00:01:04,500 --> 00:01:06,910 Tu bi moglo biti druge varijable 26 00:01:06,910 --> 00:01:08,310 nalazi tik do niza 27 00:01:08,310 --> 00:01:10,060 u memoriji, tako da ne možemo 28 00:01:10,060 --> 00:01:12,060 Upravo bi polje veći. 29 00:01:12,060 --> 00:01:15,700 >> Ponekad bismo željeli trgovati polje je brzo pristup podacima brzinu 30 00:01:15,700 --> 00:01:17,650 za malo više fleksibilnosti. 31 00:01:17,650 --> 00:01:20,380 Unesite povezanu listu, jedan od osnovnih struktura podataka 32 00:01:20,380 --> 00:01:22,360 možda neće biti kao upoznati. 33 00:01:22,360 --> 00:01:24,200 Na visokoj razini, 34 00:01:24,200 --> 00:01:26,840 povezani popis pohranjuje podatke u nizu čvorova 35 00:01:26,840 --> 00:01:29,280 koji su međusobno povezani s vezama, 36 00:01:29,280 --> 00:01:31,760 otud ime 'povezani popis.' 37 00:01:31,760 --> 00:01:33,840 Kao što ćemo vidjeti, ta razlika u dizajnu 38 00:01:33,840 --> 00:01:35,500 dovodi do različitih prednosti i nedostataka 39 00:01:35,500 --> 00:01:37,000 nego niz. 40 00:01:37,000 --> 00:01:39,840 >> Evo nekih C kod za vrlo jednostavan povezan popisu brojeva. 41 00:01:39,840 --> 00:01:42,190 Možete vidjeti da smo zastupljeni svaki čvor 42 00:01:42,190 --> 00:01:45,520 u popisu kao struct koji sadrži 2 stvari, 43 00:01:45,520 --> 00:01:47,280 cijeli pohraniti zove 'val' 44 00:01:47,280 --> 00:01:50,460 i veza na sljedeći čvor na popisu 45 00:01:50,460 --> 00:01:52,990 koje predstavljaju kao pokazivač zove 'sljedeći. " 46 00:01:54,120 --> 00:01:56,780 Na taj način, možemo pratiti cijeli popis 47 00:01:56,780 --> 00:01:58,790 sa samo jednim pokazivač na prvi čvor, 48 00:01:58,790 --> 00:02:01,270 i onda možemo slijediti sljedećoj pokazivače 49 00:02:01,270 --> 00:02:03,130 na drugi čvor, 50 00:02:03,130 --> 00:02:05,280 do 3. čvor, 51 00:02:05,280 --> 00:02:07,000 na 4. čvor, 52 00:02:07,000 --> 00:02:09,889 i tako dalje, dok ne dođemo do kraja popisa. 53 00:02:10,520 --> 00:02:12,210 >> Možda ćete biti u mogućnosti vidjeti jedan prednost to ima 54 00:02:12,210 --> 00:02:14,490 preko statičkog polja strukture - s povezan popisu, 55 00:02:14,490 --> 00:02:16,450 ne trebamo veliki komad memorije uopce. 56 00:02:17,400 --> 00:02:20,530 Na 1. čvor liste mogao živjeti na tom mjestu u memoriji, 57 00:02:20,530 --> 00:02:23,160 a drugi čvor mogao biti skroz ovamo. 58 00:02:23,160 --> 00:02:25,780 Možemo doći do svih čvorova, bez obzira gdje se u memoriji su, 59 00:02:25,780 --> 00:02:28,890 jer počevši od 1. čvora, svaki čvor je sljedeći pokazivač 60 00:02:28,890 --> 00:02:31,700 nam govori točno gdje ići sljedeći. 61 00:02:31,700 --> 00:02:33,670 >> Osim toga, mi nemamo za reći up front 62 00:02:33,670 --> 00:02:36,740 koliko je velik povezani popis će biti način radimo s statičkih polja, 63 00:02:36,740 --> 00:02:39,060 jer možemo držati dodajući čvorova na popis 64 00:02:39,060 --> 00:02:42,600 dokle god postoji prostor negdje u memoriji za nove čvorova. 65 00:02:42,600 --> 00:02:45,370 Stoga, povezane liste su lako promijeniti veličinu dinamički. 66 00:02:45,370 --> 00:02:47,950 Recimo, kasnije u programu moramo dodati više čvorova 67 00:02:47,950 --> 00:02:49,350 u našem popisu. 68 00:02:49,350 --> 00:02:51,480 Da biste umetnuli novi čvor na našem popisu u letu, 69 00:02:51,480 --> 00:02:53,740 sve što morate učiniti je alocirati memoriju za taj čvor, 70 00:02:53,740 --> 00:02:55,630 buć u podatkovnom vrijednosti, 71 00:02:55,630 --> 00:02:59,070 i onda ga na mjesto gdje želimo podešavanjem odgovarajuće naputke. 72 00:02:59,070 --> 00:03:02,310 >> Na primjer, ako smo htjeli da se čvor između 73 00:03:02,310 --> 00:03:04,020 2. i 3. čvorovi popisu, 74 00:03:04,020 --> 00:03:06,800  ne bismo imali da se presele drugi ili treći čvorova na sve. 75 00:03:06,800 --> 00:03:09,190 Reci mi umetanjem ovaj crveni čvor. 76 00:03:09,190 --> 00:03:12,890 Sve ćemo morati učiniti je postaviti novog čvora sljedeći pokazivač 77 00:03:12,890 --> 00:03:14,870 ukazati na treći čvor 78 00:03:14,870 --> 00:03:18,580 a zatim dobitak drugi čvora sljedeći pokazivač 79 00:03:18,580 --> 00:03:20,980 ukazati na našoj novi čvor. 80 00:03:22,340 --> 00:03:24,370 Dakle, možemo promijeniti veličinu naše liste na letu 81 00:03:24,370 --> 00:03:26,090 jer naše računalo ne oslanjaju na indeksiranje, 82 00:03:26,090 --> 00:03:28,990 nego na povezivanje pomoću pokazivača ih pohraniti. 83 00:03:29,120 --> 00:03:31,600 >> Međutim, nedostatak povezani popisi 84 00:03:31,600 --> 00:03:33,370 je da, za razliku od statičnog polja, 85 00:03:33,370 --> 00:03:36,690 računalo ne može samo skočiti na sredini popisa. 86 00:03:38,040 --> 00:03:40,780 Budući da računalo mora posjetiti svaki čvor u povezane liste 87 00:03:40,780 --> 00:03:42,330 doći do sljedeću, 88 00:03:42,330 --> 00:03:44,770 to će trebati više vremena za pronaći određeni čvor 89 00:03:44,770 --> 00:03:46,400 nego što bi u polju. 90 00:03:46,400 --> 00:03:48,660 Prijeći cijeli popis treba vremena proporcionalna 91 00:03:48,660 --> 00:03:50,580 na duljinu popisa, 92 00:03:50,580 --> 00:03:54,630 ili O (n) u asimptotska zapis. 93 00:03:54,630 --> 00:03:56,510 U prosjeku, dosegnuvši bilo čvor 94 00:03:56,510 --> 00:03:58,800 Također je potrebno vrijeme proporcionalna n. 95 00:03:58,800 --> 00:04:00,700 >> Sada, neka je zapravo napisati neki kod 96 00:04:00,700 --> 00:04:02,000 da radi s povezanim listama. 97 00:04:02,000 --> 00:04:04,220 Recimo želimo povezane popis brojeva. 98 00:04:04,220 --> 00:04:06,140 Mi može predstavljati čvor u našem popisu ponovno 99 00:04:06,140 --> 00:04:08,340 kao struct s 2 polja, 100 00:04:08,340 --> 00:04:10,750 cjelobrojna vrijednost zove 'val' 101 00:04:10,750 --> 00:04:13,490 i uz pokazivač na sljedeći čvor popisa. 102 00:04:13,490 --> 00:04:15,660 Pa, čini se jednostavna. 103 00:04:15,660 --> 00:04:17,220 >> Recimo da želimo napisati funkciju 104 00:04:17,220 --> 00:04:19,329 koji prolazi popisa i ispisuje 105 00:04:19,329 --> 00:04:22,150 vrijednost pohranjena u posljednjem čvoru liste. 106 00:04:22,150 --> 00:04:24,850 Pa, to znači da ćemo morati proći sve čvorove u popisu 107 00:04:24,850 --> 00:04:27,310 pronaći zadnji, ali budući da nismo dodavanjem 108 00:04:27,310 --> 00:04:29,250 ili brisanje ništa, ne želimo mijenjati 109 00:04:29,250 --> 00:04:32,210 unutarnje ustrojstvo sljedećih upućuje na popisu. 110 00:04:32,210 --> 00:04:34,790 >> Dakle, morat ćemo pokazivač posebno za obuhvaćanje 111 00:04:34,790 --> 00:04:36,940 koje ćemo nazvati "robot". 112 00:04:36,940 --> 00:04:38,870 To će puzati kroz sve elemente na popisu 113 00:04:38,870 --> 00:04:41,190 slijedeći lanac idućih upućuje. 114 00:04:41,190 --> 00:04:43,750 Svi smo pohranjena je pokazivač na prvi čvor, 115 00:04:43,750 --> 00:04:45,730 ili 'glava' popisa. 116 00:04:45,730 --> 00:04:47,370 Voditelj ukazuje na prvi čvor. 117 00:04:47,370 --> 00:04:49,120 To je tipa pokazivač do čvora. 118 00:04:49,120 --> 00:04:51,280 >> Da biste dobili stvarni prvi čvor u popisu, 119 00:04:51,280 --> 00:04:53,250 moramo dereference ovaj pokazivač, 120 00:04:53,250 --> 00:04:55,100 ali prije nego što ga možemo dereference, trebamo provjeriti 121 00:04:55,100 --> 00:04:57,180 ako pokazivač null prvi. 122 00:04:57,180 --> 00:04:59,190 Ako je nula, popis je prazan, 123 00:04:59,190 --> 00:05:01,320 a mi bi trebali ispisati poruku da je, jer je popis prazan, 124 00:05:01,320 --> 00:05:03,250 ne postoji zadnja čvor. 125 00:05:03,250 --> 00:05:05,190 No, recimo da taj popis nije prazna. 126 00:05:05,190 --> 00:05:08,340 Ako nije, onda bismo trebali puzati kroz cijeli popis 127 00:05:08,340 --> 00:05:10,440 dok ne dođemo do posljednjeg čvora popisa, 128 00:05:10,440 --> 00:05:13,030 i kako možemo reći ako gledamo na zadnji čvor na popisu? 129 00:05:13,670 --> 00:05:16,660 >> Pa, ako je čvor je sljedeći pokazivač null, 130 00:05:16,660 --> 00:05:18,320 znamo da smo na kraju 131 00:05:18,320 --> 00:05:22,390 budući da je posljednja sljedeći pokazivač ne bi imao sljedeći čvor u popisu da pokazuje. 132 00:05:22,390 --> 00:05:26,590 To je dobra praksa da se uvijek držati zadnji čvor na sljedeći pokazivač pokrenutog na nulu 133 00:05:26,590 --> 00:05:30,800 imati standardizirani imovinu koja nas upozorava kad smo došli do kraja popisa. 134 00:05:30,800 --> 00:05:33,510 >> Dakle, ako je pauk → sljedeća null, 135 00:05:34,120 --> 00:05:38,270 sjetite se da je strelica sintaksa je prečac za dereferencing 136 00:05:38,270 --> 00:05:40,010 pokazivač na struct, a zatim pristupa 137 00:05:40,010 --> 00:05:42,510 njegov sljedeći polje ekvivalent nespretan: 138 00:05:42,510 --> 00:05:48,750 (* Pauk). Sljedeći. 139 00:05:49,820 --> 00:05:51,260 Nakon što smo našli zadnji čvor, 140 00:05:51,260 --> 00:05:53,830 želimo ispisati indeksiranje → Val, 141 00:05:53,830 --> 00:05:55,000 vrijednost u trenutnom čvoru 142 00:05:55,000 --> 00:05:57,130 što znamo je posljednji. 143 00:05:57,130 --> 00:05:59,740 Inače, ako još nismo u posljednji čvor u popisu, 144 00:05:59,740 --> 00:06:02,340 moramo prijeći na sljedeći čvor u popisu 145 00:06:02,340 --> 00:06:04,750 i provjerite je li da je zadnji. 146 00:06:04,750 --> 00:06:07,010 Da biste to učinili, mi samo postaviti pauku pokazivač 147 00:06:07,010 --> 00:06:09,840 ukazati na tekuće čvora sljedeću vrijednosti, 148 00:06:09,840 --> 00:06:11,680 to je, sljedeći čvor u popisu. 149 00:06:11,680 --> 00:06:13,030 To se postiže postavljanjem 150 00:06:13,030 --> 00:06:15,280 pauk pauk = → sljedeća. 151 00:06:16,050 --> 00:06:18,960 Onda smo ponoviti ovaj postupak, s petlje za primjer, 152 00:06:18,960 --> 00:06:20,960 dok ne nađemo zadnji čvor. 153 00:06:20,960 --> 00:06:23,150 Tako, na primjer, ako je pauk je pokazujući na glavi, 154 00:06:24,050 --> 00:06:27,710 postavili smo indeksiranje ukazati na crawler → Next, 155 00:06:27,710 --> 00:06:30,960 koji je isti kao sljedeći području 1. čvora. 156 00:06:30,960 --> 00:06:33,620 Dakle, sada pauku je pokazujući na drugi čvor, 157 00:06:33,620 --> 00:06:35,480 i, opet, mi ponoviti ovo s petlje, 158 00:06:37,220 --> 00:06:40,610 dok smo našli zadnji čvor, koji je, 159 00:06:40,610 --> 00:06:43,640 gdje je čvor je sljedeći pokazivač pokazuje na nulu. 160 00:06:43,640 --> 00:06:45,070 I tu smo ga, 161 00:06:45,070 --> 00:06:47,620 pronašli smo zadnji čvor na popisu, i ispisati svoju vrijednost, 162 00:06:47,620 --> 00:06:50,800 mi samo koristiti indeksiranje → Val. 163 00:06:50,800 --> 00:06:53,130 >> Poprijeko i nije tako loše, ali što je s umetanjem? 164 00:06:53,130 --> 00:06:56,290 Recimo da želimo umetnuti cijeli u 4. poziciju 165 00:06:56,290 --> 00:06:58,040 u integer popisu. 166 00:06:58,040 --> 00:07:01,280 To je između tekućih 3. i 4. čvorova. 167 00:07:01,280 --> 00:07:03,760 Opet, moramo proći popis samo 168 00:07:03,760 --> 00:07:06,520 doći do 3. element, jedan smo umetanja nakon. 169 00:07:06,520 --> 00:07:09,300 Dakle, možemo stvoriti pokazivač alata za indeksiranje ponovno prošli popis, 170 00:07:09,300 --> 00:07:11,400 provjerite je li naša glava pokazivač null, 171 00:07:11,400 --> 00:07:14,810 a ako to nije, ističu pauku pokazivač na glavnom čvoru. 172 00:07:16,880 --> 00:07:18,060 Dakle, mi smo na prvi element. 173 00:07:18,060 --> 00:07:21,020 Moramo ići naprijed dva više elemenata prije možemo ubaciti, 174 00:07:21,020 --> 00:07:23,390 tako da možemo koristiti za petlju 175 00:07:23,390 --> 00:07:26,430 int i = 1; ja <3; i + + 176 00:07:26,430 --> 00:07:28,590 iu svakoj iteraciju petlje, 177 00:07:28,590 --> 00:07:31,540 unaprijediti našu pokazivač indeksiranje naprijed jedan čvor 178 00:07:31,540 --> 00:07:34,570 ako se provjerom trenutnog čvora sljedeće polje null, 179 00:07:34,570 --> 00:07:37,550 a ako to nije, pomaknite pokazivač naš alat za indeksiranje na sljedeći čvor 180 00:07:37,550 --> 00:07:41,810 postavljanjem je jednak struji čvora sljedeći pointer. 181 00:07:41,810 --> 00:07:45,210 Dakle, budući da naša za petlje kaže da to učini 182 00:07:45,210 --> 00:07:47,550 dva puta, 183 00:07:49,610 --> 00:07:51,190 dosegli smo treći čvor, 184 00:07:51,190 --> 00:07:53,110 i jednom pauku pokazivač dosegla čvor nakon 185 00:07:53,110 --> 00:07:55,270 koji želimo umetnuti našu novu cijeli, 186 00:07:55,270 --> 00:07:57,050 kako mi zapravo obaviti umetanjem? 187 00:07:57,050 --> 00:07:59,440 >> Pa, naš novi cijeli mora biti umetnuta u popisu 188 00:07:59,440 --> 00:08:01,250 kao dio svoje vlastite čvor struct, 189 00:08:01,250 --> 00:08:03,140 jer ovo je stvarno slijed čvorova. 190 00:08:03,140 --> 00:08:05,690 Dakle, ajmo napraviti novi pokazivač na čvor 191 00:08:05,690 --> 00:08:08,910 pod nazivom 'new_node' 192 00:08:08,910 --> 00:08:11,800 i postaviti ga da ukažu na spomen da smo sada izdvojiti 193 00:08:11,800 --> 00:08:14,270 na hrpi za čvor sama, 194 00:08:14,270 --> 00:08:16,000 i koliko memorije trebamo izdvojiti? 195 00:08:16,000 --> 00:08:18,250 Pa, veličina čvora, 196 00:08:20,450 --> 00:08:23,410 i želimo postaviti svoj val polje za cijeli koji želimo umetnuti. 197 00:08:23,410 --> 00:08:25,590 Recimo, šest. 198 00:08:25,590 --> 00:08:27,710 Sada, čvor sadrži naš cjelobrojne vrijednosti. 199 00:08:27,710 --> 00:08:30,650 To je također dobra praksa da inicijalizirati novog čvora sljedeći polje 200 00:08:30,650 --> 00:08:33,690 ukazati na nulu, 201 00:08:33,690 --> 00:08:35,080 ali što sada? 202 00:08:35,080 --> 00:08:37,179 >> Moramo promijeniti unutarnju strukturu popisa 203 00:08:37,179 --> 00:08:40,409 i sljedeći pokazivači sadržane u popisu je postojeća 204 00:08:40,409 --> 00:08:42,950 3. i 4. čvorovi. 205 00:08:42,950 --> 00:08:46,560 Budući da su sljedeći pokazivači odrediti redoslijed na popisu, 206 00:08:46,560 --> 00:08:48,650 a budući da smo umetanjem naš novi čvor 207 00:08:48,650 --> 00:08:50,510 desno u sredini popisa, 208 00:08:50,510 --> 00:08:52,010 to može biti malo zeznuto. 209 00:08:52,010 --> 00:08:54,250 To je zato što, ne zaboravite, naša računalo 210 00:08:54,250 --> 00:08:56,250 samo zna mjesto čvorova na popisu 211 00:08:56,250 --> 00:09:00,400 zbog sljedećih upućuje pohranjenih u prethodnim čvorovima. 212 00:09:00,400 --> 00:09:03,940 Dakle, ako mi ikada izgubila pojam o bilo kojem od tih mjesta, 213 00:09:03,940 --> 00:09:06,860 recimo promjenom jedne od sljedećih upućuje na našem popisu, 214 00:09:06,860 --> 00:09:09,880 na primjer, reći da smo promijenili 215 00:09:09,880 --> 00:09:12,920 3. čvora sljedeće polje 216 00:09:12,920 --> 00:09:15,610 ukazati na neke čvoru ovamo. 217 00:09:15,610 --> 00:09:17,920 Mi bi se od sreće, jer mi ne bi 218 00:09:17,920 --> 00:09:20,940 imaju ikakvu ideju gdje pronaći ostatak popisa, 219 00:09:20,940 --> 00:09:23,070 i to je očito jako loše. 220 00:09:23,070 --> 00:09:25,080 Dakle, moramo biti jako oprezni o nalogu 221 00:09:25,080 --> 00:09:28,360 u kojem smo manipulirati naše sljedećoj upućuje tijekom umetanja. 222 00:09:28,360 --> 00:09:30,540 >> Dakle, pojednostaviti ovaj, ajmo reći da 223 00:09:30,540 --> 00:09:32,220 naši prvi četiri čvorovi 224 00:09:32,220 --> 00:09:36,200 su pozvani A, B, C i D, sa strelice predstavljaju lanac pokazivače 225 00:09:36,200 --> 00:09:38,070 koje povezuju čvorove. 226 00:09:38,070 --> 00:09:40,050 Dakle, trebamo umetnuti naš novi čvor 227 00:09:40,050 --> 00:09:42,070 između čvorova C i D. 228 00:09:42,070 --> 00:09:45,060 To je važno da to učinite u pravom redoslijedu, a ja ću vam pokazati zašto. 229 00:09:45,060 --> 00:09:47,500 >> Pogledajmo na pogrešan način to učiniti prvi. 230 00:09:47,500 --> 00:09:49,490 Hej, znamo da je novi čvor mora doći odmah nakon C, 231 00:09:49,490 --> 00:09:51,910 pa neka je postavljen C je sljedeći pokazivač 232 00:09:51,910 --> 00:09:54,700 ukazati na new_node. 233 00:09:56,530 --> 00:09:59,180 U redu, čini se ok, samo moramo završiti do sada po 234 00:09:59,180 --> 00:10:01,580 izradu novog čvora pokraj pokazivača točku D, 235 00:10:01,580 --> 00:10:03,250 ali čekaj, kako mi možemo učiniti? 236 00:10:03,250 --> 00:10:05,170 Jedina stvar koja bi nas mogla reći gdje je D bio, 237 00:10:05,170 --> 00:10:07,630 je sljedeći pokazivač prethodno pohranjena u C, 238 00:10:07,630 --> 00:10:09,870 ali mi jednostavno rewrote da pokazivač 239 00:10:09,870 --> 00:10:11,170 ukazati na novi čvor, 240 00:10:11,170 --> 00:10:14,230 tako da mi više ne imati bilo koji pojma gdje je D u memoriju, 241 00:10:14,230 --> 00:10:17,020 i izgubili smo ostatak popisa. 242 00:10:17,020 --> 00:10:19,000 Nije dobro na sve. 243 00:10:19,000 --> 00:10:21,090 >> Dakle, kako mi to pravo? 244 00:10:22,360 --> 00:10:25,090 Prvo, ukazati novog čvora sljedeći pokazivač na D. 245 00:10:26,170 --> 00:10:28,990 Sada, kako nova čvora i Kasiopejci sljedeći pokazivači 246 00:10:28,990 --> 00:10:30,660 ukazuju na istom čvoru, D, 247 00:10:30,660 --> 00:10:32,290 ali to je u redu. 248 00:10:32,290 --> 00:10:35,680 Sada možemo točka C je sljedeći pokazivač na novi čvor. 249 00:10:37,450 --> 00:10:39,670 Dakle, mi smo to učinili bez gubljenja podataka. 250 00:10:39,670 --> 00:10:42,280 U kodu, C je trenutni čvor 251 00:10:42,280 --> 00:10:45,540 da obuhvaćanje pokazivač robot pokazuje da, 252 00:10:45,540 --> 00:10:50,400 i D predstavljaju čvor istaknuo da u trenutnoj čvora sljedećem polju, 253 00:10:50,400 --> 00:10:52,600 ili gusjenicama → sljedeća. 254 00:10:52,600 --> 00:10:55,460 Dakle, prvo smo postavili novog čvora sljedeći pokazivač 255 00:10:55,460 --> 00:10:57,370 ukazati na crawler → Next, 256 00:10:57,370 --> 00:11:00,880 Isto tako mi je rekao new_node je sljedeći pointer treba 257 00:11:00,880 --> 00:11:02,780 ukazati na D na slici. 258 00:11:02,780 --> 00:11:04,540 Zatim, možemo postaviti trenutnog čvora sljedeći pokazivač 259 00:11:04,540 --> 00:11:06,330 našem novom čvoru, 260 00:11:06,330 --> 00:11:10,980 baš kao što smo morali čekati do točke C do new_node u crtežu. 261 00:11:10,980 --> 00:11:12,250 Sada je sve u redu, i nismo izgubili 262 00:11:12,250 --> 00:11:14,490 praćenje svih podataka, i bili smo u mogućnosti da samo 263 00:11:14,490 --> 00:11:16,200 držati naš novi čvor u sredini popisa 264 00:11:16,200 --> 00:11:19,330 bez obnovi cijelu stvar ili čak prebacivanjem nikakve elemente 265 00:11:19,330 --> 00:11:22,490 način na koji smo morali s fiksne duljine niza. 266 00:11:22,490 --> 00:11:26,020 >> Dakle, povezane liste su osnovne, ali važna, dinamična struktura podataka 267 00:11:26,020 --> 00:11:29,080 koji imaju svoje prednosti i nedostatke 268 00:11:29,080 --> 00:11:31,260 u odnosu na poljima i drugih struktura podataka, 269 00:11:31,260 --> 00:11:33,350 i kao što je često slučaj u računalnoj znanosti, 270 00:11:33,350 --> 00:11:35,640 važno je znati kada koristiti svaki alat, 271 00:11:35,640 --> 00:11:37,960 tako da možete odabrati pravi alat za pravi posao. 272 00:11:37,960 --> 00:11:40,060 >> Za više praksi, pokušajte pisanja funkcije 273 00:11:40,060 --> 00:11:42,080 brisanje čvorova iz povezane liste - 274 00:11:42,080 --> 00:11:44,050 zapamtite biti oprezni o redoslijedu kojim ste preinake 275 00:11:44,050 --> 00:11:47,430 Vaši sljedeći pokazivači kako bi se osiguralo da se ne izgubite komad popisu - 276 00:11:47,430 --> 00:11:50,200 ili funkcija računati čvorove u povezane liste, 277 00:11:50,200 --> 00:11:53,280 ili zabavno jedan, obrnuti redoslijed svih čvorova u povezane liste. 278 00:11:53,280 --> 00:11:56,090 >> Moje ime je Jackson Steinkamp, ​​ovo je CS50.