1 00:00:00,000 --> 00:00:01,000 [Powered by Google Translate] [6. dio] [udobnije] 2 00:00:01,000 --> 00:00:04,000 [Rob Bowden] [Sveučilište Harvard] 3 00:00:04,000 --> 00:00:09,000 [Ovo je CS50.] [CS50.TV] 4 00:00:09,000 --> 00:00:11,000 >> Možemo krenuti na našem dijelu pitanja. 5 00:00:11,000 --> 00:00:17,000 Poslala sam URL za prostor prije. 6 00:00:17,000 --> 00:00:22,000 Početak dijelu pitanja kažu- 7 00:00:22,000 --> 00:00:26,000 očito nisam posve unsick-je vrlo jednostavno pitanje 8 00:00:26,000 --> 00:00:28,000 samo ono što je valgrind? 9 00:00:28,000 --> 00:00:30,000 Što valgrind učiniti? 10 00:00:30,000 --> 00:00:34,000 Svatko tko želi reći ono što valgrind ne? 11 00:00:34,000 --> 00:00:36,000 [Studentski] Provjerava memory leaks. 12 00:00:36,000 --> 00:00:41,000 Da, valgrind je opća memorija provjeru. 13 00:00:41,000 --> 00:00:44,000 To je, na kraju, govori vam ako imate bilo kakve memory leaks, 14 00:00:44,000 --> 00:00:49,000 koja je uglavnom ono što smo ga koristiti za, jer ako želite 15 00:00:49,000 --> 00:00:54,000 činiti dobro u problematiku set ili ako želite 16 00:00:54,000 --> 00:00:59,000 doći na velikom brodu, morate imati nikakvih memory leaks god, 17 00:00:59,000 --> 00:01:01,000 te u slučaju da imate memorijsku curenje koje ne možete naći, 18 00:01:01,000 --> 00:01:04,000 Također imajte na umu da kad god otvorite datoteku 19 00:01:04,000 --> 00:01:07,000 a ako ga ne zatvorite, to je gubljenje memorije. 20 00:01:07,000 --> 00:01:10,000 >> Puno ljudi koji su u potrazi za nekim čvor da oni ne oslobađaju 21 00:01:10,000 --> 00:01:15,000 kad stvarno, nisu zatvorili rječnika u prvom koraku. 22 00:01:15,000 --> 00:01:19,000 Također će vas obavijestiti ako imate bilo nevažeća čita ili piše, 23 00:01:19,000 --> 00:01:22,000 što znači da ako i pokušati postaviti vrijednost 24 00:01:22,000 --> 00:01:26,000 to je izvan kraja hrpi i to se ne dogodi da SEG krivnjom 25 00:01:26,000 --> 00:01:30,000 ali valgrind ga hvata, kao što ne bi zapravo trebala biti pisanje tamo, 26 00:01:30,000 --> 00:01:33,000 i tako da definitivno ne bi trebali imati bilo koji od onih bilo. 27 00:01:33,000 --> 00:01:38,000 Kako koristiti valgrind? 28 00:01:38,000 --> 00:01:42,000 Kako koristiti valgrind? 29 00:01:42,000 --> 00:01:45,000 >> To je opće pitanje 30 00:01:45,000 --> 00:01:49,000 vrsta pokrenite ga i pogledati na izlazu. 31 00:01:49,000 --> 00:01:51,000 Izlaz se opteretimo puno vremena. 32 00:01:51,000 --> 00:01:54,000 Tu je i zabava pogreške gdje, ako imate neke strašno krivu stvar 33 00:01:54,000 --> 00:01:59,000 događa u petlji, onda će na kraju reći, "Put previše pogrešaka. 34 00:01:59,000 --> 00:02:03,000 Ja ću prestati računajući sada. " 35 00:02:03,000 --> 00:02:08,000 To je u osnovi tekstualni izlaz da morate analizirati. 36 00:02:08,000 --> 00:02:13,000 Na kraju, to će vam reći nikakve memory leaks koje imate, 37 00:02:13,000 --> 00:02:16,000 koliko blokova, što može biti korisno jer 38 00:02:16,000 --> 00:02:20,000 ako je jedan blok unfreed, onda je obično lakše pronaći 39 00:02:20,000 --> 00:02:23,000 od 1.000 blokovi unfreed. 40 00:02:23,000 --> 00:02:26,000 1000 blokira unfreed vjerojatno znači da ne oslobađaju 41 00:02:26,000 --> 00:02:30,000 Vaši povezani popisi primjereno ili nešto. 42 00:02:30,000 --> 00:02:32,000 To je valgrind. 43 00:02:32,000 --> 00:02:35,000 >> Sada imamo dio pitanja, 44 00:02:35,000 --> 00:02:38,000 koji vam ne treba preuzeti. 45 00:02:38,000 --> 00:02:41,000 Možete kliknuti na ime moje te ih podići u prostoru. 46 00:02:41,000 --> 00:02:44,000 Sada kliknite na mene. 47 00:02:44,000 --> 00:02:46,000 Revizija 1 će biti stog, koji radimo na prvom mjestu. 48 00:02:46,000 --> 00:02:55,000 Revizija 2 će biti red, a Revizija 3 će biti pojedinačno povezani popis. 49 00:02:55,000 --> 00:02:58,000 Počevši s našim stog. 50 00:02:58,000 --> 00:03:02,000 Kao što kaže ovdje, stog je jedna od najosnovnijih, 51 00:03:02,000 --> 00:03:07,000 temeljne strukture podataka računalne znanosti. 52 00:03:07,000 --> 00:03:11,000 Vrlo prototipski primjer je 53 00:03:11,000 --> 00:03:13,000 stog ladica u blagovaonici. 54 00:03:13,000 --> 00:03:16,000 To je u osnovi kad god se uvode na hrpu, 55 00:03:16,000 --> 00:03:20,000 netko će reći: "Oh, kao hrpom ladica." 56 00:03:20,000 --> 00:03:22,000 Vi stog ladice gore. 57 00:03:22,000 --> 00:03:24,000 Onda kada idete na izvući ladicu, 58 00:03:24,000 --> 00:03:31,000 prva ladica da je dobivanje povukao je posljednji onaj koji je stavljen na stog. 59 00:03:31,000 --> 00:03:34,000 Stog je također poput njega kaže ovdje- 60 00:03:34,000 --> 00:03:37,000 imamo segment memorije zove stog. 61 00:03:37,000 --> 00:03:40,000 A zašto se to zove stog? 62 00:03:40,000 --> 00:03:42,000 >> Jer kao strukturu stog podataka, 63 00:03:42,000 --> 00:03:46,000 gura i pops stog okvire na stog, 64 00:03:46,000 --> 00:03:53,000 gdje stog okviri su kao posebne pozivu funkcije. 65 00:03:53,000 --> 00:03:57,000 I kao stog, uvijek ćete morati vratiti 66 00:03:57,000 --> 00:04:03,000 od funkcija poziva prije nego što možete spustiti u niže stog okvire opet. 67 00:04:03,000 --> 00:04:08,000 Vi ne možete imati glavnu poziva foo poziva bar i bar povratak na glavni izravno. 68 00:04:08,000 --> 00:04:14,000 Uvijek je dobio slijediti ispravan snop gura i iskakanje. 69 00:04:14,000 --> 00:04:18,000 Dvije operacije, kao što sam rekao, su guranje i pop. 70 00:04:18,000 --> 00:04:20,000 Oni su univerzalni pojmovi. 71 00:04:20,000 --> 00:04:26,000 Ti bi trebao znati gurati i pop u smislu hrpe bez obzira što. 72 00:04:26,000 --> 00:04:28,000 Vidjet ćemo redovi su vrste drugačiji. 73 00:04:28,000 --> 00:04:32,000 To ne stvarno imati univerzalni pojam, ali guranje i pop su univerzalni za hrpe. 74 00:04:32,000 --> 00:04:34,000 Push je samo staviti na stog. 75 00:04:34,000 --> 00:04:37,000 Pop je skinuti hrpu. 76 00:04:37,000 --> 00:04:43,000 I ovdje vidimo imamo typedef struct stog, 77 00:04:43,000 --> 00:04:46,000 tako da imamo char ** konce. 78 00:04:46,000 --> 00:04:51,000 Nemojte se bojati bilo kakvim **. 79 00:04:51,000 --> 00:04:54,000 To će završiti kao niz stringova 80 00:04:54,000 --> 00:04:58,000 ili niz strelicama znakova, gdje 81 00:04:58,000 --> 00:05:00,000 upućuje na likovima imaju tendenciju da se žice. 82 00:05:00,000 --> 00:05:05,000 To ne mora biti nizovi, ali ovdje, oni će biti nizovi. 83 00:05:05,000 --> 00:05:08,000 >> Imamo niz žice. 84 00:05:08,000 --> 00:05:14,000 Imamo veličine, što predstavlja koliko elementi su trenutno na stog, 85 00:05:14,000 --> 00:05:19,000 i onda imamo kapacitet, koji je koliko elementi mogu biti na stog. 86 00:05:19,000 --> 00:05:22,000 Kapacitet bi trebao krenuti kao nešto veće od 1, 87 00:05:22,000 --> 00:05:27,000 ali veličina će krenuti kao 0. 88 00:05:27,000 --> 00:05:36,000 Sada, u osnovi postoje tri različita načina na koje se možete sjetiti hrpu. 89 00:05:36,000 --> 00:05:39,000 Pa, tu su vjerojatno i više, ali su dva glavna načina su 90 00:05:39,000 --> 00:05:43,000 možete ga realizirati pomoću niz, ili ga možete provesti pomoću povezanog popisa. 91 00:05:43,000 --> 00:05:48,000 Povezani su popisi vrsta trivijalno napraviti hrpe od. 92 00:05:48,000 --> 00:05:51,000 To je vrlo lako napraviti hrpu koristeći povezane liste, 93 00:05:51,000 --> 00:05:55,000 pa evo, idemo napraviti stog pomoću polja, 94 00:05:55,000 --> 00:05:59,000 , a zatim pomoću polja, tu je i dva načina na koje možete razmišljati o tome. 95 00:05:59,000 --> 00:06:01,000 Prije, kad sam rekao da ćemo imati kapacitet za stog, 96 00:06:01,000 --> 00:06:04,000 tako da možemo stati element na stog. 97 00:06:04,000 --> 00:06:09,000 >> Jedan način bi se moglo dogoditi je čim pogodio 10 elemenata, onda ste gotovi. 98 00:06:09,000 --> 00:06:13,000 Možda znate da postoji gornja granica od 10 stvari na svijetu 99 00:06:13,000 --> 00:06:16,000 da nikada nećete imati više od 10 stvari na hrpu, 100 00:06:16,000 --> 00:06:20,000 u kojem slučaju možete imati gornju granicu o veličini vašeg stog. 101 00:06:20,000 --> 00:06:23,000 Ili ste mogli imati svoj stack biti bezgranični, 102 00:06:23,000 --> 00:06:27,000 ali ako radite niz, to znači da svaki put kada pogodak 10 elemenata, 103 00:06:27,000 --> 00:06:29,000 onda ćeš morati rasti do 20 elemenata, a kada hit 20 elemenata, 104 00:06:29,000 --> 00:06:33,000 ćete morati razviti svoje niz od 30 elemenata ili 40 elemenata. 105 00:06:33,000 --> 00:06:37,000 Ti si idući u morati povećati kapacitete, što je ono što ćemo učiniti ovdje. 106 00:06:37,000 --> 00:06:40,000 Svaki put kad smo postići maksimalnu veličinu našeg dimnjaka, 107 00:06:40,000 --> 00:06:46,000 kad smo gurnuti nešto drugo, mi ćemo morati povećati kapacitete. 108 00:06:46,000 --> 00:06:50,000 Evo, mi smo pritisak proglašen bool pritiskom (char * str). 109 00:06:50,000 --> 00:06:54,000 Char * str je niz koji smo pritom na stog, 110 00:06:54,000 --> 00:06:58,000 i bool samo kaže da li smo uspjeli ili nije. 111 00:06:58,000 --> 00:07:00,000 >> Kako možemo uspjeti? 112 00:07:00,000 --> 00:07:04,000 Što je samo okolnost da se možete sjetiti 113 00:07:04,000 --> 00:07:07,000 gdje smo trebale bi se vratiti lažno? 114 00:07:07,000 --> 00:07:09,000 Da. 115 00:07:09,000 --> 00:07:12,000 [Studentski] Ako je puna, a mi smo pomoću omeđeno provedbu. 116 00:07:12,000 --> 00:07:17,000 Da, pa kako smo definirali-on je odgovorio 117 00:07:17,000 --> 00:07:23,000 ako je puna, a mi smo pomoću omeđen provedbu. 118 00:07:23,000 --> 00:07:26,000 Tada ćemo definitivno vratiti false. 119 00:07:26,000 --> 00:07:31,000 Čim smo pogodak 10 stvari u polju, ne možemo stati 11, tako da smo se vratili lažna. 120 00:07:31,000 --> 00:07:32,000 Što ako je neograničeno? Da. 121 00:07:32,000 --> 00:07:38,000 Ako ne možete proširiti lepezu iz nekog razloga. 122 00:07:38,000 --> 00:07:43,000 Da, tako je memorija ograničen resurs, 123 00:07:43,000 --> 00:07:51,000 i na kraju, ako ćemo gurati stvari na hrpu iznova i iznova, 124 00:07:51,000 --> 00:07:54,000 idemo pokušati izdvojiti veću lepezu da stane 125 00:07:54,000 --> 00:07:59,000 veći kapacitet, a malloc ili što god koristite će se vratiti false. 126 00:07:59,000 --> 00:08:02,000 Pa, malloc će se vratiti null. 127 00:08:02,000 --> 00:08:05,000 >> Zapamtite, svaki put ste ikada nazvati malloc, te bi trebao biti ček vidjeti ako to 128 00:08:05,000 --> 00:08:12,000 vraća null ili što drugo što je korektnost odbitak. 129 00:08:12,000 --> 00:08:17,000 Budući da želimo imati neograničen stog, 130 00:08:17,000 --> 00:08:21,000 jedini slučaj da ćemo se vratiti lažna je, ako ćemo pokušati 131 00:08:21,000 --> 00:08:26,000 povećati kapacitet i malloc ili što god false. 132 00:08:26,000 --> 00:08:30,000 Zatim pop traje nema argumenata, 133 00:08:30,000 --> 00:08:37,000 i vraća niz koji je na vrhu stoga. 134 00:08:37,000 --> 00:08:41,000 Što god je nedavno gurnuo na stog je ono što pop vraća, 135 00:08:41,000 --> 00:08:44,000 i to također uklanja ga iz dimnjaka. 136 00:08:44,000 --> 00:08:50,000 I primijetiti da se vraća null ako ne postoji ništa na stog. 137 00:08:50,000 --> 00:08:53,000 Uvijek je moguće da stog je prazan. 138 00:08:53,000 --> 00:08:55,000 U Java, ako ste navikli na to, ili drugim jezicima, 139 00:08:55,000 --> 00:09:01,000 pokušavajući pop iz prazne stog može uzrokovati iznimku ili nešto. 140 00:09:01,000 --> 00:09:09,000 >> Ali u C, null je vrsta puno slučajeva kako ćemo obraditi tih problema. 141 00:09:09,000 --> 00:09:13,000 Povratak null kako ćemo značiti da stog je prazan. 142 00:09:13,000 --> 00:09:16,000 Osigurali smo kod koji će testirati vaše stog funkcionalnost, 143 00:09:16,000 --> 00:09:19,000 provoditi gurati i pop. 144 00:09:19,000 --> 00:09:23,000 To neće biti puno koda. 145 00:09:23,000 --> 00:09:40,000 Hoću-zapravo, prije nego što smo to učinili, hint, hint- 146 00:09:40,000 --> 00:09:44,000 ako niste vidjeli, malloc nije jedina funkcija 147 00:09:44,000 --> 00:09:47,000 koje dodjeljuje memoriju na hrpi za vas. 148 00:09:47,000 --> 00:09:51,000 Postoje obitelj alloc funkcija. 149 00:09:51,000 --> 00:09:53,000 Prvi je malloc, koji ste navikli. 150 00:09:53,000 --> 00:09:56,000 Zatim tu je calloc, koja čini istu stvar kao malloc, 151 00:09:56,000 --> 00:09:59,000 ali to će nulu sve za vas. 152 00:09:59,000 --> 00:10:04,000 Ako ste ikada željeli postaviti sve na nulu nakon mallocing nešto 153 00:10:04,000 --> 00:10:06,000 trebali imati samo koristi calloc na prvom mjestu, umjesto pisanja 154 00:10:06,000 --> 00:10:09,000 za petlje na nulu iz cijelog blok memorije. 155 00:10:09,000 --> 00:10:15,000 >> Realloc je kao malloc i ima puno posebnim slučajevima, 156 00:10:15,000 --> 00:10:19,000 ali u osnovi ono što realloc ipak 157 00:10:19,000 --> 00:10:24,000 to traje pokazivač koji su već bili dodijeljeni. 158 00:10:24,000 --> 00:10:27,000 Realloc je funkcija želite biti plaćati pozornost ovdje. 159 00:10:27,000 --> 00:10:31,000 Potrebno je pokazivač koji je već bio vratio iz malloc. 160 00:10:31,000 --> 00:10:35,000 Recimo da zatraži od malloc pokazivač od 10 bajtova. 161 00:10:35,000 --> 00:10:38,000 Onda kasnije ste shvatili ste htjeli 20 bajtova, 162 00:10:38,000 --> 00:10:42,000 tako zoveš realloc na tom pointer s 20 bajtova, 163 00:10:42,000 --> 00:10:47,000 i realloc će automatski kopirati nad svime za vas. 164 00:10:47,000 --> 00:10:51,000 Ako ste upravo zove malloc opet, kao da imam paket od 10 bajtova. 165 00:10:51,000 --> 00:10:53,000 Sada trebam blok 20 bajtova, 166 00:10:53,000 --> 00:10:58,000 pa ako sam malloc 20 bajtova, onda moram ručno kopirati preko 10 bajtova iz prvog stvar 167 00:10:58,000 --> 00:11:01,000 u drugoj stvar, a zatim bez prva stvar. 168 00:11:01,000 --> 00:11:04,000 Realloc će nositi za vas. 169 00:11:04,000 --> 00:11:11,000 >> Obavijest potpis će biti nevažeće *, 170 00:11:11,000 --> 00:11:15,000 koji je samo vraća pokazivač na blok memorije, 171 00:11:15,000 --> 00:11:17,000 onda void * ptr. 172 00:11:17,000 --> 00:11:22,000 Možete misliti void * kao generički pokazivač. 173 00:11:22,000 --> 00:11:27,000 Općenito, nikada se bave void *, 174 00:11:27,000 --> 00:11:30,000 ali malloc se vraća void *, a zatim je to samo koristi kao 175 00:11:30,000 --> 00:11:34,000 ovo je zapravo će biti char *. 176 00:11:34,000 --> 00:11:37,000 Prethodni void * koji je vraćen od strane malloc 177 00:11:37,000 --> 00:11:41,000 sada će biti donesen do realloc, a zatim veličina 178 00:11:41,000 --> 00:11:49,000 je novi broj bajtova koje želite izdvojiti, tako da vaš novi kapaciteti. 179 00:11:49,000 --> 00:11:57,000 Ja ću vam dati par minuta, i to u našem prostoru. 180 00:11:57,000 --> 00:12:02,000 Počnite s jednom reviziji. 181 00:12:16,000 --> 00:12:21,000 Ja ću vas zaustaviti nakon nadamo se o dovoljno vremena za provedbu gurati, 182 00:12:21,000 --> 00:12:24,000 i onda ću vam dati još jednu pauzu za napraviti pop. 183 00:12:24,000 --> 00:12:27,000 No, to stvarno nije toliko kod uopće. 184 00:12:27,000 --> 00:12:35,000 Najviše kod je vjerojatno širi stvari, proširenje kapaciteta. 185 00:12:35,000 --> 00:12:39,000 Ok, nema pritiska da se u potpunosti biti učinjeno, 186 00:12:39,000 --> 00:12:47,000 ali dokle god se osjećate kao da ste na pravom putu, to je dobro. 187 00:12:47,000 --> 00:12:53,000 >> Se bilo tko imati bilo kod oni osjećaju ugodno sa mnom povlačenjem gore? 188 00:12:53,000 --> 00:12:59,000 Da, hoću, ali ne bilo tko imati bilo kod mogu podići? 189 00:12:59,000 --> 00:13:05,000 Ok, možete početi, spasiti ga, bez obzira na to je? 190 00:13:05,000 --> 00:13:09,000 Ja uvijek zaboraviti taj korak. 191 00:13:09,000 --> 00:13:15,000 Ok, gleda pritiskom, 192 00:13:15,000 --> 00:13:18,000 Ne želite da objasni svoj kod? 193 00:13:18,000 --> 00:13:24,000 [Studentski] Prije svega, sam povećao veličinu. 194 00:13:24,000 --> 00:13:28,000 Mislim možda bih trebao imati da-ionako sam povećao veličinu, 195 00:13:28,000 --> 00:13:31,000 i vidim da je to manje od kapaciteta. 196 00:13:31,000 --> 00:13:36,000 A ako je to manje od kapaciteta, sam dodati polje koje već imate. 197 00:13:36,000 --> 00:13:42,000 A ako nije, ja pomnožite kapacitet 2, 198 00:13:42,000 --> 00:13:50,000 i ja preraspodijeliti konce niz na nešto s većim kapacitetom veličine sada. 199 00:13:50,000 --> 00:13:55,000 A onda, ako to ne uspije, kažem korisnika i povratak false, 200 00:13:55,000 --> 00:14:04,000 i ako je to u redu, onda sam stavio tekst u novom mjestu. 201 00:14:04,000 --> 00:14:07,000 >> [Rob B.] Također primijetite da smo koristili lijepu bitovni operator ovdje 202 00:14:07,000 --> 00:14:09,000 kako pomnožiti dva. 203 00:14:09,000 --> 00:14:11,000 Zapamtite, lijevo pomak uvijek će biti pomnožen dva. 204 00:14:11,000 --> 00:14:15,000 Pravo pomak je podijeljena po dva dokle god sjetite se da to znači 205 00:14:15,000 --> 00:14:18,000 podijeliti po dva, kao u cijeli podijeljena dva. 206 00:14:18,000 --> 00:14:20,000 To bi moglo skratiti na jednom ovdje ili ondje. 207 00:14:20,000 --> 00:14:26,000 No, pomak je ostavio jedan uvijek će biti pomnožen 2, 208 00:14:26,000 --> 00:14:32,000 osim ako se prelijevati granice na cijeli broj, a zatim ga neće biti. 209 00:14:32,000 --> 00:14:34,000 Strana komentar. 210 00:14:34,000 --> 00:14:39,000 Volim učiniti-to se neće promijeniti kodiranje bilo koji način, 211 00:14:39,000 --> 00:14:48,000 ali ja bih to učiniti ovako nešto. 212 00:14:48,000 --> 00:14:51,000 To se zapravo događa da bi ga nešto duže. 213 00:15:04,000 --> 00:15:08,000 Možda ovo nije savršena slučaj pokazati, 214 00:15:08,000 --> 00:15:14,000 ali ja bih ga u segmentu tih blokova- 215 00:15:14,000 --> 00:15:17,000 ok, ako je to ako se dogodi, onda ću učiniti nešto, 216 00:15:17,000 --> 00:15:19,000 , a zatim je funkcija učinio. 217 00:15:19,000 --> 00:15:22,000 Ne trebam se onda dođite moje oči skroz funkciji 218 00:15:22,000 --> 00:15:25,000 da vidi što se događa nakon drugog. 219 00:15:25,000 --> 00:15:27,000 To je, ako to, ako se dogodi, onda sam se vratiti. 220 00:15:27,000 --> 00:15:30,000 Ona također ima lijepu dodatnu korist od svega iznad ovog 221 00:15:30,000 --> 00:15:33,000 sada se pomaknuo lijevo jednom. 222 00:15:33,000 --> 00:15:40,000 Ja više ne treba-ako ikad blizini smiješno dugi redovi, 223 00:15:40,000 --> 00:15:45,000 onda one 4 bajta mogu pomoći, ali i više lijevo nešto, 224 00:15:45,000 --> 00:15:48,000 manje osvaja se osjećate ako želite-ok, moram se sjetiti 225 00:15:48,000 --> 00:15:53,000 Ja sam trenutno u while petlji unutar nekog drugog unutrašnjosti za petlje. 226 00:15:53,000 --> 00:15:58,000 Bilo gdje možete to učiniti odmah vratiti, nekako ovako. 227 00:15:58,000 --> 00:16:05,000 To je potpuno opcionalno i ne očekuje se na bilo koji način. 228 00:16:05,000 --> 00:16:12,000 >> [Studentski] Ako postoji veličina - u negativne stanju? 229 00:16:12,000 --> 00:16:19,000 Negativne stanje ovdje se nismo uspjeli realloc, tako da. 230 00:16:19,000 --> 00:16:22,000 Obavijest o tome kako u negativne stanju, vjerojatno, 231 00:16:22,000 --> 00:16:26,000 osim ako smo free stuff kasnije, mi smo uvijek idemo na propast 232 00:16:26,000 --> 00:16:29,000 bez obzira koliko puta ćemo pokušati gurnuti nešto. 233 00:16:29,000 --> 00:16:32,000 Ako ćemo gurati, držimo povećavanjem veličine, 234 00:16:32,000 --> 00:16:36,000 iako mi se ne stavlja ništa na stog. 235 00:16:36,000 --> 00:16:39,000 Obično mi ne povećajte veličinu do 236 00:16:39,000 --> 00:16:43,000 nakon uspješno smo ga stavili na stog. 237 00:16:43,000 --> 00:16:50,000 Mi bi to, recimo, bilo ovdje i ovdje. 238 00:16:50,000 --> 00:16:56,000 I onda, umjesto da se kaže s.size ≤ kapacitet, to je manje od kapaciteta, 239 00:16:56,000 --> 00:17:01,000 samo zato što smo se preselili u kojoj je sve bilo. 240 00:17:01,000 --> 00:17:07,000 >> I zapamtite, jedino mjesto koje bi moglo vratiti false 241 00:17:07,000 --> 00:17:14,000 je ovdje, gdje realloc vratio null, 242 00:17:14,000 --> 00:17:19,000 a ako vam se dogoditi da zapamtite standardnu ​​pogrešku, 243 00:17:19,000 --> 00:17:22,000 možda razmislite ovaj slučaj gdje želite ispisati standardnu ​​pogrešku, 244 00:17:22,000 --> 00:17:26,000 tako fprintf stderr umjesto da samo tiskanje izravno na standardne van. 245 00:17:26,000 --> 00:17:31,000 Opet, to nije očekivanja, ali ako je to pogreška, 246 00:17:31,000 --> 00:17:41,000 upišite printf, onda možda želite da bude ispis na standardnom pogreškom umjesto standardnog van. 247 00:17:41,000 --> 00:17:44,000 >> Svatko ima nešto drugo na bilješku? Da. 248 00:17:44,000 --> 00:17:47,000 [Studentski] Mogu li ići preko [nečujnog]? 249 00:17:47,000 --> 00:17:55,000 [Rob B.] Da, stvarni binariness od njega ili samo što je to? 250 00:17:55,000 --> 00:17:57,000 [Studentski] Pa ste ga pomnožiti sa 2? 251 00:17:57,000 --> 00:17:59,000 [Rob B.] Da, u osnovi. 252 00:17:59,000 --> 00:18:11,000 U binarnom zemlji, mi uvijek imamo niz znamenki. 253 00:18:11,000 --> 00:18:22,000 Pomak ovaj lijevo od 1 Uglavnom umeće ovdje na desnoj strani. 254 00:18:22,000 --> 00:18:25,000 Natrag na to, samo sjećanja da je sve u binarnom 255 00:18:25,000 --> 00:18:28,000 je snaga 2, pa to predstavlja 2 do 0, 256 00:18:28,000 --> 00:18:30,000 to 2 do 1, ova 2 2. 257 00:18:30,000 --> 00:18:33,000 Umetanjem 0 do sada desnoj strani, samo smo pomak sve više. 258 00:18:33,000 --> 00:18:38,000 Ono što se 2 do 0 je sada 2 do 1, je 2 do 2. 259 00:18:38,000 --> 00:18:41,000 Na desnoj strani da smo umetnuta 260 00:18:41,000 --> 00:18:44,000 nužno će biti 0, 261 00:18:44,000 --> 00:18:46,000 što ima smisla. 262 00:18:46,000 --> 00:18:49,000 Ako ste ikada pomnožite broj po dva, to neće završiti čudno, 263 00:18:49,000 --> 00:18:54,000 pa 2 u 0 mjesto treba biti 0, 264 00:18:54,000 --> 00:18:59,000 i to je ono što sam polovina upozorio prije nego što je, ako ti se dogoditi da smjeni 265 00:18:59,000 --> 00:19:01,000 iznad broja bitova u cijeli broj, 266 00:19:01,000 --> 00:19:04,000 onda je ovo jedan će završiti ide off. 267 00:19:04,000 --> 00:19:10,000 To je jedina zadaća ako vam se dogoditi da se bave stvarno velikih kapaciteta. 268 00:19:10,000 --> 00:19:15,000 No, u tom trenutku, onda ste se bave s nizom milijardama stvari, 269 00:19:15,000 --> 00:19:25,000 koji se ne može uklopiti u memoriju svejedno. 270 00:19:25,000 --> 00:19:31,000 >> Sada možemo doći do popa, koji je čak i lakše. 271 00:19:31,000 --> 00:19:36,000 Ti bi mogao to ne sviđa, ako vam se dogoditi da pop hrpu, 272 00:19:36,000 --> 00:19:38,000 a sada ste na pola kapaciteta ponovno. 273 00:19:38,000 --> 00:19:42,000 Ti bi mogao realloc smanjiti količinu memorije imate, 274 00:19:42,000 --> 00:19:47,000 ali ne morate brinuti o tome, tako da samo realloc slučaj će biti 275 00:19:47,000 --> 00:19:50,000 raste memorije, nikada smanjuje memoriju, 276 00:19:50,000 --> 00:19:59,000 koji će napraviti pop super jednostavno. 277 00:19:59,000 --> 00:20:02,000 Sada redovi, koji će biti poput dimnjaka, 278 00:20:02,000 --> 00:20:06,000 ali kako da vam se stvari obrnuta. 279 00:20:06,000 --> 00:20:10,000 Prototipski primjer red je red, 280 00:20:10,000 --> 00:20:12,000 tako da mislim da ako su engleski, rekao bih 281 00:20:12,000 --> 00:20:17,000 prototipski primjer red je red. 282 00:20:17,000 --> 00:20:22,000 Dakle, kao što su linije, ako si prva osoba u liniji, 283 00:20:22,000 --> 00:20:24,000 vi očekujete da će biti prva osoba izvan linije. 284 00:20:24,000 --> 00:20:31,000 Ako ste posljednja osoba u liniji, što će biti posljednja osoba servisirati. 285 00:20:31,000 --> 00:20:35,000 Zovemo da FIFO uzorak, dok stog je LIFO uzorak. 286 00:20:35,000 --> 00:20:40,000 Te riječi su prilično univerzalno. 287 00:20:40,000 --> 00:20:46,000 >> Kao dimnjaka i za razliku od polja, redovi obično ne dopuštaju pristup elementima u sredini. 288 00:20:46,000 --> 00:20:50,000 Evo, stog, imamo gurati i pop. 289 00:20:50,000 --> 00:20:54,000 Evo, mi se dogoditi da su ih zvali enqueue i dequeue. 290 00:20:54,000 --> 00:20:58,000 Također sam čuo da ih se zove pomak i unshift. 291 00:20:58,000 --> 00:21:02,000 Ja sam čuo da su ljudi kažu guranje i pop također primijeniti na redu. 292 00:21:02,000 --> 00:21:05,000 Čuo sam umetanje, uklanjanje 293 00:21:05,000 --> 00:21:11,000 tako gurati i pop, ako govorimo o dimnjaka, te su pritom i iskakanje. 294 00:21:11,000 --> 00:21:16,000 Ako govorimo o redovima, mogli odabrati riječi koje želite koristiti 295 00:21:16,000 --> 00:21:23,000 za umetanje i uklanjanje, i ne postoji konsenzus o tome što bi trebao biti pozvan. 296 00:21:23,000 --> 00:21:27,000 Ali ovdje, imamo enqueue i dequeue. 297 00:21:27,000 --> 00:21:37,000 Sada, struct izgleda gotovo identičan stog struct. 298 00:21:37,000 --> 00:21:40,000 No, moramo pratiti glave. 299 00:21:40,000 --> 00:21:44,000 Pretpostavljam da kaže ovdje dolje, ali zašto trebamo glavu? 300 00:21:53,000 --> 00:21:57,000 U prototipovi su u osnovi identičan guranje i pop. 301 00:21:57,000 --> 00:21:59,000 Možete misliti o njemu kao guranje i pop. 302 00:21:59,000 --> 00:22:08,000 Jedina razlika je pop vraća-umjesto zadnji, to je povratak na prvom mjestu. 303 00:22:08,000 --> 00:22:12,000 2, 1, 3, 4, ili nešto. 304 00:22:12,000 --> 00:22:14,000 I ovdje je početak. 305 00:22:14,000 --> 00:22:17,000 Naš je red potpuno pun, tako da je četiri elementi u njemu. 306 00:22:17,000 --> 00:22:21,000 Kraj našeg redu je trenutno 2, 307 00:22:21,000 --> 00:22:24,000 a sada idemo ubaciti nešto drugo. 308 00:22:24,000 --> 00:22:29,000 >> Kada želimo umetnuti tu nešto drugo, ono što smo učinili za stog verziji 309 00:22:29,000 --> 00:22:36,000 je smo proširili naš blok memorije. 310 00:22:36,000 --> 00:22:40,000 Što je problem s tim? 311 00:22:40,000 --> 00:22:45,000 [Studentski] Možete premjestiti dvije. 312 00:22:45,000 --> 00:22:51,000 Ono što sam rekao prije o kraju reda, 313 00:22:51,000 --> 00:22:57,000 to nema smisla da mi početi na jedan, 314 00:22:57,000 --> 00:23:01,000 onda želimo dequeue 1, onda dequeue 3, onda dequeue 4, 315 00:23:01,000 --> 00:23:05,000 onda dequeue 2, zatim dequeue ovaj jedan. 316 00:23:05,000 --> 00:23:08,000 Mi ne možemo koristiti realloc sada, 317 00:23:08,000 --> 00:23:11,000 ili barem, morate koristiti realloc na drugačiji način. 318 00:23:11,000 --> 00:23:15,000 Ali vjerojatno ne bi trebala koristiti realloc. 319 00:23:15,000 --> 00:23:18,000 Vi ćete morati ručno kopirati svoju memoriju. 320 00:23:18,000 --> 00:23:21,000 >> Postoje dvije funkcije za kopiranje memorije. 321 00:23:21,000 --> 00:23:25,000 Tu je memcopy i memmove. 322 00:23:25,000 --> 00:23:29,000 Ja sam trenutno čitate man stranice kako bi vidjeli koje ćete želite koristiti. 323 00:23:29,000 --> 00:23:35,000 Ok, memcopy, razlika je 324 00:23:35,000 --> 00:23:38,000 da memcopy i memmove, jedan obrađuje slučaj ispravno 325 00:23:38,000 --> 00:23:41,000 gdje ste kopirate u regiji koja će se dogoditi da se preklapaju regiju 326 00:23:41,000 --> 00:23:46,000 ti si kopirate iz. 327 00:23:46,000 --> 00:23:50,000 Memcopy ga ne obrađuju. Memmove radi. 328 00:23:50,000 --> 00:23:59,000 Možete misliti o tom problemu kao- 329 00:23:59,000 --> 00:24:09,000 recimo želim kopirati ovog tipa, 330 00:24:09,000 --> 00:24:13,000 ove četiri ovom tipu više. 331 00:24:13,000 --> 00:24:16,000 Na kraju, što je polje treba izgledati 332 00:24:16,000 --> 00:24:26,000 nakon je kopija 2, 1, 2, 1, 3, 4, a zatim neke stvari na kraju. 333 00:24:26,000 --> 00:24:29,000 No, to ovisi o redoslijedu u kojem smo zapravo kopirati, 334 00:24:29,000 --> 00:24:32,000 jer ako mi ne uzeti u obzir činjenicu da je regija smo kopiranje u 335 00:24:32,000 --> 00:24:35,000 preklapa jedan smo od kopiranja, 336 00:24:35,000 --> 00:24:46,000 tada smo mogli učiniti kao početak ovdje, kopiranje 2 na mjestu želimo ići, 337 00:24:46,000 --> 00:24:52,000 zatim premjestiti naše naputke naprijed. 338 00:24:52,000 --> 00:24:56,000 >> Sada ćemo biti ovdje i ovdje, a sada želimo kopirati 339 00:24:56,000 --> 00:25:04,000 ovaj tip nad ovim tipom i premjestiti naše naputke naprijed. 340 00:25:04,000 --> 00:25:07,000 Što ćemo završiti uzimajući je 2, 1, 2, 1, 2, 1 341 00:25:07,000 --> 00:25:10,000 umjesto odgovarajućeg 2, 1, 2, 1, 3, 4, jer 342 00:25:10,000 --> 00:25:15,000 2, 1 overrode izvorni 3, 4. 343 00:25:15,000 --> 00:25:19,000 Memmove ručke da ispravno. 344 00:25:19,000 --> 00:25:23,000 U tom slučaju, u osnovi samo uvijek koristiti memmove 345 00:25:23,000 --> 00:25:26,000 jer ga obrađuje ispravno. 346 00:25:26,000 --> 00:25:29,000 To općenito ne izvrši bilo još gore. 347 00:25:29,000 --> 00:25:32,000 Ideja je umjesto počevši od početka i kopiranje na ovaj način 348 00:25:32,000 --> 00:25:35,000 kao što smo upravo učinili ovdje, ona počinje od kraja i kopira u, 349 00:25:35,000 --> 00:25:38,000 iu tom slučaju, nikada ne možete imati problema. 350 00:25:38,000 --> 00:25:40,000 Tu se ne performanse izgubio. 351 00:25:40,000 --> 00:25:47,000 Uvijek koristite memmove. Nikad brinuti o memcopy. 352 00:25:47,000 --> 00:25:51,000 I to je mjesto gdje ćete morati zasebno memmove 353 00:25:51,000 --> 00:26:01,000 omotan oko-dio svojem redu. 354 00:26:01,000 --> 00:26:04,000 Bez brige, ako ne i potpuno učinjeno. 355 00:26:04,000 --> 00:26:10,000 To je teže nego stog, gurati i popa. 356 00:26:10,000 --> 00:26:15,000 >> Bilo tko imati bilo kod bismo mogli raditi s? 357 00:26:15,000 --> 00:26:21,000 Čak i ako potpuno nepotpuna? 358 00:26:21,000 --> 00:26:23,000 [Studentski] Da, to je sasvim nepotpuna, iako. 359 00:26:23,000 --> 00:26:27,000 Potpuno nepotpuna je u redu dokle god-možete uštedjeti reviziju? 360 00:26:27,000 --> 00:26:32,000 Zaboravio sam da svaki put. 361 00:26:32,000 --> 00:26:39,000 Ok, ignorirajući što se događa kada trebamo veličinu stvari. 362 00:26:39,000 --> 00:26:42,000 Potpuno zanemariti veličinu. 363 00:26:42,000 --> 00:26:49,000 Objasni ovaj kod. 364 00:26:49,000 --> 00:26:54,000 Odjavljujem ponajprije ako je veličina manja od kopirati ponajprije 365 00:26:54,000 --> 00:27:01,000 i onda nakon toga, ja umetnuti-uzmem glavu + veličina, 366 00:27:01,000 --> 00:27:05,000 i ja bi bili sigurni da omata svojstvu polja, 367 00:27:05,000 --> 00:27:08,000 i ja umetnuti novi string na toj poziciji. 368 00:27:08,000 --> 00:27:12,000 Tada sam povećati veličinu i povratak istina. 369 00:27:12,000 --> 00:27:22,000 >> [Rob B.] Ovo je definitivno jedan od onih slučajeva gdje idete da želite koristiti mod. 370 00:27:22,000 --> 00:27:25,000 Bilo koja vrsta slučaju gdje ste omatanje oko, ako mislite da umatanje okolo, 371 00:27:25,000 --> 00:27:29,000 Neposredna misao bi trebao biti mod. 372 00:27:29,000 --> 00:27:36,000 Kao brzo optimizacije / učiniti vaš broj jedan redak kraći, 373 00:27:36,000 --> 00:27:42,000 primijetite da linija odmah nakon ovog jednog 374 00:27:42,000 --> 00:27:53,000 je samo veličina + +, tako da spojiti da u ovoj liniji, veličina + +. 375 00:27:53,000 --> 00:27:58,000 Sada ovdje imamo slučaj 376 00:27:58,000 --> 00:28:01,000 gdje nemamo dovoljno memorije, 377 00:28:01,000 --> 00:28:05,000 tako da smo sve naše kapacitete 2. 378 00:28:05,000 --> 00:28:09,000 Mislim da bi mogao imati isti problem ovdje, ali možemo ga ignorirati sada, 379 00:28:09,000 --> 00:28:13,000 gdje ako nije povećati svoj kapacitet, 380 00:28:13,000 --> 00:28:18,000 onda idete da želite smanjiti svoj kapacitet dvije opet. 381 00:28:18,000 --> 00:28:24,000 Još jedan kratki napomena je baš kao i što možete učiniti + =, 382 00:28:24,000 --> 00:28:30,000 također možete učiniti << =. 383 00:28:30,000 --> 00:28:43,000 Gotovo sve što se može ići pred jednakima, + =, | =, & =, << =. 384 00:28:43,000 --> 00:28:52,000 Char * nova je naš novi blok memorije. 385 00:28:52,000 --> 00:28:55,000 Oh, ovdje. 386 00:28:55,000 --> 00:29:02,000 >> Što ljudi misle o vrsti našeg novog bloka memorije? 387 00:29:02,000 --> 00:29:06,000 [Studentski] To bi trebao biti char **. 388 00:29:06,000 --> 00:29:12,000 Osvrčući se na naš struct ovdje, 389 00:29:12,000 --> 00:29:14,000 žice je ono što mi se preraspodjelom. 390 00:29:14,000 --> 00:29:21,000 Mi smo stvaranje cijeli novi dinamičan prostor za pohranu elemenata u redu. 391 00:29:21,000 --> 00:29:25,000 Što ćemo se dodjeljuje za svoje žice je ono što smo mallocing upravo sada, 392 00:29:25,000 --> 00:29:30,000 i tako nova će biti char **. 393 00:29:30,000 --> 00:29:34,000 To će biti niz žice. 394 00:29:34,000 --> 00:29:38,000 Onda što je slučaj u kojem ćemo se vratiti lažno? 395 00:29:38,000 --> 00:29:41,000 [Studentski] Hoćemo li se radi char *? 396 00:29:41,000 --> 00:29:44,000 [Rob B.] Da, dobro poziv. 397 00:29:44,000 --> 00:29:46,000 [Studentski] Što je to? 398 00:29:46,000 --> 00:29:49,000 [Rob B.] Željeli smo napraviti veličinu char * jer mi se više ne- 399 00:29:49,000 --> 00:29:53,000 to bi zapravo biti vrlo veliki problem jer sizeof (char) će biti jedan. 400 00:29:53,000 --> 00:29:55,000 Sizeof char * će biti 4, 401 00:29:55,000 --> 00:29:58,000 tako puno vremena kada ste se bave Ints, 402 00:29:58,000 --> 00:30:01,000 imaju tendenciju da biste dobili daleko s njom, jer veličina int i veličinom int * 403 00:30:01,000 --> 00:30:04,000 na 32-bitni sustav će biti ista stvar. 404 00:30:04,000 --> 00:30:09,000 Ali ovdje, sizeof (char) i sizeof (char *) sada će biti ista stvar. 405 00:30:09,000 --> 00:30:15,000 >> Što je okolnost gdje smo se vratili lažna? 406 00:30:15,000 --> 00:30:17,000 [Studentski] Novi null. 407 00:30:17,000 --> 00:30:23,000 Da, ako se novi null, vraćamo lažna, 408 00:30:23,000 --> 00:30:34,000 i ja ću baciti ovdje dolje- 409 00:30:34,000 --> 00:30:37,000 [Studentski] [nečujan] 410 00:30:37,000 --> 00:30:39,000 [Rob B.] Da, to je u redu. 411 00:30:39,000 --> 00:30:46,000 Ili bi mogao napraviti dva puta kapaciteta ili kapaciteta Shift 1 i tek onda ga postaviti ovdje ili što god. 412 00:30:46,000 --> 00:30:52,000 Mi ćemo to učiniti kao što smo ga imali. 413 00:30:52,000 --> 00:30:56,000 Kapacitet >> = 1. 414 00:30:56,000 --> 00:31:08,000 I nikada si idući u morati brinuti o gubljenja jednom je mjesto 415 00:31:08,000 --> 00:31:12,000 zato što je napustio pomaknut za jedan, tako da je jedan u mjesto je nužno 0, 416 00:31:12,000 --> 00:31:16,000 pa upravo kreće prema jednoj, još uvijek ćeš biti u redu. 417 00:31:16,000 --> 00:31:19,000 [Studentski] Da li je potrebno učiniti da se prije povratka? 418 00:31:19,000 --> 00:31:29,000 [Rob B.] Da, to ga čini apsolutno nikakvog smisla. 419 00:31:29,000 --> 00:31:36,000 >> Sada pretpostavimo da ćemo završiti povratka istina do kraja. 420 00:31:36,000 --> 00:31:39,000 Način ćemo to učiniti ovih memmoves, 421 00:31:39,000 --> 00:31:45,000 moramo biti oprezni s koliko smo ih učiniti. 422 00:31:45,000 --> 00:31:50,000 Se bilo tko imati bilo kakve prijedloge kako bismo ih učiniti? 423 00:32:17,000 --> 00:32:21,000 Evo naš početak. 424 00:32:21,000 --> 00:32:28,000 Neizbježno, želimo početi početkom opet 425 00:32:28,000 --> 00:32:35,000 i kopirati stvari u od tamo, 1, 3, 4, 2. 426 00:32:35,000 --> 00:32:41,000 Kako ćete to učiniti? 427 00:32:41,000 --> 00:32:52,000 Prvo, moram gledati na čovjeka stranici za memmove opet. 428 00:32:52,000 --> 00:32:57,000 Memmove, kako od argumenata je uvijek važno. 429 00:32:57,000 --> 00:33:01,000 Želimo naše odredište prvi, drugi izvor, veličina treći. 430 00:33:01,000 --> 00:33:06,000 Postoji puno funkcija koje obrnutom izvor i odredište. 431 00:33:06,000 --> 00:33:11,000 Odredište, izvor teži biti dosljedni nešto. 432 00:33:17,000 --> 00:33:21,000 Pokret, što je to vraća? 433 00:33:21,000 --> 00:33:27,000 To vraća pokazivač na odredište, iz bilo kojeg razloga možda želite da. 434 00:33:27,000 --> 00:33:32,000 Ja mogu sliku to pročitao, ali želimo da se presele u naše odredište. 435 00:33:32,000 --> 00:33:35,000 >> Što se naše odredište će biti? 436 00:33:35,000 --> 00:33:37,000 [Studentski] Novi. 437 00:33:37,000 --> 00:33:39,000 [Rob B.] Da, a gdje smo kopiranje iz? 438 00:33:39,000 --> 00:33:43,000 Prva stvar koju smo kopiranje je to 1, 3, 4. 439 00:33:43,000 --> 00:33:50,000 Što je to-1, 3, 4. 440 00:33:50,000 --> 00:33:55,000 Što je adresa ovog jednog? 441 00:33:55,000 --> 00:33:58,000 Što je adresa tog jednog? 442 00:33:58,000 --> 00:34:01,000 [Studentski] [nečujan] 443 00:34:01,000 --> 00:34:03,000 [Rob B.] Visina + adresu prvog elementa. 444 00:34:03,000 --> 00:34:05,000 Kako smo dobili prvi element u nizu? 445 00:34:05,000 --> 00:34:10,000 [Studentski] red. 446 00:34:10,000 --> 00:34:15,000 [Rob B.] Da, q.strings. 447 00:34:15,000 --> 00:34:20,000 Zapamtite, ovdje, naš šef je jedan. 448 00:34:20,000 --> 00:34:24,000 To prokleto. Ja samo mislim da je magično- 449 00:34:24,000 --> 00:34:29,000 Evo, naš šef je jedan. Ja ću promijeniti moje boje previše. 450 00:34:29,000 --> 00:34:36,000 I ovdje je žice. 451 00:34:36,000 --> 00:34:41,000 Ovaj, mi može pisati kao što smo učinili ovamo 452 00:34:41,000 --> 00:34:43,000 s glave + q.strings. 453 00:34:43,000 --> 00:34:51,000 Puno ljudi također pisati ga i q.strings [glava]. 454 00:34:51,000 --> 00:34:55,000 To zapravo i nije bilo manje učinkovit. 455 00:34:55,000 --> 00:34:58,000 Vi možda mislite o njemu kao što su to dereferencing a zatim uzimajući adresu, 456 00:34:58,000 --> 00:35:04,000 ali prevodilac će prevesti ga na ono što smo imali prije svejedno, q.strings + glava. 457 00:35:04,000 --> 00:35:06,000 U svakom slučaju želim razmišljati o tome. 458 00:35:06,000 --> 00:35:11,000 >> A koliko bajtova želimo kopirati? 459 00:35:11,000 --> 00:35:15,000 [Studentski] Kapacitet - glava. 460 00:35:15,000 --> 00:35:18,000 Kapacitet - glava. 461 00:35:18,000 --> 00:35:21,000 I onda uvijek možete napisati primjer 462 00:35:21,000 --> 00:35:23,000 shvatiti ako je to točno. 463 00:35:23,000 --> 00:35:26,000 [Studentski] To treba biti podijeljen po dva tada. 464 00:35:26,000 --> 00:35:30,000 Da, tako da mislim da bi mogao koristiti veličinu. 465 00:35:30,000 --> 00:35:35,000 Mi još uvijek imamo veličinu bivanja- 466 00:35:35,000 --> 00:35:39,000 koristeći veličinu, imamo veličinu jednak 4. 467 00:35:39,000 --> 00:35:42,000 Naša veličina je 4. Naša glava je jedna. 468 00:35:42,000 --> 00:35:46,000 Mi želimo kopirati ove tri elementa. 469 00:35:46,000 --> 00:35:54,000 To je razum provjeriti da veličina - glava je točno tri. 470 00:35:54,000 --> 00:35:58,000 I vraća ovdje, kao što smo već rekli, 471 00:35:58,000 --> 00:36:00,000 ako ćemo koristiti kapacitete, onda ćemo morati podijeliti po dva 472 00:36:00,000 --> 00:36:04,000 jer smo već narasla naše sposobnosti, pa umjesto toga, mi ćemo koristiti veličinu. 473 00:36:11,000 --> 00:36:13,000 Da primjeraka tog dijela. 474 00:36:13,000 --> 00:36:18,000 Sada, moramo kopirati druge dio, dio koji je ostao od samog početka. 475 00:36:18,000 --> 00:36:28,000 >> To će memmove u kojoj poziciji? 476 00:36:28,000 --> 00:36:32,000 [Studentski] plus size - glava. 477 00:36:32,000 --> 00:36:38,000 Da, tako smo već kopiraju u veličini - glave bajtova, 478 00:36:38,000 --> 00:36:43,000 pa gdje želimo kopirati preostale bajtova je novo 479 00:36:43,000 --> 00:36:48,000 i onda veličina minus dobro, broj bajtova smo već kopirati u. 480 00:36:48,000 --> 00:36:52,000 I onda gdje smo kopiranje iz? 481 00:36:52,000 --> 00:36:54,000 [Studentski] Q.strings [0]. 482 00:36:54,000 --> 00:36:56,000 [Rob B.] Da, q.strings. 483 00:36:56,000 --> 00:37:02,000 Mi ni mogao učiniti i q.strings [0]. 484 00:37:02,000 --> 00:37:05,000 To je znatno rjeđi nego ovo. 485 00:37:05,000 --> 00:37:14,000 Ako je to samo će biti 0, onda ćete skloni vidjeti q.strings. 486 00:37:14,000 --> 00:37:16,000 To je mjesto gdje smo kopirate iz. 487 00:37:16,000 --> 00:37:18,000 Koliko bajtova mi ostavili kopirati? >> [Studentski] 10. 488 00:37:18,000 --> 00:37:20,000 Točno. 489 00:37:20,000 --> 00:37:25,000 [Studentski] Ne moramo pomnožiti 5-10 puta veći od bajtova ili nešto? 490 00:37:25,000 --> 00:37:30,000 Da, tako je to u kojoj-točno ono što smo kopiranje? 491 00:37:30,000 --> 00:37:32,000 [Studentski] [nečujan] 492 00:37:32,000 --> 00:37:34,000 Što je vrsta stvar smo kopiranja? 493 00:37:34,000 --> 00:37:36,000 [Studentski] [nečujan] 494 00:37:36,000 --> 00:37:41,000 Da, tako char * a da smo kopiranje, ne znamo gdje su oni koji dolaze iz. 495 00:37:41,000 --> 00:37:47,000 Pa, gdje su oni ističući da, kao što su žice, mi završiti ga gura na čekanju 496 00:37:47,000 --> 00:37:49,000 ili enqueuing na red. 497 00:37:49,000 --> 00:37:51,000 Gdje oni dolaze iz, nemamo pojma. 498 00:37:51,000 --> 00:37:56,000 Mi samo trebamo pratiti na char * s sebe. 499 00:37:56,000 --> 00:38:00,000 Mi ne želimo kopirati veličinu - glava bajtova. 500 00:38:00,000 --> 00:38:03,000 Mi želimo kopirati veličinu - glava char * s, 501 00:38:03,000 --> 00:38:11,000 tako da ćemo pomnožiti to sizeof (char *). 502 00:38:11,000 --> 00:38:17,000 Sve ovdje dolje, glava * sizeof (char *). 503 00:38:17,000 --> 00:38:24,000 >> [Studentski] Što o [nečujan]? 504 00:38:24,000 --> 00:38:26,000 Ovo ovdje? 505 00:38:26,000 --> 00:38:28,000 [Studentski] Ne, ispod toga, veličina - glava. 506 00:38:28,000 --> 00:38:30,000 [Rob B.] Ovo ovdje? 507 00:38:30,000 --> 00:38:32,000 Pointer aritmetika. 508 00:38:32,000 --> 00:38:35,000 Kako pokazivač aritmetika ide na posao je 509 00:38:35,000 --> 00:38:40,000 automatski umnožava po veličini vrsti da smo se bave. 510 00:38:40,000 --> 00:38:46,000 Baš kao i ovdje, nova + (veličina - glava) 511 00:38:46,000 --> 00:38:56,000 je točno odgovara i novi [veličini - glave] 512 00:38:56,000 --> 00:39:00,000 dok očekujemo da se radi ispravno, 513 00:39:00,000 --> 00:39:04,000 jer ako imamo posla s int niz, onda mi ne indeks int- 514 00:39:04,000 --> 00:39:07,000 ili ako je veličine od 5 i želite četvrti element, onda ćemo indeks u 515 00:39:07,000 --> 00:39:10,000 int array [4]. 516 00:39:10,000 --> 00:39:14,000 Vi nemojte-[4] * veličina int. 517 00:39:14,000 --> 00:39:21,000 To ga obrađuje automatski, a ovaj slučaj 518 00:39:21,000 --> 00:39:29,000 je doslovno ekvivalent, tako da nosač sintaksa 519 00:39:29,000 --> 00:39:34,000 samo ide da se pretvaraju da to čim sastaviti. 520 00:39:34,000 --> 00:39:38,000 To je nešto što morate biti oprezni da 521 00:39:38,000 --> 00:39:42,000 kada se dodavanjem veličinu - glava 522 00:39:42,000 --> 00:39:45,000 dodajete niti jedan bajt. 523 00:39:45,000 --> 00:39:53,000 Ti si dodao jedan char *, što može biti jedan bajtova ili bilo što drugo. 524 00:39:53,000 --> 00:39:56,000 >> Ostala pitanja? 525 00:39:56,000 --> 00:40:04,000 Ok, dequeue će biti lakše. 526 00:40:04,000 --> 00:40:11,000 Ja ću vam dati minutu za provedbu. 527 00:40:11,000 --> 00:40:18,000 Oh, i mislim da je to ista situacija gdje 528 00:40:18,000 --> 00:40:21,000 što Postavi u red slučaj, ako ćemo enqueuing null, 529 00:40:21,000 --> 00:40:24,000 možda ga želimo nositi, možda mi ne. 530 00:40:24,000 --> 00:40:27,000 Nećemo to učiniti opet ovdje, ali isto kao i naš stack slučaju. 531 00:40:27,000 --> 00:40:34,000 Ako smo enqueue null, možda bismo željeli da ga zanemarite. 532 00:40:34,000 --> 00:40:40,000 Svatko ima neki kod ja mogu podići? 533 00:40:40,000 --> 00:40:45,000 [Studentski] Imam samo dequeue. 534 00:40:45,000 --> 00:40:56,000 Verzija 2 je da-ok. 535 00:40:56,000 --> 00:40:59,000 Želite li objasniti? 536 00:40:59,000 --> 00:41:01,000 [Studentski] Prvo, pobrinite se da je nešto u redu 537 00:41:01,000 --> 00:41:07,000 te da je veličina ide dolje do 1.. 538 00:41:07,000 --> 00:41:11,000 Morate to učiniti, a onda se vratiti u glavu 539 00:41:11,000 --> 00:41:13,000 a zatim premjestiti glavu 1. 540 00:41:13,000 --> 00:41:19,000 Ok, tako da je kut slučaj moramo uzeti u obzir. Da. 541 00:41:19,000 --> 00:41:24,000 [Studentski] Ako vam je glava na zadnji element, 542 00:41:24,000 --> 00:41:26,000 onda ne želite glave do točke izvan polja. 543 00:41:26,000 --> 00:41:29,000 >> Da, tako čim glavu pogodi kraj našeg polja, 544 00:41:29,000 --> 00:41:35,000 kad smo dequeue, naša glava treba biti modded natrag na 0. 545 00:41:35,000 --> 00:41:40,000 Nažalost, ne možemo to učiniti u jednom koraku. 546 00:41:40,000 --> 00:41:44,000 Valjda put bih vjerojatno popraviti je 547 00:41:44,000 --> 00:41:52,000 ovo će biti char *, ono što smo se vraćaju, 548 00:41:52,000 --> 00:41:55,000 bez obzira na vaše ime varijable želi biti. 549 00:41:55,000 --> 00:42:02,000 Tada želimo mod glavu po našoj sposobnosti 550 00:42:02,000 --> 00:42:10,000 , a zatim se vratiti u mirovini. 551 00:42:10,000 --> 00:42:14,000 Puno ljudi ovdje bi mogli učiniti- 552 00:42:14,000 --> 00:42:19,000 ovo je slučaj-Vidjet ćeš ljudi učiniti ako glava 553 00:42:19,000 --> 00:42:29,000 je veća od kapaciteta, učiniti glavu - kapacitet. 554 00:42:29,000 --> 00:42:36,000 A to je upravo ono što rade oko mod je. 555 00:42:36,000 --> 00:42:41,000 Šef mod = kapacitet je mnogo čišći 556 00:42:41,000 --> 00:42:51,000 od omota oko nego ako glava veća od kapaciteta glave - kapacitet. 557 00:42:51,000 --> 00:42:56,000 >> Pitanja? 558 00:42:56,000 --> 00:43:02,000 Ok, zadnja stvar koju smo ostavili je naš linked list. 559 00:43:02,000 --> 00:43:07,000 Možda će se koristiti za neke od povezanog popisa ponašanja ako nisi 560 00:43:07,000 --> 00:43:11,000 povezane liste u svojim hash tablica, ako je hash tablicu. 561 00:43:11,000 --> 00:43:15,000 Ja čvrsto preporučujem radi hash tablicu. 562 00:43:15,000 --> 00:43:17,000 Možda već učinio trie, 563 00:43:17,000 --> 00:43:23,000 ali pokušava teže. 564 00:43:23,000 --> 00:43:27,000 U teoriji, oni su asimptotski bolje. 565 00:43:27,000 --> 00:43:30,000 No, samo pogled na velikom brodu, 566 00:43:30,000 --> 00:43:35,000 i pokušava nikada učiniti bolje, i oni zauzimaju više memorije. 567 00:43:35,000 --> 00:43:43,000 Sve o pokušava završi kao gore za više rada. 568 00:43:43,000 --> 00:43:49,000 To je ono Davida Malan je rješenje uvijek je 569 00:43:49,000 --> 00:43:56,000 Je li uvijek postove njegov trie rješenje, pa da vidimo gdje je trenutno. 570 00:43:56,000 --> 00:44:00,000 Ono što je on pod, David J? 571 00:44:00,000 --> 00:44:06,000 On je # 18, tako da nije strašno loše, 572 00:44:06,000 --> 00:44:09,000 i da će biti jedan od najboljih pokušava možete misliti 573 00:44:09,000 --> 00:44:17,000 ili jedan od najboljih pokušava od trie. 574 00:44:17,000 --> 00:44:23,000 Je li to nije ni njegov izvorni rješenje? 575 00:44:23,000 --> 00:44:29,000 Osjećam se kao trie rješenja imaju tendenciju da se više u tom rasponu RAM korištenja. 576 00:44:29,000 --> 00:44:33,000 >> Idi dolje na samom vrhu, a RAM-a običaj je u jednoznamenkaste. 577 00:44:33,000 --> 00:44:36,000 Idite prema dolje na dnu, a onda početi dobivati ​​pokušava 578 00:44:36,000 --> 00:44:41,000 gdje ćete dobiti apsolutno masivan RAM korištenje, 579 00:44:41,000 --> 00:44:45,000 i pokušava teže. 580 00:44:45,000 --> 00:44:53,000 Nije u potpunosti isplati, ali obrazovnog iskustva, ako ste učinili jednom. 581 00:44:53,000 --> 00:44:56,000 Zadnja stvar je naša povezana lista, 582 00:44:56,000 --> 00:45:04,000 i ove tri stvari, gomila, redovi i povezane liste, 583 00:45:04,000 --> 00:45:09,000 svaki budući stvar koju je ikada učiniti u informatici 584 00:45:09,000 --> 00:45:12,000 će preuzeti imate upoznati s tim stvarima. 585 00:45:12,000 --> 00:45:19,000 Oni su samo tako temeljno za sve. 586 00:45:19,000 --> 00:45:25,000 >> Povezani liste, a ovdje smo pojedinačno povezani popis će biti naša provedba. 587 00:45:25,000 --> 00:45:34,000 Što pojedinačno ne znači povezati, za razliku od dvostruko povezani? Da. 588 00:45:34,000 --> 00:45:37,000 [Studentski] To samo ukazuje na sljedeću pokazivač nego na pokazivače, 589 00:45:37,000 --> 00:45:39,000 poput onog koji prethodi ga i jedan nakon njega. 590 00:45:39,000 --> 00:45:44,000 Da, tako je u format slike, što sam samo učiniti? 591 00:45:44,000 --> 00:45:48,000 Imam dvije stvari. Imam sliku i sliku. 592 00:45:48,000 --> 00:45:51,000 U format slike, naši pojedinačno povezani popisi, 593 00:45:51,000 --> 00:45:57,000 neizbježno, imamo nekakav pokazivač na čelu naše liste, 594 00:45:57,000 --> 00:46:02,000 i onda u roku našem popisu, samo moramo upućuje, 595 00:46:02,000 --> 00:46:05,000 a možda to ukazuje na nulu. 596 00:46:05,000 --> 00:46:08,000 To će biti vaš tipičan crtež pojedinačno povezane liste. 597 00:46:08,000 --> 00:46:14,000 Dvostruko povezana lista, možete ići unatrag. 598 00:46:14,000 --> 00:46:19,000 Ako sam vam dati bilo kakve čvor na popisu, onda nužno može doći do 599 00:46:19,000 --> 00:46:23,000 bilo koji drugi čvor u listu ako je dvostruko povezana popis. 600 00:46:23,000 --> 00:46:27,000 Ali, ako sam ti treći čvor u popisu i to je pojedinačno povezani popis, 601 00:46:27,000 --> 00:46:30,000 ni na koji način ste ikada idući u dobiti u prvom i drugom čvorova. 602 00:46:30,000 --> 00:46:34,000 I tu je prednosti i detriments, a jedan očigledan jedan 603 00:46:34,000 --> 00:46:42,000 je li zauzimaju više veličina, a vi morate pratiti gdje su te stvari okrenuti sada. 604 00:46:42,000 --> 00:46:49,000 Ali mi samo stalo pojedinačno povezani. 605 00:46:49,000 --> 00:46:53,000 >> Prije nekoliko stvari koje smo si idući u morati provoditi. 606 00:46:53,000 --> 00:47:00,000 Vaš typedef struct čvor, int i: struct node * next; čvor. 607 00:47:00,000 --> 00:47:09,000 To typedef trebao biti spaljen u vašim umovima. 608 00:47:09,000 --> 00:47:14,000 Kviz 1 treba mi dati typedef od povezanog popisa čvora, 609 00:47:14,000 --> 00:47:18,000 i trebali biste biti u mogućnosti odmah piskarati da se razbije 610 00:47:18,000 --> 00:47:22,000 čak i bez razmišljanja o tome. 611 00:47:22,000 --> 00:47:27,000 Valjda par pitanja, zašto trebamo struct ovdje? 612 00:47:27,000 --> 00:47:32,000 Zašto ne možemo reći čvor *? 613 00:47:32,000 --> 00:47:35,000 [Studentski] [nečujan] 614 00:47:35,000 --> 00:47:38,000 Da. 615 00:47:38,000 --> 00:47:44,000 Jedina stvar koja definira čvor kao stvar 616 00:47:44,000 --> 00:47:47,000 je typedef sama. 617 00:47:47,000 --> 00:47:55,000 No, od ove točke, kad smo vrsta raščlanjivanjem kroz ove definicije struct čvora, 618 00:47:55,000 --> 00:48:01,000 nismo završili naš typedef još, tako da od typedef nije završio, 619 00:48:01,000 --> 00:48:05,000 čvor ne postoji. 620 00:48:05,000 --> 00:48:12,000 Ali struct čvor radi, a to čvor ovdje, 621 00:48:12,000 --> 00:48:14,000 to također može biti pozvan ništa drugo. 622 00:48:14,000 --> 00:48:16,000 To bi se moglo nazvati n. 623 00:48:16,000 --> 00:48:19,000 To bi se moglo nazvati linked popis čvor. 624 00:48:19,000 --> 00:48:21,000 To bi se moglo nazvati ništa. 625 00:48:21,000 --> 00:48:26,000 Ali to struct čvor treba da se zove isto kao ovaj struct čvora. 626 00:48:26,000 --> 00:48:29,000 Ono što vi zovete to mora biti i ovdje, 627 00:48:29,000 --> 00:48:32,000 i to tako da odgovara i na druge točke u pitanje 628 00:48:32,000 --> 00:48:37,000 što je razlog zašto-puno puta kada vidite tvorevina i typedefs od tvorevina, 629 00:48:37,000 --> 00:48:42,000 vidjet ćete anonimne tvorevina, gdje ćete samo vidjeti typedef struct, 630 00:48:42,000 --> 00:48:47,000 Provedba struct, rječniku, ili bilo što drugo. 631 00:48:47,000 --> 00:48:51,000 >> Zašto ovdje ne moramo reći čvor? 632 00:48:51,000 --> 00:48:54,000 Zašto ne može biti anonimna struct? 633 00:48:54,000 --> 00:48:56,000 To je gotovo isti odgovor. 634 00:48:56,000 --> 00:48:58,000 [Studentski] Morate se odnosi na to unutar struct. 635 00:48:58,000 --> 00:49:04,000 Da, unutar struct, trebate se odnose na struct sama. 636 00:49:04,000 --> 00:49:10,000 Ako ne daju struct ime, ako je anonimni struct, ne može odnositi na njega. 637 00:49:10,000 --> 00:49:17,000 I posljednje, ali ne i najmanje važno, to svi trebali biti nešto jednostavno, 638 00:49:17,000 --> 00:49:20,000 i oni bi trebali pomoći da shvatite ako ste pisanje ove dolje 639 00:49:20,000 --> 00:49:24,000 da radiš nešto krivo ako ovakve stvari nemaju smisla. 640 00:49:24,000 --> 00:49:28,000 Posljednje, ali ne i najmanje važno, zašto to moraju biti struct node *? 641 00:49:28,000 --> 00:49:34,000 Zašto ne može biti samo struct čvor sljedeći? 642 00:49:34,000 --> 00:49:37,000 [Studentski] pointer na sljedeću struct. 643 00:49:37,000 --> 00:49:39,000 To je neizbježno ono što želimo. 644 00:49:39,000 --> 00:49:42,000 Zašto bi to nikada neće biti struct čvor sljedeći? 645 00:49:42,000 --> 00:49:50,000 Zašto to mora biti struct node * sljedeći? Da. 646 00:49:50,000 --> 00:49:53,000 [Studentski] To je kao beskonačnu petlju. 647 00:49:53,000 --> 00:49:55,000 Da. 648 00:49:55,000 --> 00:49:57,000 [Studentski] To će sve biti u jednom. 649 00:49:57,000 --> 00:50:02,000 Da, samo mislim kako ćemo učiniti veličinu ili nešto. 650 00:50:02,000 --> 00:50:08,000 Veličina od struct je u osnovi + ili - neki uzorak ovdje ili ondje. 651 00:50:08,000 --> 00:50:15,000 To je u osnovi će biti zbroj veličina stvari u struct. 652 00:50:15,000 --> 00:50:18,000 Ovo ovdje, bez mijenjanja išta, veličina će biti lako. 653 00:50:18,000 --> 00:50:24,000 Veličina struct čvor će biti veličine i + veličine sljedeći. 654 00:50:24,000 --> 00:50:27,000 Veličina ja će biti četiri. Veličina Sljedeća će biti četiri. 655 00:50:27,000 --> 00:50:30,000 Veličina struct čvor će biti osam. 656 00:50:30,000 --> 00:50:34,000 Ako mi nemamo *, misleći sizeof, 657 00:50:34,000 --> 00:50:37,000 onda sizeof (i) će biti četiri. 658 00:50:37,000 --> 00:50:43,000 Veličina struct čvor sljedeći će biti veličine i + veličina struct čvoru sljedeći 659 00:50:43,000 --> 00:50:46,000 + Veličina I + veličine struct čvora sljedeći. 660 00:50:46,000 --> 00:50:55,000 To će biti beskonačan rekurzije čvorova. 661 00:50:55,000 --> 00:51:00,000 To je razlog zašto je to kako se stvari moraju biti. 662 00:51:00,000 --> 00:51:03,000 >> Opet, definitivno zapamtiti da, 663 00:51:03,000 --> 00:51:06,000 ili barem to razumijem dovoljno da možete biti u mogućnosti 664 00:51:06,000 --> 00:51:12,000 Razlog kroz ono što bi trebao izgledati. 665 00:51:12,000 --> 00:51:14,000 Ono što mi idete da želite provesti. 666 00:51:14,000 --> 00:51:18,000 Ako je duljina popisa- 667 00:51:18,000 --> 00:51:21,000 mogli prevariti i držati oko 668 00:51:21,000 --> 00:51:24,000 Globalna duljina ili tako nešto, ali nećemo to učiniti. 669 00:51:24,000 --> 00:51:28,000 Mi ćemo računati na duljinu popisa. 670 00:51:28,000 --> 00:51:34,000 Mi smo sadrži, tako da je u osnovi poput traženja, 671 00:51:34,000 --> 00:51:41,000 tako smo povezani popis brojeva vidjeti ako ovaj broj je u povezane liste. 672 00:51:41,000 --> 00:51:44,000 Upotrijebiti nesto će umetnuti na početku popisa. 673 00:51:44,000 --> 00:51:46,000 Dodavanje će umetnuti na kraju. 674 00:51:46,000 --> 00:51:53,000 Insert_sorted će umetnuti u poredani mjesta na popisu. 675 00:51:53,000 --> 00:52:01,000 Insert_sorted vrsta pretpostavlja da nikada ne koristi upotrijebiti nesto ili dodati u loše načine. 676 00:52:01,000 --> 00:52:09,000 >> Insert_sorted kada ste provedbi insert_sorted- 677 00:52:09,000 --> 00:52:13,000 recimo imamo povezan popis. 678 00:52:13,000 --> 00:52:18,000 To je ono što trenutno izgleda, 2, 4, 5. 679 00:52:18,000 --> 00:52:24,000 Želim umetnuti tri, tako dugo dok popis sama već razvrstani, 680 00:52:24,000 --> 00:52:27,000 to je lako pronaći gdje 3 pripada. 681 00:52:27,000 --> 00:52:29,000 Ja početi u dva. 682 00:52:29,000 --> 00:52:32,000 Ok, 3 veća od 2, pa želim zadržati ide. 683 00:52:32,000 --> 00:52:35,000 Oh, 4 je prevelika, tako da znam tri će ići između 2 i 4, 684 00:52:35,000 --> 00:52:39,000 i moram popraviti pokazivače i sve te stvari. 685 00:52:39,000 --> 00:52:43,000 Ali ako nismo striktno koristiti insert_sorted, 686 00:52:43,000 --> 00:52:50,000 sviđa neka je samo reći da sam upotrijebiti nesto 6, 687 00:52:50,000 --> 00:52:55,000 onda je moj povezani popis će postati ovo. 688 00:52:55,000 --> 00:53:01,000 Ona sada nema smisla, tako da za insert_sorted, možete samo pretpostaviti 689 00:53:01,000 --> 00:53:04,000 da je popis sortiran, iako postoje operacije 690 00:53:04,000 --> 00:53:09,000 što može uzrokovati da se ne razvrstani, i to je to. 691 00:53:09,000 --> 00:53:20,000 Nađi pomogla umetak-tako i one su glavne stvari koje ćeš morati provesti. 692 00:53:20,000 --> 00:53:24,000 >> Za sada, uzeti minutu učiniti duljinu i sadrži, 693 00:53:24,000 --> 00:53:30,000 i one bi trebale biti relativno brzo. 694 00:53:41,000 --> 00:53:48,000 Približavajući zatvaranja vremena, tako da svatko ima nešto za duljinu ili sadrži? 695 00:53:48,000 --> 00:53:50,000 Oni će biti gotovo identičan. 696 00:53:50,000 --> 00:53:57,000 [Studentski] Duljina. 697 00:53:57,000 --> 00:54:01,000 Hajdemo vidjeti, reviziju. 698 00:54:01,000 --> 00:54:04,000 Ok. 699 00:54:12,000 --> 00:54:15,000 Želite li objasniti? 700 00:54:15,000 --> 00:54:21,000 [Studentski] Ja samo stvoriti pokazivač čvor i inicijalizirati na prvi, koji je naša globalna varijabla, 701 00:54:21,000 --> 00:54:27,000 i onda sam provjeriti da li je nulta tako da ne dobijete SEG kvar i vratiti 0 ako je to slučaj. 702 00:54:27,000 --> 00:54:34,000 Inače, ja loop, praćenje roku cijeli 703 00:54:34,000 --> 00:54:38,000 koliko sam puta pogledana sljedeći element liste 704 00:54:38,000 --> 00:54:43,000 i u istom prirasta radu i pristup da stvarni element, 705 00:54:43,000 --> 00:54:47,000 i onda sam stalno da provjere da li je ništavan, 706 00:54:47,000 --> 00:54:56,000 i ako je nula, onda će se prekinuti i samo vraća broj elemenata sam pristupiti. 707 00:54:56,000 --> 00:55:01,000 >> [Rob B.] Se bilo tko imati bilo kakve komentare o svemu? 708 00:55:01,000 --> 00:55:06,000 Ovo izgleda fino ispravnost mudar. 709 00:55:06,000 --> 00:55:10,000 [Studentski] Mislim da ne trebate čvor == null. 710 00:55:10,000 --> 00:55:13,000 Da, pa ako čvor == null povratak 0. 711 00:55:13,000 --> 00:55:18,000 Ali ako čvor == null onda je to-oh, tu je ispravnost problem. 712 00:55:18,000 --> 00:55:23,000 To je bio samo ti ja vratiti, ali to nije u sklopu upravo sada. 713 00:55:23,000 --> 00:55:30,000 Vi samo trebate int i, tako da sam = 0. 714 00:55:30,000 --> 00:55:34,000 Ali ako čvor je nula, a zatim i dalje će biti 0, 715 00:55:34,000 --> 00:55:39,000 i da ćemo se vratiti 0, tako da je ovo slučaj je identičan. 716 00:55:39,000 --> 00:55:48,000 Još jedna zajednička stvar je da bi deklaraciju 717 00:55:48,000 --> 00:55:51,000 od čvora unutar for petlje. 718 00:55:51,000 --> 00:55:54,000 Moglo bi se reći-oh, ne. 719 00:55:54,000 --> 00:55:56,000 Idemo ga zadržati što je ovaj. 720 00:55:56,000 --> 00:55:59,000 Vjerojatno bih staviti int i = 0 ovdje, 721 00:55:59,000 --> 00:56:05,000 onda čvor * čvor = prvi ovdje. 722 00:56:05,000 --> 00:56:11,000 I to je vjerojatno kako-uzimajući osloboditi od ovaj sada. 723 00:56:11,000 --> 00:56:14,000 To je vjerojatno kako bih ga napisao. 724 00:56:14,000 --> 00:56:21,000 Ti bi mogao također-gleda na to ovako. 725 00:56:21,000 --> 00:56:25,000 Ovo za petlje strukture ovdje 726 00:56:25,000 --> 00:56:30,000 trebao biti gotovo kao prirodno da vas kao za int i = 0 727 00:56:30,000 --> 00:56:33,000 i je manje od duljine niza i + +. 728 00:56:33,000 --> 00:56:38,000 Ako je to kako se ponoviti tijekom niza, to je, kako se ponoviti više povezane liste. 729 00:56:38,000 --> 00:56:45,000 >> Ovo bi trebao biti druga priroda u nekom trenutku. 730 00:56:45,000 --> 00:56:50,000 Imajući to na umu, to će biti gotovo ista stvar. 731 00:56:50,000 --> 00:56:57,000 Vi ćete želite ponoviti preko povezanu listu. 732 00:56:57,000 --> 00:57:02,000 Ako čvor-ja nemam pojma što je vrijednost zove. 733 00:57:02,000 --> 00:57:04,000 Ja čvora. 734 00:57:04,000 --> 00:57:15,000 Ako je vrijednost u tom čvoru = ja povratak istina, i to je to. 735 00:57:15,000 --> 00:57:18,000 Obavijest da je jedini način smo ikada vratiti false 736 00:57:18,000 --> 00:57:23,000 je, ako ćemo ponoviti tijekom cijelog povezane liste i nikad se vratiti istina, 737 00:57:23,000 --> 00:57:29,000 tako da je ono što ovaj radi. 738 00:57:29,000 --> 00:57:36,000 Kao strani bilješku, mi vjerojatno neće doći do dodati ili upotrijebiti nesto. 739 00:57:36,000 --> 00:57:39,000 >> Brza prošle bilješka. 740 00:57:39,000 --> 00:57:52,000 Ako vidite statički ključnu riječ, pa recimo static int count = 0, 741 00:57:52,000 --> 00:57:56,000 onda smo se računaju + +, te u osnovi mogu misliti o njemu kao globalne varijable, 742 00:57:56,000 --> 00:58:00,000 iako sam samo rekao da to nije kako ćemo provesti duljinu. 743 00:58:00,000 --> 00:58:06,000 Ja radim ovo ovdje, a zatim računati + +. 744 00:58:06,000 --> 00:58:11,000 Bilo koji način možemo unijeti čvor u našoj povezanog popisa smo povećavanjem naše računati. 745 00:58:11,000 --> 00:58:15,000 Poanta je to što je statična ključna riječ znači. 746 00:58:15,000 --> 00:58:20,000 Ako sam imala int count = 0 da bi se redovito stara globalna varijabla. 747 00:58:20,000 --> 00:58:25,000 Što static int count znači da je globalna varijabla za ovu datoteku. 748 00:58:25,000 --> 00:58:28,000 Nemoguće je za neku drugu datoteku, 749 00:58:28,000 --> 00:58:34,000 sviđa misliti pset 5, ako ste započeli. 750 00:58:34,000 --> 00:58:39,000 Imate i speller.c, i imate dictionary.c, 751 00:58:39,000 --> 00:58:42,000 i ako samo proglasiti stvar globalne, onda ništa u speller.c 752 00:58:42,000 --> 00:58:45,000 može pristupiti u dictionary.c i obratno. 753 00:58:45,000 --> 00:58:48,000 Globalne varijable su dostupne bilo. C datoteku, 754 00:58:48,000 --> 00:58:54,000 ali statički varijable su dostupne samo unutar datoteke sama, 755 00:58:54,000 --> 00:59:01,000 tako da unutar provjeru pravopisa ili unutar dictionary.c, 756 00:59:01,000 --> 00:59:06,000 to je vrsta kako bih izjaviti moj varijablu za veličinu moje niz 757 00:59:06,000 --> 00:59:10,000 ili veličina mog broja riječi u rječniku. 758 00:59:10,000 --> 00:59:15,000 Budući da ne želim da se proglasi globalnu varijablu da svatko ima pristup, 759 00:59:15,000 --> 00:59:18,000 Ja stvarno samo briga o tome za mojim vlastite svrhe. 760 00:59:18,000 --> 00:59:21,000 >> Dobra stvar o tome je cijela ime sudara stvari. 761 00:59:21,000 --> 00:59:27,000 Ako neki drugi file pokušava koristiti globalnu varijablu nazvanu count, stvari idu jako, jako krivo, 762 00:59:27,000 --> 00:59:33,000 tako da je ovo lijepo drži stvari sigurno, i samo vi možete pristupiti, 763 00:59:33,000 --> 00:59:38,000 i nitko drugi ne može, a ako netko izjavljuje globalnu varijablu nazvanu count, 764 00:59:38,000 --> 00:59:43,000 onda to neće ometati vaše statičke varijable zove računati. 765 00:59:43,000 --> 00:59:47,000 To je ono što je statična. To je datoteka globalna varijabla. 766 00:59:47,000 --> 00:59:52,000 >> Pitanja o bilo čemu? 767 00:59:52,000 --> 00:59:59,000 Sve skupa. Bok. 768 00:59:59,000 --> 01:00:03,000 [CS50.TV]