1 00:00:00,000 --> 00:00:01,000 [Powered by Google Translate] [§ 6] [Ďalšia Komfortné] 2 00:00:01,000 --> 00:00:04,000 [Rob Bowden] [Harvard University] 3 00:00:04,000 --> 00:00:09,000 [To je CS50.] [CS50.TV] 4 00:00:09,000 --> 00:00:11,000 >> Môžeme zamieriť do našej sekcie otázok. 5 00:00:11,000 --> 00:00:17,000 Poslal som adresu URL pre priestor pred. 6 00:00:17,000 --> 00:00:22,000 Začiatok úseku otázok povedať: 7 00:00:22,000 --> 00:00:26,000 zrejme nie som úplne unsick-je veľmi jednoduchá otázka 8 00:00:26,000 --> 00:00:28,000 toho len to, čo je Valgrind? 9 00:00:28,000 --> 00:00:30,000 Čo valgrind robiť? 10 00:00:30,000 --> 00:00:34,000 Každý, kto chce hovoriť, čo valgrind robí? 11 00:00:34,000 --> 00:00:36,000 [Študent] Kontrola memory leaks. 12 00:00:36,000 --> 00:00:41,000 Jo, valgrind je všeobecný pamäte checker. 13 00:00:41,000 --> 00:00:44,000 To, na konci, vám povie, ak máte nejaké úniky pamäte, 14 00:00:44,000 --> 00:00:49,000 čo je väčšinou to, čo sme používať ho pre, pretože ak chcete 15 00:00:49,000 --> 00:00:54,000 dobre v probléme sade alebo ak chcete 16 00:00:54,000 --> 00:00:59,000 dostať na veľkú tabuľu, musíte mať žiadne úniky pamäte vôbec, 17 00:00:59,000 --> 00:01:01,000 a v prípade, že máte pretečeniu pamäte, že nemôžete nájsť, 18 00:01:01,000 --> 00:01:04,000 Tiež majte na pamäti, že vždy keď otvoríte súbor 19 00:01:04,000 --> 00:01:07,000 a ak nechcete zavrieť, to je k pretečeniu pamäte. 20 00:01:07,000 --> 00:01:10,000 >> Mnoho ľudí, ktorí hľadajú nejakú uzol že nie ste uvoľnenie 21 00:01:10,000 --> 00:01:15,000 keď v skutočnosti, že neuzavrela slovník hneď v prvom kroku. 22 00:01:15,000 --> 00:01:19,000 Tiež vám povie, či máte nejaké neplatné číta alebo píše, 23 00:01:19,000 --> 00:01:22,000 čo znamená, že ak sa pokúsite a nastavte hodnotu 24 00:01:22,000 --> 00:01:26,000 že je za koniec haldy a nie je náhodou seg poruchy 25 00:01:26,000 --> 00:01:30,000 ale valgrind ju chytí, ako by ste mali byť skutočne písať tam, 26 00:01:30,000 --> 00:01:33,000 a preto by ste rozhodne nemali mať žiadne z nich jeden. 27 00:01:33,000 --> 00:01:38,000 Ako použiť Valgrind? 28 00:01:38,000 --> 00:01:42,000 Ako použiť Valgrind? 29 00:01:42,000 --> 00:01:45,000 >> Je to všeobecná otázka na 30 00:01:45,000 --> 00:01:49,000 druh spustiť a pozrieť sa na výstupe. 31 00:01:49,000 --> 00:01:51,000 Výstup je zaplavený mnohokrát. 32 00:01:51,000 --> 00:01:54,000 K dispozícii je tiež zábavné chyby, kde, ak máte nejaké hrozne zlú vec 33 00:01:54,000 --> 00:01:59,000 deje v slučke, potom to bude nakoniec hovoriť, "Way príliš veľa chýb. 34 00:01:59,000 --> 00:02:03,000 Chystám sa prestať počítať teraz. " 35 00:02:03,000 --> 00:02:08,000 Je to prakticky textová výstup, ktorý budete musieť analyzovať. 36 00:02:08,000 --> 00:02:13,000 Na konci, bude to vám žiadne úniky pamäti, že máte, 37 00:02:13,000 --> 00:02:16,000 koľko blokov, ktoré môžu byť užitočné, pretože 38 00:02:16,000 --> 00:02:20,000 ak je to jeden blok unfreed, potom je to zvyčajne ľahšie nájsť 39 00:02:20,000 --> 00:02:23,000 ako 1000 blokov unfreed. 40 00:02:23,000 --> 00:02:26,000 1000 bloky unfreed pravdepodobne znamená, že nie ste uvoľnenie 41 00:02:26,000 --> 00:02:30,000 prepojené zoznamy zodpovedajúcim spôsobom, alebo tak niečo. 42 00:02:30,000 --> 00:02:32,000 To je Valgrind. 43 00:02:32,000 --> 00:02:35,000 >> Teraz máme našu sekciu otázok, 44 00:02:35,000 --> 00:02:38,000 ktoré nemusíte sťahovať. 45 00:02:38,000 --> 00:02:41,000 Môžete kliknúť na moje meno a vytiahnite ich do priestoru. 46 00:02:41,000 --> 00:02:44,000 Teraz kliknite na mne. 47 00:02:44,000 --> 00:02:46,000 Revízia 1 bude zásobník, ktorý robíme ako prvý. 48 00:02:46,000 --> 00:02:55,000 Revízia 2 bude front, a Revízia 3 bude jednotlivo prepojený zoznam. 49 00:02:55,000 --> 00:02:58,000 Rozjazd s našou zásobníka. 50 00:02:58,000 --> 00:03:02,000 Ako sa hovorí, že tu, zásobník je jedným z najzákladnejších, 51 00:03:02,000 --> 00:03:07,000 Základné dátové štruktúry informatiky. 52 00:03:07,000 --> 00:03:11,000 Veľmi Typický príklad je 53 00:03:11,000 --> 00:03:13,000 zásobník zásobníkov v jedálni. 54 00:03:13,000 --> 00:03:16,000 Je to v podstate vždy, keď sa zavádza do zásobníka, 55 00:03:16,000 --> 00:03:20,000 niekto povedať, "Oh, ako hromada zásobníkov." 56 00:03:20,000 --> 00:03:22,000 Môžete stohovať zásobníky sa. 57 00:03:22,000 --> 00:03:24,000 Potom, keď idete na vytiahnuť zásobník, 58 00:03:24,000 --> 00:03:31,000 prvý zásobník, ktorý je dostať vytiahol je posledný, ktorý bol uvedený na stack. 59 00:03:31,000 --> 00:03:34,000 Stack i-ako to hovorí tu- 60 00:03:34,000 --> 00:03:37,000 máme segmente pamäti s názvom stack. 61 00:03:37,000 --> 00:03:40,000 A prečo sa tomu hovorí stack? 62 00:03:40,000 --> 00:03:42,000 >> Vzhľadom k tomu, ako zásobníka dátové štruktúry, 63 00:03:42,000 --> 00:03:46,000 to tlačí a objaví zásobníka rámčeky na zásobníku, 64 00:03:46,000 --> 00:03:53,000 kde stack rámy sú ako zvláštne volanie funkcie. 65 00:03:53,000 --> 00:03:57,000 A ako hromada, budete mať vždy vrátiť 66 00:03:57,000 --> 00:04:03,000 z volanie funkcie skôr, ako môžete dostať dole do nižších zásobníka snímok znova. 67 00:04:03,000 --> 00:04:08,000 Nemôžete mať hlavné hovoru foo blokovania hovorov a bar vrátite do hlavného priamo. 68 00:04:08,000 --> 00:04:14,000 Je to vždy dodržať správny zásobník tlačí a praskanie. 69 00:04:14,000 --> 00:04:18,000 Tieto dve operácie, ako som povedal, sú tlak a pop. 70 00:04:18,000 --> 00:04:20,000 Tí sú univerzálne pojmy. 71 00:04:20,000 --> 00:04:26,000 Mali by ste vedieť, push a pop z hľadiska komíny bez ohľadu na to, čo. 72 00:04:26,000 --> 00:04:28,000 Uvidíme fronty sú trochu odlišné. 73 00:04:28,000 --> 00:04:32,000 To nie je naozaj univerzálny termín, ale tlak a pop sú univerzálne pre komíny. 74 00:04:32,000 --> 00:04:34,000 Push len dať na stack. 75 00:04:34,000 --> 00:04:37,000 Pop je zložiť zásobníka. 76 00:04:37,000 --> 00:04:43,000 A tu vidíme máme typedef struct stoh, 77 00:04:43,000 --> 00:04:46,000 takže máme char ** reťazca. 78 00:04:46,000 --> 00:04:51,000 Nenechajte sa bojí žiadnymi **. 79 00:04:51,000 --> 00:04:54,000 To bude skončiť pole reťazcov 80 00:04:54,000 --> 00:04:58,000 alebo pole ukazovateľov na znaky, kde 81 00:04:58,000 --> 00:05:00,000 ukazovatele na znaky bývajú reťazca. 82 00:05:00,000 --> 00:05:05,000 Nemusí to byť reťazce, ale tu, oni budú mať reťazca. 83 00:05:05,000 --> 00:05:08,000 >> Máme pole reťazcov. 84 00:05:08,000 --> 00:05:14,000 Máme veľkosť, ktorá predstavuje, koľko prvky sú v súčasnej dobe na fronte, 85 00:05:14,000 --> 00:05:19,000 a potom máme kapacitu, čo je, koľko prvkov môže byť na zásobníku. 86 00:05:19,000 --> 00:05:22,000 Kapacita by mala začať ako niečo väčšia ako 1, 87 00:05:22,000 --> 00:05:27,000 ale veľkosť bude začať ako 0. 88 00:05:27,000 --> 00:05:36,000 Teraz, tam sú v podstate tri rôzne spôsoby, ako môžete myslieť zásobníka. 89 00:05:36,000 --> 00:05:39,000 No, tam sú pravdepodobne viac, ale dva hlavné spôsoby sú 90 00:05:39,000 --> 00:05:43,000 môžete implementovať pomocou poľa, alebo môžete implementovať pomocou spojovaceho zoznamu. 91 00:05:43,000 --> 00:05:48,000 Prepojené zoznamy sú trochu triviálne, aby sa stohy z 92 00:05:48,000 --> 00:05:51,000 Je veľmi jednoduché, aby sa stoh pomocou prepojených zoznamov, 93 00:05:51,000 --> 00:05:55,000 takže tu, budeme robiť hromadu pomocou matice, 94 00:05:55,000 --> 00:05:59,000 a potom pomocou polí, je tu tiež dva spôsoby, ako si môžete myslieť o tom. 95 00:05:59,000 --> 00:06:01,000 Predtým, keď som povedal, máme kapacitu zásobníka, 96 00:06:01,000 --> 00:06:04,000 takže sa zmestí prvok na zásobníku. 97 00:06:04,000 --> 00:06:09,000 >> Jediný spôsob, že by sa mohlo stať, je, akonáhle hit 10 prvkov, potom ste urobil. 98 00:06:09,000 --> 00:06:13,000 Možno viete, že tam je horná hranica 10 vecí na svete 99 00:06:13,000 --> 00:06:16,000 že už nikdy nebudete musieť viac než 10 vecí, na vášho stacku, 100 00:06:16,000 --> 00:06:20,000 V takom prípade môžete mať hornú hranicu na veľkosti vášho stacku. 101 00:06:20,000 --> 00:06:23,000 Alebo môžete mať svoj stack byť nespútaný, 102 00:06:23,000 --> 00:06:27,000 ale ak robíte poľa, to znamená, že zakaždým trafíte 10 prvkov, 103 00:06:27,000 --> 00:06:29,000 potom budete musieť rast na 20 prvkov, a keď trafíte 20 prvkov, 104 00:06:29,000 --> 00:06:33,000 budete musieť pestovať svoje pole na 30 prvkov alebo 40 prvkov. 105 00:06:33,000 --> 00:06:37,000 Budeš musieť zvýšiť kapacitu, čo je to, čo budeme robiť. 106 00:06:37,000 --> 00:06:40,000 Zakaždým sme dosiahli maximálnej veľkosti nášho stacku, 107 00:06:40,000 --> 00:06:46,000 keď sme sa tlačiť niečo iné na, budeme musieť zvýšiť kapacitu. 108 00:06:46,000 --> 00:06:50,000 Tu sme tlačiť vyhlásené za bool push (char * str). 109 00:06:50,000 --> 00:06:54,000 Char * str je reťazec, ktorý sme tlačí do fronty, 110 00:06:54,000 --> 00:06:58,000 a bool len hovorí, či sa nám to podarilo, alebo nepodarilo. 111 00:06:58,000 --> 00:07:00,000 >> Ako môžeme zlyhať? 112 00:07:00,000 --> 00:07:04,000 Čo je to iba okolnosť, že si môžete myslieť 113 00:07:04,000 --> 00:07:07,000 kde by sme potrebovali vrátiť false? 114 00:07:07,000 --> 00:07:09,000 Jo. 115 00:07:09,000 --> 00:07:12,000 [Študent] Ak je to plné a my sme s použitím skákal implementácie. 116 00:07:12,000 --> 00:07:17,000 Jo, tak ako definujeme-on odpovedal 117 00:07:17,000 --> 00:07:23,000 ak je to plné a my sme s použitím ohraničená implementácie. 118 00:07:23,000 --> 00:07:26,000 Potom budeme určite vráti false. 119 00:07:26,000 --> 00:07:31,000 Akonáhle sme narazili 10 vecí v poli, môžeme nevojde 11, tak sme sa vrátiť false. 120 00:07:31,000 --> 00:07:32,000 Čo keď to je neobmedzený? Jo. 121 00:07:32,000 --> 00:07:38,000 Ak nemôžete rozbaliť pole z nejakého dôvodu. 122 00:07:38,000 --> 00:07:43,000 Jo, takže pamäť je obmedzený zdroj, 123 00:07:43,000 --> 00:07:51,000 a nakoniec, ak budeme tlačiť veci do fronty znova a znova, 124 00:07:51,000 --> 00:07:54,000 budeme sa snažiť a prideliť väčšie pole, aby sa zmestili 125 00:07:54,000 --> 00:07:59,000 väčšia kapacita, a malloc alebo čo sme pomocou sa bude vracať false. 126 00:07:59,000 --> 00:08:02,000 No, bude malloc vráti null. 127 00:08:02,000 --> 00:08:05,000 >> Pamätajte si, že zakaždým ste niekedy volať malloc, mali by ste byť kontrola, či je 128 00:08:05,000 --> 00:08:12,000 vracia null, inak že je správnosť odpočet. 129 00:08:12,000 --> 00:08:17,000 Pretože chceme mať neobmedzenú stack, 130 00:08:17,000 --> 00:08:21,000 jediný prípad, budeme sa vracať false, je keď sa budeme snažiť 131 00:08:21,000 --> 00:08:26,000 zvýšenie kapacity a malloc alebo čokoľvek vráti false. 132 00:08:26,000 --> 00:08:30,000 Potom pop neakceptuje žiadne argumenty, 133 00:08:30,000 --> 00:08:37,000 a vráti reťazec, ktorý je na vrchole zásobníka. 134 00:08:37,000 --> 00:08:41,000 Či už to bolo naposledy tlačil do fronty je to, čo pop sa vracia, 135 00:08:41,000 --> 00:08:44,000 a tiež ju odstráni zo zásobníka. 136 00:08:44,000 --> 00:08:50,000 A všimnite si, že sa vráti hodnotu null, ak nie je nič na stacku. 137 00:08:50,000 --> 00:08:53,000 Je vždy možné, že zásobník je prázdny. 138 00:08:53,000 --> 00:08:55,000 V Jave, ak ste zvyknutí na to, alebo iných jazykov, 139 00:08:55,000 --> 00:09:01,000 snaží sa pop z prázdneho zásobníka môže spôsobiť výnimku alebo tak niečo. 140 00:09:01,000 --> 00:09:09,000 >> Ale v C, null je tak trochu z mnohých prípadov, ako vybavujeme tieto problémy. 141 00:09:09,000 --> 00:09:13,000 Vracať null je, ako budeme znamenať, že zásobník je prázdny. 142 00:09:13,000 --> 00:09:16,000 Pripravili sme kód, ktorý bude testovať svoj stack funkčnosť, 143 00:09:16,000 --> 00:09:19,000 vykonávať tlačiť a pop. 144 00:09:19,000 --> 00:09:23,000 To nebude veľa kódu. 145 00:09:23,000 --> 00:09:40,000 Budem-vlastne, ako to urobíme, náznak, náznak- 146 00:09:40,000 --> 00:09:44,000 ak ste ho ešte nevideli, malloc nie je jediná funkcia, 147 00:09:44,000 --> 00:09:47,000 , Ktoré prideľuje pamäť na halde pre vás. 148 00:09:47,000 --> 00:09:51,000 Existuje rodina Alloc funkcií. 149 00:09:51,000 --> 00:09:53,000 Prvá z nich je malloc, ktorý ste zvyknutí. 150 00:09:53,000 --> 00:09:56,000 Potom je tu calloc, ktorý robí to isté ako malloc, 151 00:09:56,000 --> 00:09:59,000 ale to bude nulu všetko za vás. 152 00:09:59,000 --> 00:10:04,000 Ak ste niekedy chceli nastaviť všetko na nulu po mallocing niečo 153 00:10:04,000 --> 00:10:06,000 mali by ste sa práve používa calloc v prvom rade miesto písania 154 00:10:06,000 --> 00:10:09,000 pre sláčiky na nulu sa na celý blok pamäte. 155 00:10:09,000 --> 00:10:15,000 >> Realloc je ako malloc a má veľa zvláštnych prípadoch, 156 00:10:15,000 --> 00:10:19,000 ale v podstate to, čo robí, je realloc 157 00:10:19,000 --> 00:10:24,000 to trvá ukazovateľ, ktorý už bola pridelená. 158 00:10:24,000 --> 00:10:27,000 Realloc je funkcia, ktorú chcete platiť pozornosť tu. 159 00:10:27,000 --> 00:10:31,000 Trvá to ukazovateľ, ktorý už vrátil z malloc. 160 00:10:31,000 --> 00:10:35,000 Povedzme, že ste požiadať malloc ukazovateľ na 10 bajtov. 161 00:10:35,000 --> 00:10:38,000 Neskôr si uvedomíte, že ste chceli 20 bajtov, 162 00:10:38,000 --> 00:10:42,000 takže volať realloc na tomto ukazovateli s 20 bajtov, 163 00:10:42,000 --> 00:10:47,000 a realloc automaticky skopírovať všetko, čo pre vás. 164 00:10:47,000 --> 00:10:51,000 Ak ste práve volal malloc znovu, ako by som mal blok 10 bajtov. 165 00:10:51,000 --> 00:10:53,000 Teraz potrebujem blok 20 bytov, 166 00:10:53,000 --> 00:10:58,000 takže keď som malloc 20 bajtov, potom musím ručne skopírovať cez 10 bajtov z prvých vecí, 167 00:10:58,000 --> 00:11:01,000 do druhej veci a potom bez prvá vec. 168 00:11:01,000 --> 00:11:04,000 Realloc sa bude zaoberať, že pre vás. 169 00:11:04,000 --> 00:11:11,000 >> Všimnite si, že podpis bude void *, 170 00:11:11,000 --> 00:11:15,000 ktorý je len vracia ukazovateľ na blok pamäte, 171 00:11:15,000 --> 00:11:17,000 potom void * ptr. 172 00:11:17,000 --> 00:11:22,000 Môžete si myslieť void * ako všeobecný ukazovateľ. 173 00:11:22,000 --> 00:11:27,000 Všeobecne platí, že nikdy riešiť void *, 174 00:11:27,000 --> 00:11:30,000 ale malloc vracia void *, a potom je to len použiť ako 175 00:11:30,000 --> 00:11:34,000 to vlastne bude char *. 176 00:11:34,000 --> 00:11:37,000 Predchádzajúci void *, ktorý bol vrátený malloc 177 00:11:37,000 --> 00:11:41,000 teraz bude odovzdaný realloc, a potom sa veľkosť 178 00:11:41,000 --> 00:11:49,000 je nový počet bajtov, ktoré chcete priradiť, takže vaša nová kapacita. 179 00:11:49,000 --> 00:11:57,000 Dám vám pár minút, a to v našom priestore. 180 00:11:57,000 --> 00:12:02,000 Začnite s revízia 1. 181 00:12:16,000 --> 00:12:21,000 Zastavím ťa po snáď o dosť času vykonať Push, 182 00:12:21,000 --> 00:12:24,000 a potom ti dám ďalšie prestávku robiť pop. 183 00:12:24,000 --> 00:12:27,000 Ale to naozaj nie je toľko kód vôbec. 184 00:12:27,000 --> 00:12:35,000 Najviac kód je pravdepodobne rozširuje veci, rozšírenie kapacity. 185 00:12:35,000 --> 00:12:39,000 Dobre, žiadny tlak, aby sa úplne hotový, 186 00:12:39,000 --> 00:12:47,000 ale tak dlho, ako sa cítite, ako že ste na správnej ceste, to je dobrý. 187 00:12:47,000 --> 00:12:53,000 >> Má niekto nejaký kód sa cíti dobre s mojím vytiahnutí? 188 00:12:53,000 --> 00:12:59,000 Jo, budem, ale má niekto nejaké kód, ktorý som si vytiahnuť hore? 189 00:12:59,000 --> 00:13:05,000 Dobre, môžete začať, uložiť ju, nech je to čokoľvek? 190 00:13:05,000 --> 00:13:09,000 Vždy zabudnem, že krok. 191 00:13:09,000 --> 00:13:15,000 Dobre, pri pohľade na tlak, 192 00:13:15,000 --> 00:13:18,000 chceš vysvetliť svoj kód? 193 00:13:18,000 --> 00:13:24,000 [Študent] Po prvé, som zväčšil veľkosť. 194 00:13:24,000 --> 00:13:28,000 Myslím, že by som snáď mala mať, že-rovnako, som zväčšil veľkosť, 195 00:13:28,000 --> 00:13:31,000 a ja či to je menej než kapacita. 196 00:13:31,000 --> 00:13:36,000 A ak je to menej, ako je kapacita, pridám do poľa, že už máme. 197 00:13:36,000 --> 00:13:42,000 A ak to nie je, som vynásobte kapacitu 2, 198 00:13:42,000 --> 00:13:50,000 a ja prerozdeliť reťazca pole, aby niečo s väčšou kapacitou veľkosti teraz. 199 00:13:50,000 --> 00:13:55,000 A potom, ak sa to nepodarí, poviem užívateľa a vráti false, 200 00:13:55,000 --> 00:14:04,000 a ak to bude v poriadku, potom som dal reťazec v novom mieste. 201 00:14:04,000 --> 00:14:07,000 >> [Rob B.] Tiež si všimnite, že sme použili pekný bitovú operátor tu 202 00:14:07,000 --> 00:14:09,000 vynásobiť 2. 203 00:14:09,000 --> 00:14:11,000 Nezabudnite, posun doľava sa vždycky sa vynásobí 2. 204 00:14:11,000 --> 00:14:15,000 Právo posun je rozdelený 2 tak dlho, ako si spomeniete, že to znamená, 205 00:14:15,000 --> 00:14:18,000 vydeľte 2 ako v celej číslo deleno 2. 206 00:14:18,000 --> 00:14:20,000 To by mohlo skrátiť na 1 tu alebo tam. 207 00:14:20,000 --> 00:14:26,000 Ale posun doľava o 1 je vždy potrebné vynásobiť 2, 208 00:14:26,000 --> 00:14:32,000 ak pretečeniu hranice integer, a potom to nebude. 209 00:14:32,000 --> 00:14:34,000 Strana komentár. 210 00:14:34,000 --> 00:14:39,000 Rád robím-to nebude meniť kódovanie akýmkoľvek spôsobom, 211 00:14:39,000 --> 00:14:48,000 ale ja by som niečo také robiť. 212 00:14:48,000 --> 00:14:51,000 Je to vlastne bude robiť to mierne dlhšia. 213 00:15:04,000 --> 00:15:08,000 Možno to nie je dokonalé prípad to ukázať, 214 00:15:08,000 --> 00:15:14,000 ale ja by som segmente do týchto blokov- 215 00:15:14,000 --> 00:15:17,000 v poriadku, pokiaľ túto možnosť, ak sa stane, a potom budem robiť niečo, 216 00:15:17,000 --> 00:15:19,000 a potom sa vykonáva funkcie. 217 00:15:19,000 --> 00:15:22,000 Nepotrebujem, aby potom prejdite oči celú cestu dole funkciu 218 00:15:22,000 --> 00:15:25,000 vidieť, čo sa stane po ostatnému. 219 00:15:25,000 --> 00:15:27,000 Je to v prípade, že ak sa stane, a potom som sa vrátiť. 220 00:15:27,000 --> 00:15:30,000 To tiež má pekný výhodu všetkého, nad tento rámec 221 00:15:30,000 --> 00:15:33,000 je teraz posunula ešte raz doľava. 222 00:15:33,000 --> 00:15:40,000 Ja už treba, ak ste niekedy v blízkosti smiešne dlhý vedenie, 223 00:15:40,000 --> 00:15:45,000 potom tie 4 bytov môžu pomôcť, a tiež viac vľavo je niečo, 224 00:15:45,000 --> 00:15:48,000 menej ohromený sa cítili, keby chceli, v poriadku, musím si pamätať 225 00:15:48,000 --> 00:15:53,000 Som v súčasnej dobe v cykle while vnútri z iného vnútri slučky for. 226 00:15:53,000 --> 00:15:58,000 Kdekoľvek si môžete urobiť toto daňové priznanie okamžite, som nieco ako. 227 00:15:58,000 --> 00:16:05,000 Je úplne dobrovoľné a nie je v žiadnom prípade očakávať. 228 00:16:05,000 --> 00:16:12,000 >> [Študent] Mal by byť veľkosť - v nepodarí stave? 229 00:16:12,000 --> 00:16:19,000 Fail podmienka je tu sa nám nepodarilo realloc, takže áno. 230 00:16:19,000 --> 00:16:22,000 Všimnite si, ako v nezhodu stave, pravdepodobne, 231 00:16:22,000 --> 00:16:26,000 ak sme voľní veci neskôr, budeme vždy zlyhanie 232 00:16:26,000 --> 00:16:29,000 bez ohľadu na to, koľkokrát sa snažíme tlačiť niečo. 233 00:16:29,000 --> 00:16:32,000 Ak budeme neustále tlačí, držíme increment veľkosti, 234 00:16:32,000 --> 00:16:36,000 aj keď sme sa, že uvedenie nič do zásobníka. 235 00:16:36,000 --> 00:16:39,000 Zvyčajne nemáme zvýšite veľkosť až 236 00:16:39,000 --> 00:16:43,000 potom, čo sme úspešne ju na zásobníku. 237 00:16:43,000 --> 00:16:50,000 Urobili by sme to, povedzme, buď tu a tu. 238 00:16:50,000 --> 00:16:56,000 A potom miesto toho povedal s.size ≤ kapacitu, je to menej, než kapacita, 239 00:16:56,000 --> 00:17:01,000 len preto, že sme sa presťahovali, kde bolo všetko. 240 00:17:01,000 --> 00:17:07,000 >> A pamätajte, jediné miesto, ktoré by sme mohli prípadne vrátiť false 241 00:17:07,000 --> 00:17:14,000 je tu, kde realloc vrátil null, 242 00:17:14,000 --> 00:17:19,000 a ak ste náhodou na pamäti štandardnej chyby, 243 00:17:19,000 --> 00:17:22,000 Možno by ste mohli zvážiť tento prípad, kedy chcete vytlačiť štandardné chybu, 244 00:17:22,000 --> 00:17:26,000 tak fprintf stderr, nie len tlačiť priamo na štandardný výstup. 245 00:17:26,000 --> 00:17:31,000 Opäť, to nie je očakávania, ale ak je to chyba, 246 00:17:31,000 --> 00:17:41,000 zadajte printf, potom budete chcieť, aby sa vytlačilo na štandardný chybový miesto štandardný výstup. 247 00:17:41,000 --> 00:17:44,000 >> Každý, kto má niečo iného všimnúť? Áno. 248 00:17:44,000 --> 00:17:47,000 [Študent] Môžeš ísť cez [nepočuteľnú]? 249 00:17:47,000 --> 00:17:55,000 [Rob B.] Áno, skutočná binariness to, alebo len to, čo to je? 250 00:17:55,000 --> 00:17:57,000 [Študent] Takže vynásobte ju 2? 251 00:17:57,000 --> 00:17:59,000 [Rob B.] Jo, v podstate. 252 00:17:59,000 --> 00:18:11,000 V binárnom krajine, vždy máme sadu číslic. 253 00:18:11,000 --> 00:18:22,000 Presun tento ľavej do 1 podstate vloží ho sem na pravej strane. 254 00:18:22,000 --> 00:18:25,000 Späť na toto, len pripomenutie, že všetko v binárnej 255 00:18:25,000 --> 00:18:28,000 je sila 2, tak to predstavuje 2 na 0, 256 00:18:28,000 --> 00:18:30,000 to 2 na 1, to 2 na 2. 257 00:18:30,000 --> 00:18:33,000 Vložením 0 na pravej strane hneď, len sme posun všetko preč. 258 00:18:33,000 --> 00:18:38,000 Čo sa vtedy 2 k 0 je teraz 2 k 1, sú 2 na 2. 259 00:18:38,000 --> 00:18:41,000 Na pravej strane, ktoré sme vložený 260 00:18:41,000 --> 00:18:44,000 je nutne bude 0, 261 00:18:44,000 --> 00:18:46,000 ktorý dáva zmysel. 262 00:18:46,000 --> 00:18:49,000 Ak ste niekedy násobiť číslo 2, nebude to skončiť nepárny, 263 00:18:49,000 --> 00:18:54,000 tak 2 k 0 mieste by mala byť 0, 264 00:18:54,000 --> 00:18:59,000 a to je to, čo som napoly varoval predtým, je, ak to náhodou posunúť 265 00:18:59,000 --> 00:19:01,000 za počet bitov v celé číslo, 266 00:19:01,000 --> 00:19:04,000 potom 1 skončí až bude preč. 267 00:19:04,000 --> 00:19:10,000 To je jediná starosť, ak sa stalo, že sa rokovania s naozaj veľkými kapacitami. 268 00:19:10,000 --> 00:19:15,000 Ale v tomto bode, potom máte čo do činenia s radom miliárd vecí, 269 00:19:15,000 --> 00:19:25,000 ktoré sa nemusia vojsť do pamäti rovnako. 270 00:19:25,000 --> 00:19:31,000 >> Teraz sa dostaneme k popu, ktorý je ešte jednoduchšie. 271 00:19:31,000 --> 00:19:36,000 Dalo by sa to urobiť ako, ak ste náhodou pop veľa, 272 00:19:36,000 --> 00:19:38,000 a teraz si na polovičnú kapacitu znova. 273 00:19:38,000 --> 00:19:42,000 Dalo by sa realloc zmenšiť množstvo pamäte máte, 274 00:19:42,000 --> 00:19:47,000 ale nemusíte sa báť, že, takže jediný realloc prípad bude 275 00:19:47,000 --> 00:19:50,000 rastúce pamäte, nikdy zmenšuje pamäť, 276 00:19:50,000 --> 00:19:59,000 ktorá sa chystá urobiť pop super ľahké. 277 00:19:59,000 --> 00:20:02,000 Teraz fronty, ktoré sa chystáte byť ako komíny, 278 00:20:02,000 --> 00:20:06,000 ale poradie, ktoré budete mať veci sa obráti. 279 00:20:06,000 --> 00:20:10,000 Typický príklad frontu je linka, 280 00:20:10,000 --> 00:20:12,000 takže myslím, že ak ste boli English, by som povedal, 281 00:20:12,000 --> 00:20:17,000 typický príklad frontu je fronta. 282 00:20:17,000 --> 00:20:22,000 Tak ako čiary, ak ste prvý človek v súlade, 283 00:20:22,000 --> 00:20:24,000 môžete očakávať byť prvá osoba z rady. 284 00:20:24,000 --> 00:20:31,000 Ak ste ten posledný človek v súlade, sa bude posledný, kto opraviť. 285 00:20:31,000 --> 00:20:35,000 Hovoríme, že FIFO vzorec, vzhľadom k tomu, zásobník bol LIFO vzorec. 286 00:20:35,000 --> 00:20:40,000 Tieto slová sú veľmi univerzálne. 287 00:20:40,000 --> 00:20:46,000 >> Rovnako ako zásobníky a na rozdiel od polí, fronty zvyčajne neumožňujú prístup k prvkom v strede. 288 00:20:46,000 --> 00:20:50,000 Tu, zásobník, máme tlak a pop. 289 00:20:50,000 --> 00:20:54,000 Tu sme náhodou volali im Zaradí a dequeue. 290 00:20:54,000 --> 00:20:58,000 Tiež som počul len posun a unshift. 291 00:20:58,000 --> 00:21:02,000 Počul som ľudí hovoriť tlak a pop sa vzťahujú aj na front. 292 00:21:02,000 --> 00:21:05,000 Počul som vložiť, odstrániť, 293 00:21:05,000 --> 00:21:11,000 tak tlačiť a pop, keď hovoríte o komíny, sa tlačí a objavovať. 294 00:21:11,000 --> 00:21:16,000 Ak hovoríte o front, môžete vybrať slová, ktoré chcete použiť 295 00:21:16,000 --> 00:21:23,000 pre vloženie a vybratie, a tam je žiadny konsenzus o tom, čo by malo byť nazývaný. 296 00:21:23,000 --> 00:21:27,000 Ale tu máme Zaradí a dequeue. 297 00:21:27,000 --> 00:21:37,000 Teraz struct vyzerá takmer zhodný s zásobníka struct. 298 00:21:37,000 --> 00:21:40,000 Ale musíme sledovať hlavy. 299 00:21:40,000 --> 00:21:44,000 Myslím, že to hovorí tu, ale prečo potrebujeme hlavu? 300 00:21:53,000 --> 00:21:57,000 Prototypy sú v podstate totožné s tlačiť a pop. 301 00:21:57,000 --> 00:21:59,000 Môžete si ju predstaviť ako push a pop. 302 00:21:59,000 --> 00:22:08,000 Rozdiel je iba v pop sa vracia-miesto posledného, ​​to sa vracia prvý. 303 00:22:08,000 --> 00:22:12,000 2, 1, 3, 4, alebo niečo. 304 00:22:12,000 --> 00:22:14,000 A tu je začiatok. 305 00:22:14,000 --> 00:22:17,000 Naša fronta je úplne plná, takže to štyri elementy v ňom. 306 00:22:17,000 --> 00:22:21,000 Koniec našej frontu je v súčasnej dobe 2, 307 00:22:21,000 --> 00:22:24,000 a teraz ideme vložiť niečo iné. 308 00:22:24,000 --> 00:22:29,000 >> Keď chceme vložiť, aby niečo iné, čo sme urobili pre zásobníka verzii 309 00:22:29,000 --> 00:22:36,000 je, že sme rozšírili našu blok pamäte. 310 00:22:36,000 --> 00:22:40,000 V čom je problém s tým? 311 00:22:40,000 --> 00:22:45,000 [Študent] Presuniete 2. 312 00:22:45,000 --> 00:22:51,000 Čo som hovoril o konci fronty, 313 00:22:51,000 --> 00:22:57,000 to nedáva zmysel, že začneme na 1, 314 00:22:57,000 --> 00:23:01,000 potom chceme Dequeue 1, potom Dequeue 3, potom Dequeue 4, 315 00:23:01,000 --> 00:23:05,000 potom Dequeue 2, potom dequeue túto. 316 00:23:05,000 --> 00:23:08,000 Nemôžeme použiť realloc teraz, 317 00:23:08,000 --> 00:23:11,000 alebo prinajmenšom, budete musieť použiť realloc iným spôsobom. 318 00:23:11,000 --> 00:23:15,000 Ale pravdepodobne by nemal používať realloc. 319 00:23:15,000 --> 00:23:18,000 Budete musieť ručne skopírovať svoju pamäť. 320 00:23:18,000 --> 00:23:21,000 >> Existujú dve funkcie pre kopírovanie pamäte. 321 00:23:21,000 --> 00:23:25,000 Je tu memcopy a memmove. 322 00:23:25,000 --> 00:23:29,000 Ja som v súčasnej dobe čítania manuálové stránky vidieť, ktorý z nich budete chcieť použiť. 323 00:23:29,000 --> 00:23:35,000 Dobre, memcopy, rozdiel je 324 00:23:35,000 --> 00:23:38,000 že memcopy a memmove, jeden sa stará o veci správne 325 00:23:38,000 --> 00:23:41,000 kam kopírovanie do oblasti, ktorá sa stane prekrývať oblasť 326 00:23:41,000 --> 00:23:46,000 kopírujete z 327 00:23:46,000 --> 00:23:50,000 Memcopy nespracováva ju. Memmove robí. 328 00:23:50,000 --> 00:23:59,000 Môžete myslieť na problém ako- 329 00:23:59,000 --> 00:24:09,000 povedzme, že chcem kopírovať toho chlapa, 330 00:24:09,000 --> 00:24:13,000 títo štyria s tymto chlapom cez. 331 00:24:13,000 --> 00:24:16,000 Na konci, čo Pole by malo vyzerať 332 00:24:16,000 --> 00:24:26,000 Po kopírovanie je 2, 1, 2, 1, 3, 4, a potom niektoré veci na konci. 333 00:24:26,000 --> 00:24:29,000 To je však závisí na poradí, v ktorom sa vlastne kopírovať, 334 00:24:29,000 --> 00:24:32,000 pretože ak sa neberú do úvahy skutočnosť, že región sme kopírovanie do 335 00:24:32,000 --> 00:24:35,000 prekrýva ten sme kopírovanie, 336 00:24:35,000 --> 00:24:46,000 potom by sme mohli urobiť ako začiatok tu, skopírujte 2 do miesta chceme ísť, 337 00:24:46,000 --> 00:24:52,000 potom sa presunúť naše ukazovatele vpred. 338 00:24:52,000 --> 00:24:56,000 >> Teraz budeme mať tu a tu, a teraz chceme kopírovať 339 00:24:56,000 --> 00:25:04,000 tento chlap nad tymto chlapíkom a presunúť naše ukazovatele vpred. 340 00:25:04,000 --> 00:25:07,000 Čo budeme nakoniec dostať je 2, 1, 2, 1, 2, 1 341 00:25:07,000 --> 00:25:10,000 miesto zodpovedajúce 2, 1, 2, 1, 3, 4, pretože 342 00:25:10,000 --> 00:25:15,000 2, 1 prehlasovali pôvodné 3, 4. 343 00:25:15,000 --> 00:25:19,000 Memmove úchytky, ktoré správne. 344 00:25:19,000 --> 00:25:23,000 V tomto prípade, v podstate len vždy memmove 345 00:25:23,000 --> 00:25:26,000 pretože spracováva správne. 346 00:25:26,000 --> 00:25:29,000 To zvyčajne nevykonáva žiadne horšie. 347 00:25:29,000 --> 00:25:32,000 Myšlienka je miesto od začiatku a kopírovanie týmto spôsobom 348 00:25:32,000 --> 00:25:35,000 ako sme práve urobili tu, začína od konca, a kopíruje, 349 00:25:35,000 --> 00:25:38,000 a v tomto prípade, môžete mať nikdy problém. 350 00:25:38,000 --> 00:25:40,000 Neexistuje žiadny výkon stratená. 351 00:25:40,000 --> 00:25:47,000 Vždy používajte memmove. Nikdy starosti memcopy. 352 00:25:47,000 --> 00:25:51,000 A to je miesto, kde budete musieť zvlášť memmove 353 00:25:51,000 --> 00:26:01,000 zabalené-okolo časť vašej fronte. 354 00:26:01,000 --> 00:26:04,000 Žiadne starosti, ak nie je úplne hotový. 355 00:26:04,000 --> 00:26:10,000 To je ťažšie, ako zásobník, tlačenie, a pop. 356 00:26:10,000 --> 00:26:15,000 >> Každý, kto má akýkoľvek kód, ktorý sme mohli pracovať s? 357 00:26:15,000 --> 00:26:21,000 Aj keď úplne neúplné? 358 00:26:21,000 --> 00:26:23,000 [Študent] Jo, je to úplne neúplné, hoci. 359 00:26:23,000 --> 00:26:27,000 Úplne neúplný je v poriadku, tak dlho, ako budeme-môžete uložiť revíziu? 360 00:26:27,000 --> 00:26:32,000 Zabudol som, že každý jednotlivý čas. 361 00:26:32,000 --> 00:26:39,000 Dobre, ignoruje, čo sa stane, keď potrebujeme zmeniť veľkosť veci. 362 00:26:39,000 --> 00:26:42,000 Úplne ignorovať Resize. 363 00:26:42,000 --> 00:26:49,000 Vysvetlite tento kód. 364 00:26:49,000 --> 00:26:54,000 Som kontrolu v prvom rade v prípade, že je veľkosť menšia ako kópie prvom rade 365 00:26:54,000 --> 00:27:01,000 a potom po tom, mám vložiť-beriem hlavu + veľkosť, 366 00:27:01,000 --> 00:27:05,000 a môžem uistiť, že sa zalomia okolo kapacita poľa, 367 00:27:05,000 --> 00:27:08,000 a mám vložiť nový reťazec na tejto pozícii. 368 00:27:08,000 --> 00:27:12,000 Potom som zväčšiť veľkosť a vráti true. 369 00:27:12,000 --> 00:27:22,000 >> [Rob B.] To je určite jeden z tých prípadov, kedy budete chcieť používať mod. 370 00:27:22,000 --> 00:27:25,000 Akékoľvek prípade, kedy ste si obal okolo, ak si myslíte, že obal okolo, 371 00:27:25,000 --> 00:27:29,000 bezprostrednej myšlienka by mala byť mod. 372 00:27:29,000 --> 00:27:36,000 Ako rýchly optimalizácia / váš kód jeden riadok kratší, 373 00:27:36,000 --> 00:27:42,000 Všimnite si, že riadok bezprostredne po tohoto 374 00:27:42,000 --> 00:27:53,000 je len veľkosť + +, takže je zlúčiť, aby do tohto riadku, veľkosť + +. 375 00:27:53,000 --> 00:27:58,000 Teraz tu máme prípad 376 00:27:58,000 --> 00:28:01,000 kde nemáme dostatok pamäte, 377 00:28:01,000 --> 00:28:05,000 takže sme sa zvýšiť naše kapacity 2. 378 00:28:05,000 --> 00:28:09,000 Myslím, že by ste mohli mať rovnaký problém tu, ale môžeme ignorovať to teraz, 379 00:28:09,000 --> 00:28:13,000 kde, ak sa vám nepodarilo zvýšiť svoju schopnosť, 380 00:28:13,000 --> 00:28:18,000 potom budete chcieť znížiť kapacitu 2 znovu. 381 00:28:18,000 --> 00:28:24,000 Ďalšia krátka poznámka je, rovnako ako vy môžete urobiť + =, 382 00:28:24,000 --> 00:28:30,000 môžete tiež urobiť << =. 383 00:28:30,000 --> 00:28:43,000 Takmer všetko môže ísť pred rovná, + =, | =, & =, << =. 384 00:28:43,000 --> 00:28:52,000 Char * new je náš nový blok pamäte. 385 00:28:52,000 --> 00:28:55,000 Oh, tu. 386 00:28:55,000 --> 00:29:02,000 >> Čo si ľudia myslia o typu nášho nového bloku pamäte? 387 00:29:02,000 --> 00:29:06,000 [Študent] To by malo byť char **. 388 00:29:06,000 --> 00:29:12,000 Myslenie späť k nášmu struct sem, 389 00:29:12,000 --> 00:29:14,000 Reťazca je to, čo sme prerozdelenie. 390 00:29:14,000 --> 00:29:21,000 Robíme celú novú dynamické úložisko pre prvky vo fronte. 391 00:29:21,000 --> 00:29:25,000 Čo budeme sa zaraďovania na zoznam reťazcov je to, čo sme mallocing teraz, 392 00:29:25,000 --> 00:29:30,000 a tak nové bude char **. 393 00:29:30,000 --> 00:29:34,000 Je to bude pole reťazcov. 394 00:29:34,000 --> 00:29:38,000 Tak čo je to v prípade, ktorý sa budeme vracať false? 395 00:29:38,000 --> 00:29:41,000 [Študent] Mali by sme robiť char *? 396 00:29:41,000 --> 00:29:44,000 [Rob B.] Áno, dobrý nápad. 397 00:29:44,000 --> 00:29:46,000 [Študent] Čo to bolo? 398 00:29:46,000 --> 00:29:49,000 [Rob B.] Chceli sme urobiť veľkosť char *, pretože sme už- 399 00:29:49,000 --> 00:29:53,000 To by v skutočnosti bolo veľmi veľký problém, pretože sizeof (char) bude 1. 400 00:29:53,000 --> 00:29:55,000 Sizeof char * bude 4, 401 00:29:55,000 --> 00:29:58,000 takže veľa krát, keď máte čo do činenia s ints, 402 00:29:58,000 --> 00:30:01,000 máte tendenciu sa dostať preč s ním, pretože veľkosť int a veľkosti int * 403 00:30:01,000 --> 00:30:04,000 na 32-bitovom systéme sa bude to isté. 404 00:30:04,000 --> 00:30:09,000 Ale tu, sizeof (char) a sizeof (char *) sú teraz bude to isté. 405 00:30:09,000 --> 00:30:15,000 >> Čo je okolnosť, kedy sa vrátime false? 406 00:30:15,000 --> 00:30:17,000 [Študent] Nové je null. 407 00:30:17,000 --> 00:30:23,000 Jo, keď nový je null, vraciame false, 408 00:30:23,000 --> 00:30:34,000 a ja idem hodiť tu- 409 00:30:34,000 --> 00:30:37,000 [Študent] [nepočuteľné] 410 00:30:37,000 --> 00:30:39,000 [Rob B.] Jo, to je v poriadku. 411 00:30:39,000 --> 00:30:46,000 Dalo by sa buď urobiť 2 krát kapacity alebo kapacity shift 1 a potom len nastaviť to sem, alebo čo. 412 00:30:46,000 --> 00:30:52,000 Urobíme to, ako sme to. 413 00:30:52,000 --> 00:30:56,000 Kapacita >> = 1. 414 00:30:56,000 --> 00:31:08,000 A už nikdy musieť obávať, že 1 je miesto 415 00:31:08,000 --> 00:31:12,000 pretože si odišiel posunuté o 1, takže sa 1 miesto je nutne 0, 416 00:31:12,000 --> 00:31:16,000 tak správne radenie o 1, ste stále bude v poriadku. 417 00:31:16,000 --> 00:31:19,000 [Študent] Potrebujete si urobiť pred návratom? 418 00:31:19,000 --> 00:31:29,000 [Rob B.] Áno, to je absolútne žiadny zmysel. 419 00:31:29,000 --> 00:31:36,000 >> Teraz predpokladajme, že budeme nakoniec vracia hodnotu true do konca. 420 00:31:36,000 --> 00:31:39,000 Spôsob, akým budeme robiť tieto memmoves, 421 00:31:39,000 --> 00:31:45,000 musíme byť opatrní s tým, ako robíme. 422 00:31:45,000 --> 00:31:50,000 Má niekto nejaké návrhy na to, ako robíme? 423 00:32:17,000 --> 00:32:21,000 Tu je náš štart. 424 00:32:21,000 --> 00:32:28,000 Je samozrejmé, chceme od začiatku znovu 425 00:32:28,000 --> 00:32:35,000 a kopírovanie vecí v odtiaľ, 1, 3, 4, 2. 426 00:32:35,000 --> 00:32:41,000 Ako to robíte, že? 427 00:32:41,000 --> 00:32:52,000 Po prvé, musím sa pozrieť na manuálové stránke pre memmove znova. 428 00:32:52,000 --> 00:32:57,000 Memmove, poradie argumentov je vždy dôležité. 429 00:32:57,000 --> 00:33:01,000 Chceme, aby naše ciele prvý, zdroj druhý, veľkosť tretí. 430 00:33:01,000 --> 00:33:06,000 Existuje mnoho funkcií, ktoré zvrátia zdroj a cieľ. 431 00:33:06,000 --> 00:33:11,000 Destinácia, zdroj býva konzistentné trochu. 432 00:33:17,000 --> 00:33:21,000 Move, čo je to vracia? 433 00:33:21,000 --> 00:33:27,000 Vracia ukazovateľ na miesto určenia, z akéhokoľvek dôvodu budete chcieť, že. 434 00:33:27,000 --> 00:33:32,000 Som si obrázok prečítať, ale chceme presťahovať do nášho cieľa. 435 00:33:32,000 --> 00:33:35,000 >> Čo je naším cieľom bude? 436 00:33:35,000 --> 00:33:37,000 [Študent] Nové. 437 00:33:37,000 --> 00:33:39,000 [Rob B.] Áno, a kde sme kopírovanie? 438 00:33:39,000 --> 00:33:43,000 Prvá vec, ktorú kopírujete, je to 1, 3, 4. 439 00:33:43,000 --> 00:33:50,000 Čo je-to 1, 3, 4. 440 00:33:50,000 --> 00:33:55,000 Aká je adresa tohto 1? 441 00:33:55,000 --> 00:33:58,000 Aká je adresa tohto 1? 442 00:33:58,000 --> 00:34:01,000 [Študent] [nepočuteľné] 443 00:34:01,000 --> 00:34:03,000 [Rob B.] Head + adresa prvého prvku. 444 00:34:03,000 --> 00:34:05,000 Ako sa dostať na prvý prvok v poli? 445 00:34:05,000 --> 00:34:10,000 [Študent] Queue. 446 00:34:10,000 --> 00:34:15,000 [Rob B.] Áno, q.strings. 447 00:34:15,000 --> 00:34:20,000 Pamätajte si, že tu, naša hlava je 1. 448 00:34:20,000 --> 00:34:24,000 Látat to. Len si myslím, že je to ako mávnutím čarovného prútika, 449 00:34:24,000 --> 00:34:29,000 Tu, naša hlava je 1. Chystám sa zmeniť môj farbu taky. 450 00:34:29,000 --> 00:34:36,000 A tu je reťazca. 451 00:34:36,000 --> 00:34:41,000 To, môžeme buď napísať to rovnako ako my tu 452 00:34:41,000 --> 00:34:43,000 s hlavami + q.strings. 453 00:34:43,000 --> 00:34:51,000 Mnoho ľudí tiež zapisovať a q.strings [hlava]. 454 00:34:51,000 --> 00:34:55,000 To nie je naozaj nič menej efektívny. 455 00:34:55,000 --> 00:34:58,000 Môžete si myslieť, že to, ako ste sa dereferencing ju a potom sa dostať na adresu, 456 00:34:58,000 --> 00:35:04,000 ale kompilátor bude prekladať, čo sme mali predtým tak, q.strings + hlava. 457 00:35:04,000 --> 00:35:06,000 Či tak alebo onak si chcete myslieť na to. 458 00:35:06,000 --> 00:35:11,000 >> A koľko bytov si chceme kopírovať? 459 00:35:11,000 --> 00:35:15,000 [Študent] Kapacita - hlava. 460 00:35:15,000 --> 00:35:18,000 Kapacita - hlava. 461 00:35:18,000 --> 00:35:21,000 A potom môžete vždy zapísať príklad 462 00:35:21,000 --> 00:35:23,000 zistiť, či je to pravda. 463 00:35:23,000 --> 00:35:26,000 [Študent] Je potrebné rozdeliť do 2 potom. 464 00:35:26,000 --> 00:35:30,000 Jo, takže myslím, že by sme mohli použiť veľkosť. 465 00:35:30,000 --> 00:35:35,000 Stále máme veľkosť je- 466 00:35:35,000 --> 00:35:39,000 pomocou veľkosti, musíme veľkosť rovnakú ako 4. 467 00:35:39,000 --> 00:35:42,000 Naša veľkosť je 4. Naša hlava je 1. 468 00:35:42,000 --> 00:35:46,000 Chceme skopírovať tieto 3 prvky. 469 00:35:46,000 --> 00:35:54,000 To je príčetnosť skontrolujte, či veľkosť - hlava je správne 3. 470 00:35:54,000 --> 00:35:58,000 A prichádza sem, ako sme povedali skôr, 471 00:35:58,000 --> 00:36:00,000 ak sme použili kapacitu, potom by sme museli deliť 2 472 00:36:00,000 --> 00:36:04,000 preto, že sme už stalo našej schopnosti, a tak namiesto toho, budeme používať veľkosť. 473 00:36:11,000 --> 00:36:13,000 Že kópií, ktoré porcie. 474 00:36:13,000 --> 00:36:18,000 Teraz musíme skopírovať druhú časť, je časť, ktorá je naľavo od začiatku. 475 00:36:18,000 --> 00:36:28,000 >> To bude memmove do akej pozícii? 476 00:36:28,000 --> 00:36:32,000 [Študent] Plus veľkosť - hlava. 477 00:36:32,000 --> 00:36:38,000 Áno, tak sme už skopírované vo veľkosti - hlava bajtov, 478 00:36:38,000 --> 00:36:43,000 a tak tam, kde chceme skopírovať zostávajúce bajtov je nový 479 00:36:43,000 --> 00:36:48,000 a potom veľkosť mínus rovnako, počet bajtov sme už skopírované a 480 00:36:48,000 --> 00:36:52,000 A potom, kde sme kopírovanie? 481 00:36:52,000 --> 00:36:54,000 [Študent] Q.strings [0]. 482 00:36:54,000 --> 00:36:56,000 [Rob B.] Áno, q.strings. 483 00:36:56,000 --> 00:37:02,000 Môžeme buď urobiť a q.strings [0]. 484 00:37:02,000 --> 00:37:05,000 To je výrazne menej časté ako toto. 485 00:37:05,000 --> 00:37:14,000 Ak to len bude 0, potom budete tendenciu vidieť q.strings. 486 00:37:14,000 --> 00:37:16,000 To je miesto, kde sme kopírovanie. 487 00:37:16,000 --> 00:37:18,000 Koľko bytov nám zostáva skopírovať? >> [Študent] 10. 488 00:37:18,000 --> 00:37:20,000 Právo. 489 00:37:20,000 --> 00:37:25,000 [Študent] Ešte musíme vynásobiť 5 - 10 krát väčšia ako veľkosť bajtov alebo tak niečo? 490 00:37:25,000 --> 00:37:30,000 Jo, tak to je miesto, kde-čo presne sa kopírovanie? 491 00:37:30,000 --> 00:37:32,000 [Študent] [nepočuteľné] 492 00:37:32,000 --> 00:37:34,000 Aký je typ vecí sme kopírovanie? 493 00:37:34,000 --> 00:37:36,000 [Študent] [nepočuteľné] 494 00:37:36,000 --> 00:37:41,000 Jo, takže char * s, že sme kopírovanie, nevieme, kde tie sú zasielané z 495 00:37:41,000 --> 00:37:47,000 No, kde to ukázal, ako struny, skončíme to tlačil do fronty 496 00:37:47,000 --> 00:37:49,000 alebo enqueuing do fronty. 497 00:37:49,000 --> 00:37:51,000 Ak tie sú posielané z, nemáme potuchy. 498 00:37:51,000 --> 00:37:56,000 Potrebujeme len sledovať char * s sami. 499 00:37:56,000 --> 00:38:00,000 Nechceme kopírovať veľkosti - hlava bytov. 500 00:38:00,000 --> 00:38:03,000 Chceme kopírovať veľkosti - hlava char * s, 501 00:38:03,000 --> 00:38:11,000 takže budeme násobiť tým sizeof (char *). 502 00:38:11,000 --> 00:38:17,000 Rovnaká sem, hlava * sizeof (char *). 503 00:38:17,000 --> 00:38:24,000 >> [Študent] Čo [nepočuteľné]? 504 00:38:24,000 --> 00:38:26,000 Toto právo tu? 505 00:38:26,000 --> 00:38:28,000 [Študent] Nie, pod tým je veľkosť - hlava. 506 00:38:28,000 --> 00:38:30,000 [Rob B.] Toto právo tu? 507 00:38:30,000 --> 00:38:32,000 Ukazovateľ aritmetika. 508 00:38:32,000 --> 00:38:35,000 Ako ukazovateľ aritmetický bude fungovať, je 509 00:38:35,000 --> 00:38:40,000 automaticky násobí podľa veľkosti typu, že máme čo do činenia s 510 00:38:40,000 --> 00:38:46,000 Rovnako ako tu, nový + (veľkosť - hlava) 511 00:38:46,000 --> 00:38:56,000 je presne ekvivalentné a nové [veľkosť - hlava] 512 00:38:56,000 --> 00:39:00,000 kým očakávame, že sa pracovať správne, 513 00:39:00,000 --> 00:39:04,000 pretože ak máme čo do činenia s int pole, potom nemáme index int- 514 00:39:04,000 --> 00:39:07,000 alebo či je to z veľkosti 5 a chcete 4. prvok, potom sme index do 515 00:39:07,000 --> 00:39:10,000 int array [4]. 516 00:39:10,000 --> 00:39:14,000 Tie nerob-[4] * veľkosť int. 517 00:39:14,000 --> 00:39:21,000 , Ktorý spracováva automaticky, a tento prípad 518 00:39:21,000 --> 00:39:29,000 Je doslova ekvivalentné, takže držiak syntaxe 519 00:39:29,000 --> 00:39:34,000 je len tak byť premenený na to čo najskôr skompilovať. 520 00:39:34,000 --> 00:39:38,000 To je niečo, čo musíte byť opatrní, aby 521 00:39:38,000 --> 00:39:42,000 Pri pridávaní veľkosť - hlava 522 00:39:42,000 --> 00:39:45,000 Pridávate nie jeden bajt. 523 00:39:45,000 --> 00:39:53,000 Ste pridaním jedného char *, čo môže byť jeden bytov alebo čokoľvek. 524 00:39:53,000 --> 00:39:56,000 >> Ďalšie otázky? 525 00:39:56,000 --> 00:40:04,000 Dobre, Dequeue bude jednoduchšie. 526 00:40:04,000 --> 00:40:11,000 Dám vám chvíľku realizovať. 527 00:40:11,000 --> 00:40:18,000 Oh, a myslím, že to je rovnaká situácia, kedy 528 00:40:18,000 --> 00:40:21,000 čo enqueue prípade, ak budeme enqueuing null, 529 00:40:21,000 --> 00:40:24,000 Možno chceme zvládnuť, možno nemáme. 530 00:40:24,000 --> 00:40:27,000 Budeme to robiť znova tu, ale rovnako ako naše zásobníka prípade. 531 00:40:27,000 --> 00:40:34,000 Ak budeme Zaradí null, mohli by sme chcieť ignorovať. 532 00:40:34,000 --> 00:40:40,000 Každý, kto má nejaký kód, ktorý som si vytiahnuť hore? 533 00:40:40,000 --> 00:40:45,000 [Študent] Mám len Dequeue. 534 00:40:45,000 --> 00:40:56,000 Verzia 2 je, že-v poriadku. 535 00:40:56,000 --> 00:40:59,000 Ak chcete vysvetliť? 536 00:40:59,000 --> 00:41:01,000 [Študent] Po prvé, musíte sa uistite, že je niečo, čo vo fronte 537 00:41:01,000 --> 00:41:07,000 a že veľkosť klesá o 1. 538 00:41:07,000 --> 00:41:11,000 Musíte to urobiť, a potom sa vrátite hlavu 539 00:41:11,000 --> 00:41:13,000 a potom presunúť hlavu 1. 540 00:41:13,000 --> 00:41:19,000 Dobre, tak tam je rohová prípad, musíme vziať do úvahy. Jo. 541 00:41:19,000 --> 00:41:24,000 [Študent] Ak je vaša hlava je na posledný prvok, 542 00:41:24,000 --> 00:41:26,000 potom nechcete hlava bodu mimo poľa. 543 00:41:26,000 --> 00:41:29,000 >> Jo, takže akonáhle hlava narazí na koniec nášho poľa, 544 00:41:29,000 --> 00:41:35,000 keď sme dequeue, by naša hlava sa Modded späť na 0. 545 00:41:35,000 --> 00:41:40,000 Bohužiaľ, nemôžeme to, že v jednom kroku. 546 00:41:40,000 --> 00:41:44,000 Myslím, že tak, ako som si asi stanoviť, že je 547 00:41:44,000 --> 00:41:52,000 to bude char *, čo sa vraciame, 548 00:41:52,000 --> 00:41:55,000 bez ohľadu na vaše meno premennej chce byť. 549 00:41:55,000 --> 00:42:02,000 Potom chceme mod hlavu o našej schopnosti 550 00:42:02,000 --> 00:42:10,000 a potom sa vrátiť peru. 551 00:42:10,000 --> 00:42:14,000 Veľa ľudí tu by sa mohli do- 552 00:42:14,000 --> 00:42:19,000 To je prípad-Budeš vidieť ľudí robiť, keď sa hlava 553 00:42:19,000 --> 00:42:29,000 je väčšia ako kapacita, to hlavou - kapacita. 554 00:42:29,000 --> 00:42:36,000 A to je práve pracuje okolo toho, čo mod je. 555 00:42:36,000 --> 00:42:41,000 Vedúci mod = kapacita je oveľa čistejšie 556 00:42:41,000 --> 00:42:51,000 z obalu okolo, ako chcete hlava väčšia ako kapacita hlavou - kapacita. 557 00:42:51,000 --> 00:42:56,000 >> Otázky? 558 00:42:56,000 --> 00:43:02,000 Dobre, posledná vec, ktorú sme si nechali je náš prepojený zoznam. 559 00:43:02,000 --> 00:43:07,000 Tie by mohli byť použité na niektoré prepojené zozname správanie, ak ste 560 00:43:07,000 --> 00:43:11,000 súvisí zoznamy vo vašich hash tabuľkách, ak ste hash tabuľky. 561 00:43:11,000 --> 00:43:15,000 Vrelo odporúčam robiť hash tabuľky. 562 00:43:15,000 --> 00:43:17,000 Možno ste už urobili trie, 563 00:43:17,000 --> 00:43:23,000 ale pokusy sú ťažšie. 564 00:43:23,000 --> 00:43:27,000 Teoreticky, sú asymptoticky lepší. 565 00:43:27,000 --> 00:43:30,000 Ale stačí sa pozrieť na veľkú tabuľu, 566 00:43:30,000 --> 00:43:35,000 a snaží sa nikdy robiť lepšie, a zaberajú viac pamäte. 567 00:43:35,000 --> 00:43:43,000 Všetko o snaží skončí bytia horšie pre ďalšiu prácu. 568 00:43:43,000 --> 00:43:49,000 Je to to, čo David Malan riešením je vždy 569 00:43:49,000 --> 00:43:56,000 Je vždy príspevkov jeho trie roztoku, a pozrieme sa, kde v súčasnej dobe je. 570 00:43:56,000 --> 00:44:00,000 Čo bolo, že v rámci, David J? 571 00:44:00,000 --> 00:44:06,000 Je to # 18, tak, že to nie je príliš zlý, 572 00:44:06,000 --> 00:44:09,000 a že to bude jeden z najlepších snaží si môžete myslieť 573 00:44:09,000 --> 00:44:17,000 alebo jeden z najlepších snaží o trie. 574 00:44:17,000 --> 00:44:23,000 Je to dokonca ani jeho originálne riešenie? 575 00:44:23,000 --> 00:44:29,000 Mám pocit, že trie riešenia majú tendenciu byť viac v tomto rozsahu použitia RAM. 576 00:44:29,000 --> 00:44:33,000 >> Choďte dole až na samý vrchol, a RAM využitie je v jednotlivých číslic. 577 00:44:33,000 --> 00:44:36,000 Choďte dolu ku dnu, a potom začnete vidieť pokúsi 578 00:44:36,000 --> 00:44:41,000 kde dostanete úplne masívne pamäte RAM, 579 00:44:41,000 --> 00:44:45,000 a pokusy sú ťažšie. 580 00:44:45,000 --> 00:44:53,000 Nie úplne stojí za to, ale vzdelávacie skúsenosti, ak ste jeden. 581 00:44:53,000 --> 00:44:56,000 Posledná vec, ktorú je náš prepojený zoznam, 582 00:44:56,000 --> 00:45:04,000 a tieto tri veci, komíny, fronty, a prepojené zoznamy, 583 00:45:04,000 --> 00:45:09,000 budúcu vec, ktorú kedy urobil v informatike 584 00:45:09,000 --> 00:45:12,000 Predpokladajme, že ste oboznámení s týmito vecami. 585 00:45:12,000 --> 00:45:19,000 Sú to len natoľko zásadné pre všetko. 586 00:45:19,000 --> 00:45:25,000 >> Súvisí zoznamy, a tu sme single spájať zoznam sa bude naše realizácie. 587 00:45:25,000 --> 00:45:34,000 Čo jednotlivo spojené znamená v porovnaní s dvojnásobne spojené? Áno. 588 00:45:34,000 --> 00:45:37,000 [Študent] To len ukazuje na ďalšie ukazovatele, skôr než na ukazovatele, 589 00:45:37,000 --> 00:45:39,000 ako ten predchádzajúci je aj ten, za ňou. 590 00:45:39,000 --> 00:45:44,000 Jo, tak v formáte obrazu, čo som to urobil? 591 00:45:44,000 --> 00:45:48,000 Mám dve veci. Mám obraz a obraz. 592 00:45:48,000 --> 00:45:51,000 V obrazu formátu, naše jednotlivo prepojené zoznamy, 593 00:45:51,000 --> 00:45:57,000 nevyhnutne, máme nejaký ukazovateľ na hlavu nášho zoznamu, 594 00:45:57,000 --> 00:46:02,000 a potom v našom zozname, budeme musieť ukazovatele, 595 00:46:02,000 --> 00:46:05,000 a možno tento bodov na hodnotu null. 596 00:46:05,000 --> 00:46:08,000 Je to niečo ako tvoj typický výkres single prepojeného zoznamu. 597 00:46:08,000 --> 00:46:14,000 Dvojnásobne spájať zoznam, môžete ísť späť. 598 00:46:14,000 --> 00:46:19,000 Keby som vám žiadny uzol v zozname, môžete nutne dostať do 599 00:46:19,000 --> 00:46:23,000 iné uzol v zozname, pokiaľ sa jedná o dvojnásobne spájať zoznam. 600 00:46:23,000 --> 00:46:27,000 Ale keď som vám tretí uzol v zozname a je to jednotlivo prepojený zoznam, 601 00:46:27,000 --> 00:46:30,000 žiadny spôsob, ako ste niekedy dostane do prvej a druhej uzlov. 602 00:46:30,000 --> 00:46:34,000 A je tu výhody a detriments, a jeden zrejmý 603 00:46:34,000 --> 00:46:42,000 je vám zaberú viac veľkosti, a vy budete musieť sledovať, kde sa tieto veci smerujú teraz. 604 00:46:42,000 --> 00:46:49,000 Ale my sme len o single spojené. 605 00:46:49,000 --> 00:46:53,000 >> Pár vecí budeme musieť realizovať. 606 00:46:53,000 --> 00:47:00,000 Your typedef struct node, int i: struct node * next; uzol. 607 00:47:00,000 --> 00:47:09,000 To typedef by mala byť vypálená do vašej mysle. 608 00:47:09,000 --> 00:47:14,000 Quiz 1 by mal byť rád dať typedef prepojeného zoznamu uzla, 609 00:47:14,000 --> 00:47:18,000 a vy by ste mali byť schopní okamžite čmárať, že sa 610 00:47:18,000 --> 00:47:22,000 bez premýšľania o tom. 611 00:47:22,000 --> 00:47:27,000 Myslím, že pár otázok, prečo potrebujeme struct sem? 612 00:47:27,000 --> 00:47:32,000 Prečo nemôže povedať uzla *? 613 00:47:32,000 --> 00:47:35,000 [Študent] [nepočuteľné] 614 00:47:35,000 --> 00:47:38,000 Jo. 615 00:47:38,000 --> 00:47:44,000 Jediná vec, ktorá definuje uzol ako vec 616 00:47:44,000 --> 00:47:47,000 je typedef sám. 617 00:47:47,000 --> 00:47:55,000 Ale ako tohto bodu, keď sme trochu rozobrať pomocou tejto definície struct uzol, 618 00:47:55,000 --> 00:48:01,000 sme neskončili našej typedef doteraz, takže od tej doby typedef nebolo dokončené, 619 00:48:01,000 --> 00:48:05,000 uzol neexistuje. 620 00:48:05,000 --> 00:48:12,000 Ale struct uzol sa, a tento uzol vo tu, 621 00:48:12,000 --> 00:48:14,000 to by mohlo tiež byť nazývané niečo iné. 622 00:48:14,000 --> 00:48:16,000 To by mohlo byť nazývaný n 623 00:48:16,000 --> 00:48:19,000 Mohlo by to byť nazývaný previazaný zoznam uzla. 624 00:48:19,000 --> 00:48:21,000 Mohlo by to byť len niečo. 625 00:48:21,000 --> 00:48:26,000 Ale to struct node potrebuje byť nazývaný to isté ako tento struct uzol. 626 00:48:26,000 --> 00:48:29,000 Čo hovoríte to má aj byť tu, 627 00:48:29,000 --> 00:48:32,000 a aby tiež odpovedá na druhý bod na otázky 628 00:48:32,000 --> 00:48:37,000 čo je dôvod, prečo, mnohokrát, keď vidíte structs a typedefs z structs, 629 00:48:37,000 --> 00:48:42,000 uvidíte anonymný structs, kde budete len vidieť typedef struct, 630 00:48:42,000 --> 00:48:47,000 vykonávanie struct, slovník, alebo čokoľvek iného. 631 00:48:47,000 --> 00:48:51,000 >> Prečo tu sa musíme povedať uzol? 632 00:48:51,000 --> 00:48:54,000 Prečo to nemôže byť anonymný struct? 633 00:48:54,000 --> 00:48:56,000 Je to skoro rovnaká odpoveď. 634 00:48:56,000 --> 00:48:58,000 [Študent] Musíte sa na ňu odvolávať v rámci struct. 635 00:48:58,000 --> 00:49:04,000 Jo, v struct, musíte sa odkazovať na struct sám. 636 00:49:04,000 --> 00:49:10,000 Ak nedáte struct meno, ak je to anonymný struct, nemôžete na neho odkazujú. 637 00:49:10,000 --> 00:49:17,000 A v neposlednom rade, by toto všetko malo byť trochu priamočiare, 638 00:49:17,000 --> 00:49:20,000 a oni by vám mali pomôcť si uvedomiť, ak píšete to ustanovuje 639 00:49:20,000 --> 00:49:24,000 že robíte niečo zle, ak tieto druhy vecí nedávajú zmysel. 640 00:49:24,000 --> 00:49:28,000 V neposlednom rade, prečo to musí byť struct uzol *? 641 00:49:28,000 --> 00:49:34,000 Prečo to nemôže byť len struct uzol ďalej? 642 00:49:34,000 --> 00:49:37,000 [Študent] Ukazovateľ na ďalšie struct. 643 00:49:37,000 --> 00:49:39,000 To nevyhnutne to, čo chceme. 644 00:49:39,000 --> 00:49:42,000 Prečo by sa to nikdy nestane struct uzol ďalej? 645 00:49:42,000 --> 00:49:50,000 Prečo to musí byť struct node * next? Jo. 646 00:49:50,000 --> 00:49:53,000 [Študent] Je to ako nekonečnej slučke. 647 00:49:53,000 --> 00:49:55,000 Jo. 648 00:49:55,000 --> 00:49:57,000 [Študent] bol by to stále v jednom. 649 00:49:57,000 --> 00:50:02,000 Jo, len si na to, ako by sme to veľkosť alebo tak niečo. 650 00:50:02,000 --> 00:50:08,000 Veľkosť struct je v podstate + alebo - niektorí vzor tu alebo tam. 651 00:50:08,000 --> 00:50:15,000 Je to v podstate bude súčet veľkostí jednotlivých vecí v struct. 652 00:50:15,000 --> 00:50:18,000 To tu bez toho, aby sa čokoľvek zmenilo, jeho veľkosť je bude ľahké. 653 00:50:18,000 --> 00:50:24,000 Veľkosť struct uzol bude veľkosť i + veľkosti vedľa. 654 00:50:24,000 --> 00:50:27,000 Veľkosť aj bude 4. Veľkosť budúceho roka sa bude 4. 655 00:50:27,000 --> 00:50:30,000 Veľkosť struct uzol bude 8. 656 00:50:30,000 --> 00:50:34,000 Ak nemáme súbory *, myslel sizeof, 657 00:50:34,000 --> 00:50:37,000 potom sizeof (i) bude 4. 658 00:50:37,000 --> 00:50:43,000 Veľkosť struct uzol vedľa bude veľkosť i + veľkosť struct uzol ďalšie 659 00:50:43,000 --> 00:50:46,000 + Veľkosť i + veľkosti struct uzol ďalšie. 660 00:50:46,000 --> 00:50:55,000 Bolo by nekonečná rekurzia uzlov. 661 00:50:55,000 --> 00:51:00,000 Z tohto dôvodu je to, ako veci majú. 662 00:51:00,000 --> 00:51:03,000 >> Opäť, rozhodne zapamätať, že, 663 00:51:03,000 --> 00:51:06,000 alebo aspoň pochopiť natoľko, že je možné byť schopný 664 00:51:06,000 --> 00:51:12,000 Dôvodom tým, čo by to malo vyzerať. 665 00:51:12,000 --> 00:51:14,000 Veci budeme chcieť realizovať. 666 00:51:14,000 --> 00:51:18,000 Ak dĺžka zoznamu- 667 00:51:18,000 --> 00:51:21,000 môžete podvádzať a udržať okolo 668 00:51:21,000 --> 00:51:24,000 globálne dĺžka alebo tak niečo, ale my nebudeme robiť, že. 669 00:51:24,000 --> 00:51:28,000 Budeme počítať dĺžku zoznamu. 670 00:51:28,000 --> 00:51:34,000 Máme obsahuje, tak, že je v podstate ako vyhľadávanie, 671 00:51:34,000 --> 00:51:41,000 takže máme prepojený zoznam celých čísel zistiť, či to číslo je v pripojenom zozname. 672 00:51:41,000 --> 00:51:44,000 Prepend bude vloženie na začiatku zoznamu. 673 00:51:44,000 --> 00:51:46,000 Append bude vkladať na konci. 674 00:51:46,000 --> 00:51:53,000 Insert_sorted bude vložiť do triedeného pozíciu v zozname. 675 00:51:53,000 --> 00:52:01,000 Insert_sorted druh predpokladá, že ste nikdy nepoužívali predradený alebo pripojený v zlých cestách. 676 00:52:01,000 --> 00:52:09,000 >> Insert_sorted keď ste vykonávania insert_sorted- 677 00:52:09,000 --> 00:52:13,000 Povedzme, že máme prepojený zoznam. 678 00:52:13,000 --> 00:52:18,000 To je to, čo v súčasnej dobe vyzerá, 2, 4, 5. 679 00:52:18,000 --> 00:52:24,000 Chcem vložiť 3, tak dlho, ako zoznam sám už je zoradený, 680 00:52:24,000 --> 00:52:27,000 je ľahké zistiť, kde 3 patrí. 681 00:52:27,000 --> 00:52:29,000 Začínam na 2. 682 00:52:29,000 --> 00:52:32,000 Dobre, 3 je väčší ako 2, takže chcem ísť ďalej. 683 00:52:32,000 --> 00:52:35,000 Oh, 4 je príliš veľký, takže viem, že 3 je ísť medzi 2 a 4, 684 00:52:35,000 --> 00:52:39,000 a ja musím opraviť ukazovatele a všetko to okolo. 685 00:52:39,000 --> 00:52:43,000 Ale ak by sme nemali striktne používať insert_sorted, 686 00:52:43,000 --> 00:52:50,000 Páči povedzme, že som predradiť 6, 687 00:52:50,000 --> 00:52:55,000 potom môj prepojený zoznam sa stane toto. 688 00:52:55,000 --> 00:53:01,000 To teraz nemá zmysel, tak pre insert_sorted, môžete len predpokladať, 689 00:53:01,000 --> 00:53:04,000 že zoznam je zoradený, aj keď operácia existujú 690 00:53:04,000 --> 00:53:09,000 ktoré môžu spôsobiť, že nebyť zoradená, a to je to. 691 00:53:09,000 --> 00:53:20,000 Nájsť užitočné vložka-tak to sú hlavné veci, ktoré budete musieť vykonať. 692 00:53:20,000 --> 00:53:24,000 >> Pre túto chvíľu, sa chvíľu robiť dĺžku a obsahuje, 693 00:53:24,000 --> 00:53:30,000 a tie by mala byť relatívne rýchlo. 694 00:53:41,000 --> 00:53:48,000 Blíži zatvárací čas, takže niekto niečo pre dĺžku alebo obsahuje? 695 00:53:48,000 --> 00:53:50,000 Chystajú sa byť takmer totožné. 696 00:53:50,000 --> 00:53:57,000 [Študent] Dĺžka. 697 00:53:57,000 --> 00:54:01,000 Poďme sa pozrieť, revízie. 698 00:54:01,000 --> 00:54:04,000 Dobre. 699 00:54:12,000 --> 00:54:15,000 Ak chcete vysvetliť? 700 00:54:15,000 --> 00:54:21,000 [Študent] Práve som vytvoriť ukazovateľ uzol a inicializovať ju ako prvý, čo je naše globálne premenné, 701 00:54:21,000 --> 00:54:27,000 a potom som skontrolovať, či je to null a tak som sa nedostal seg chybu a vrátiť 0, ak to tak je. 702 00:54:27,000 --> 00:54:34,000 Inak som priechodná, sledovanie v rámci celej číslo 703 00:54:34,000 --> 00:54:38,000 koľkokrát som vstúpil na ďalší prvok zoznamu 704 00:54:38,000 --> 00:54:43,000 a v rovnakom operácie inkrementom tiež prístup, že skutočný prvok, 705 00:54:43,000 --> 00:54:47,000 a potom som neustále, aby skontrolovať, či je to null, 706 00:54:47,000 --> 00:54:56,000 a ak je to null, potom preruší a len vracia počet prvkov som prístupné. 707 00:54:56,000 --> 00:55:01,000 >> [Rob B.] Má niekto nejaké pripomienky na čokoľvek? 708 00:55:01,000 --> 00:55:06,000 To vyzerá dobre správnosť múdry. 709 00:55:06,000 --> 00:55:10,000 [Študent] Ja si nemyslím, že je potrebné uzol == null. 710 00:55:10,000 --> 00:55:13,000 Jo, takže ak uzol == null return 0. 711 00:55:13,000 --> 00:55:18,000 Ale ak uzol == null potom-oh, je správnosť problém. 712 00:55:18,000 --> 00:55:23,000 Bolo to len vraciate aj, ale to nie je v pôsobnosti teraz. 713 00:55:23,000 --> 00:55:30,000 Potrebujete k tomu len int i, takže i = 0. 714 00:55:30,000 --> 00:55:34,000 Ale ak uzol je null, potom som sa ešte bude 0, 715 00:55:34,000 --> 00:55:39,000 a budeme sa vrátiť 0, takže tento prípad je totožný. 716 00:55:39,000 --> 00:55:48,000 Ďalším spoločným vec je mať k dispozícii vyhlásenie 717 00:55:48,000 --> 00:55:51,000 uzla vnútri slučky for. 718 00:55:51,000 --> 00:55:54,000 Dalo by sa povedať, oh, no. 719 00:55:54,000 --> 00:55:56,000 Poďme držať to ako toto. 720 00:55:56,000 --> 00:55:59,000 Asi by som dal int i = 0 tu, 721 00:55:59,000 --> 00:56:05,000 potom uzol * node = prvé tu. 722 00:56:05,000 --> 00:56:11,000 A to je asi, ako-ako sa zbaviť teraz. 723 00:56:11,000 --> 00:56:14,000 Toto je pravdepodobne, ako by som napísal. 724 00:56:14,000 --> 00:56:21,000 Dalo by sa tiež, pri pohľade na neho takhle. 725 00:56:21,000 --> 00:56:25,000 To je pre slučky štruktúry tu 726 00:56:25,000 --> 00:56:30,000 by mala byť takmer rovnako prirodzené pre vás ako pre int i = 0 727 00:56:30,000 --> 00:56:33,000 i je menšia ako dĺžka poľa i + +. 728 00:56:33,000 --> 00:56:38,000 Ak to, ako sa určiť iteráciou cez pole, to je to, ako ste iterácii prepojeného zoznamu. 729 00:56:38,000 --> 00:56:45,000 >> To by malo byť druhou prirodzenosťou, v určitom okamihu. 730 00:56:45,000 --> 00:56:50,000 S tým na mysli, to bude takmer to isté. 731 00:56:50,000 --> 00:56:57,000 Budeš chcieť iteráciu prepojenú zoznam. 732 00:56:57,000 --> 00:57:02,000 Ak uzol-Nemám poňatia, čo hodnota sa nazýva. 733 00:57:02,000 --> 00:57:04,000 Uzla i 734 00:57:04,000 --> 00:57:15,000 Ak je hodnota v tomto uzle = i vrátiť true, a to je všetko. 735 00:57:15,000 --> 00:57:18,000 Všimnite si, že jediný spôsob, ako sa niekedy vráti false 736 00:57:18,000 --> 00:57:23,000 ak je nám určiť iteráciou cez celý prepojeného zoznamu a nikdy vrátiť true, 737 00:57:23,000 --> 00:57:29,000 tak to je to, čo to robí. 738 00:57:29,000 --> 00:57:36,000 Ako vedľajší poznámku, budeme pravdepodobne nebude mať pripojiť alebo predradiť. 739 00:57:36,000 --> 00:57:39,000 >> Rýchle posledná poznámka. 740 00:57:39,000 --> 00:57:52,000 Ak vidíte kľúčového slova static, takže povedzme static int count = 0, 741 00:57:52,000 --> 00:57:56,000 a urobíme počet + +, môžete v podstate si ju predstaviť ako globálne premenné, 742 00:57:56,000 --> 00:58:00,000 aj keď som práve povedal, to nie je, ako budeme realizovať dĺžku. 743 00:58:00,000 --> 00:58:06,000 Robím to tu, a potom počítať + +. 744 00:58:06,000 --> 00:58:11,000 Každý spôsob, ako môžeme zadať uzol do našej prepojeného zoznamu sme navýšením naše počet. 745 00:58:11,000 --> 00:58:15,000 Bod je to, čo statické kľúčové slovo znamená. 746 00:58:15,000 --> 00:58:20,000 Ak som mal int count = 0, že by normálne stará globálne premenná. 747 00:58:20,000 --> 00:58:25,000 Čo static int count znamená, že sa jedná o globálnu premennú tohto súboru. 748 00:58:25,000 --> 00:58:28,000 Je nemožné, aby nejaký iný súbor, 749 00:58:28,000 --> 00:58:34,000 Páči myslieť PSet 5, ak ste začali. 750 00:58:34,000 --> 00:58:39,000 Máte obaja speller.c, a máte dictionary.c, 751 00:58:39,000 --> 00:58:42,000 a ak ste práve deklarovať vec globálne, potom nič speller.c 752 00:58:42,000 --> 00:58:45,000 možno pristupovať dictionary.c a naopak. 753 00:58:45,000 --> 00:58:48,000 Globálne premenné sú prístupné akékoľvek. Oddiel C, 754 00:58:48,000 --> 00:58:54,000 ale statické premenné sú prístupné iba v rámci samotného súboru, 755 00:58:54,000 --> 00:59:01,000 tak vnútri spell checker alebo vnútri dictionary.c, 756 00:59:01,000 --> 00:59:06,000 toto je o tom, ako by som deklarovať svoju premennú pre veľkosť môjho poľa 757 00:59:06,000 --> 00:59:10,000 alebo veľkosť môjho počtu slov v slovníku. 758 00:59:10,000 --> 00:59:15,000 Vzhľadom k tomu, nechcem deklarovať globálne premenné, že niekto má prístup k, 759 00:59:15,000 --> 00:59:18,000 Naozaj len o to pre svoje vlastné účely. 760 00:59:18,000 --> 00:59:21,000 >> Dobrú vec, o to je tiež celé meno kolízie veci. 761 00:59:21,000 --> 00:59:27,000 Ak nejaký iný súbor sa pokúsi použiť globálnu premennú s názvom znakov, veci idú veľmi, veľmi zlé, 762 00:59:27,000 --> 00:59:33,000 tak to pekne drží veci bezpečné, a len vy môžete pristupovať, 763 00:59:33,000 --> 00:59:38,000 a nikto iný nemôže, a ak niekto iný deklaruje globálnu premennú s názvom počítať, 764 00:59:38,000 --> 00:59:43,000 potom to nebude v rozpore s vašou statické premenné s názvom znakov. 765 00:59:43,000 --> 00:59:47,000 To je to, čo statické je. Je súbor globálne premenná. 766 00:59:47,000 --> 00:59:52,000 >> Otázky týkajúce sa niečo? 767 00:59:52,000 --> 00:59:59,000 All set. Bye. 768 00:59:59,000 --> 01:00:03,000 [CS50.TV]