1 00:00:00,000 --> 00:00:02,730 [Powered by Google Translate] [6 skirsnis: mažiau patogūs] 2 00:00:02,730 --> 00:00:05,040 [Nate Hardison] [Harvardo universiteto] 3 00:00:05,040 --> 00:00:07,320 [Tai CS50.] [CS50.TV] 4 00:00:07,320 --> 00:00:11,840 Gerai. Sveiki atvykę į 6 skyriuje. 5 00:00:11,840 --> 00:00:14,690 Šią savaitę, mes ketiname kalbėti apie duomenų struktūras skyriuje, 6 00:00:14,690 --> 00:00:19,780 visų pirma dėl to šią savaitę problema spellr 7 00:00:19,780 --> 00:00:24,410 ar visa krūva įvairių duomenų struktūros tirti. 8 00:00:24,410 --> 00:00:26,520 Yra krūva įvairių būdų, galite eiti su problema, rinkinį, 9 00:00:26,520 --> 00:00:31,570 ir daugiau duomenų struktūros, tu žinai apie daugiau įdomių dalykų, kuriuos galite padaryti. 10 00:00:31,570 --> 00:00:34,990 >> Taigi, galime pradėti. Pirmiausia mes ketiname kalbėti apie kaminai, 11 00:00:34,990 --> 00:00:37,530 kamino ir eilės duomenų struktūras, kad mes ketiname kalbėti apie. 12 00:00:37,530 --> 00:00:40,560 Vamzdžiai ir eilės yra tikrai naudinga, kai mes pradedame kalbėti apie grafikų, 13 00:00:40,560 --> 00:00:44,390 mes neketiname padaryti daug ir dabar. 14 00:00:44,390 --> 00:00:52,820 Bet jie tikrai gerai suprasti vieną iš didžiųjų pagrindinių duomenų struktūrų CS. 15 00:00:52,820 --> 00:00:54,880 Problemą, specifikacijos aprašymas, 16 00:00:54,880 --> 00:00:59,260 jei jūs traukite jį, pasakoja apie kaminai, panašus į 17 00:00:59,260 --> 00:01:05,239 maitinimo įstaigų padėklai krūva, kad turite kavinėje valgyklose 18 00:01:05,239 --> 00:01:09,680 kur, kai valgomasis darbuotojai ateina ir kelia valgomojo padėklai po to, kai jie valomi, 19 00:01:09,680 --> 00:01:12,000 jie sukrauti juos vieną ant kito. 20 00:01:12,000 --> 00:01:15,050 Ir tada, kai vaikai ateina gauti maisto, 21 00:01:15,050 --> 00:01:19,490 jie traukti dėklus pakilti, pirmiausia viršutinis, tada vienas po juo, tada žemiau, kad vienas. 22 00:01:19,490 --> 00:01:25,190 Taigi, tiesą sakant, pirmasis dėklas, kad valgomojo darbuotojai pribaigti yra paskutinė, kad bus nurašomas. 23 00:01:25,190 --> 00:01:32,330 , Naujausia, kad valgomojo darbuotojai įdėti yra pirmoji, kuri bus nurašomas vakarienė. 24 00:01:32,330 --> 00:01:38,100 Problemą, spec, kurią galite atsisiųsti, jei jūs neturite jau, 25 00:01:38,100 --> 00:01:46,730 mes kalbame apie modeliavimo naudojant šios rūšies struct kamino duomenų struktūrą ». 26 00:01:46,730 --> 00:01:51,070 >> Taigi, ką mes turime čia, tai yra panašus į tai, kas buvo pristatyta paskaita, 27 00:01:51,070 --> 00:01:58,120 išskyrus paskaitą mes pristatėme tai int, o ne char * s. 28 00:01:58,120 --> 00:02:06,250 Tai bus kamino, kad parduotuvėse, ką? 29 00:02:06,250 --> 00:02:09,009 Daniel? Ką mes saugojimo ši grandinė? 30 00:02:09,009 --> 00:02:15,260 [Daniel] Stygos? >> Mes saugome eilutes šioje kamino, tiksliai. 31 00:02:15,260 --> 00:02:20,950 Viskas, ką jums reikia, siekiant sukurti kamino yra masyvas 32 00:02:20,950 --> 00:02:23,920 tam tikro pajėgumų, kurie šiuo atveju, 33 00:02:23,920 --> 00:02:28,020 talpa bus didžiosiomis raidėmis, nes jis pastovus. 34 00:02:28,020 --> 00:02:36,340 Ir tada be masyvo, visi mes turime sekti, yra Dabartinis dydis masyvo. 35 00:02:36,340 --> 00:02:38,980 Vienas dalykas, reikia pažymėti, kad čia tipo kietas 36 00:02:38,980 --> 00:02:47,060 yra tai, kad mes sukurti sukrauti ant kitos duomenų struktūros, masyvas duomenų struktūrą. 37 00:02:47,060 --> 00:02:50,110 Yra įvairių būdų įgyvendinti kaminai. 38 00:02:50,110 --> 00:02:54,250 Mes ne padaryti jį gana dar, bet tikiuosi, atlikę nurodomi sąrašas problemų, 39 00:02:54,250 --> 00:03:00,520 pamatysite, kaip galite lengvai įgyvendinti susietą sąrašo viršuje taip pat kamino. 40 00:03:00,520 --> 00:03:02,640 Bet dabar, mes laikytis masyvų. 41 00:03:02,640 --> 00:03:06,350 Taigi dar kartą, visi mes turime yra masyvas, ir mes tiesiog reikia sekti masyvo dydį. 42 00:03:06,350 --> 00:03:09,850 [Sam] Atsiprašome, kodėl tai, kad jūs sakėte, kamino ant stygos? 43 00:03:09,850 --> 00:03:13,440 Man tai atrodo, kad stygos per kaminą. 44 00:03:13,440 --> 00:03:16,790 [Hardison] Taip. Mes kuriame, mes mūsų masyvo duomenų struktūrą - 45 00:03:16,790 --> 00:03:22,130 tai puikus klausimas. Taigi kyla klausimas, kodėl tiems žmonėms, kurie žiūri šį internete 46 00:03:22,130 --> 00:03:24,140 kodėl mes sakydamas, kad lapų krūva yra ant stygos, 47 00:03:24,140 --> 00:03:27,990 nes čia atrodo, kad stygos yra kamino viduje? 48 00:03:27,990 --> 00:03:31,050 Kuris yra visiškai netiesa. 49 00:03:31,050 --> 00:03:34,660 Ką aš turėjo omenyje, kad mes turime Masyvo duomenų struktūrą. 50 00:03:34,660 --> 00:03:39,290 Mes turime char * s, masyvas, tai eilučių masyvo, 51 00:03:39,290 --> 00:03:45,300 ir mes ketiname pridėti, kad, siekiant sukurti sukrauti duomenų struktūrą. 52 00:03:45,300 --> 00:03:48,620 >> Taigi krūva yra šiek tiek sudėtingesnis nei masyvo. 53 00:03:48,620 --> 00:03:51,890 Mes galime naudoti masyvą sukurti kamino. 54 00:03:51,890 --> 00:03:55,810 Taip, kad, kai mes sakome, kad kamino yra pastatytas ant masyvo. 55 00:03:55,810 --> 00:04:02,510 Lygiai taip pat, kaip aš sakiau anksčiau, mes galime statyti kamino susietą sąrašo viršuje. 56 00:04:02,510 --> 00:04:04,960 Vietoj to, naudojant masyvą turėti elementus, 57 00:04:04,960 --> 00:04:10,070 mes galime naudoti susietą sąrašą, turėti savo elementus ir sukurti aplink, kad kamino. 58 00:04:10,070 --> 00:04:12,420 Leiskite eiti per porą pavyzdžių, žiūri tam tikrą kodą, 59 00:04:12,420 --> 00:04:14,960 pamatyti, kas čia iš tikrųjų vyksta. 60 00:04:14,960 --> 00:04:23,400 Kairėje, aš mesti, ką atrodys, kad kamino struct atmintyje 61 00:04:23,400 --> 00:04:28,330 jeigu talpa buvo # apibrėžiamas būti keturi. 62 00:04:28,330 --> 00:04:33,490 Mes turime mūsų keturių elementų char * Array. 63 00:04:33,490 --> 00:04:38,110 Mes turime stygos [0], styginiams [1], styginiams [2], stygos [3], 64 00:04:38,110 --> 00:04:43,800 ir tada, kad paskutinis vietos mūsų dydžio sveikasis skaičius. 65 00:04:43,800 --> 00:04:46,270 Ar tai prasminga? Gerai. 66 00:04:46,270 --> 00:04:48,790 Tai, kas atsitiks, jei tai, ką darau dešinėje, 67 00:04:48,790 --> 00:04:55,790 kuri bus mano kodas, yra tiesiog paskelbti struct, sukrauti struct vadinamas ai. 68 00:04:55,790 --> 00:05:01,270 Tai, ką mes gauname. Ji nustato šią atminties pėdsaką. 69 00:05:01,270 --> 00:05:05,590 Pirmas klausimas čia yra, kas yra ši grandinė struct turinys? 70 00:05:05,590 --> 00:05:09,250 Dabar jie nieko, bet jie nėra visiškai nieko. 71 00:05:09,250 --> 00:05:13,300 Jie tokia šiukšlių. Mes neturime jokio supratimo, kas yra jų. 72 00:05:13,300 --> 00:05:17,000 Kai mes skelbiame kamino s, mes tiesiog mesti, kad ant atminties. 73 00:05:17,000 --> 00:05:19,840 Tai tipo kaip skelbiantis int i, o ne jį Inicijuojama. 74 00:05:19,840 --> 00:05:21,730 Jūs nežinote, kas ten. Galite skaityti, kas ten, 75 00:05:21,730 --> 00:05:27,690 tačiau ji gali būti itin naudinga. 76 00:05:27,690 --> 00:05:32,680 Vienas dalykas, kurį norite visada atsiminti, kad yra inicijuoti, kokia turi būti inicializuoti. 77 00:05:32,680 --> 00:05:35,820 Šiuo atveju, mes ketiname inicijuoti dydis lygus nuliui, 78 00:05:35,820 --> 00:05:39,960 dėl to, kad ketina pasirodyti mums labai svarbi. 79 00:05:39,960 --> 00:05:43,450 Mes galime eiti į priekį, inicijuoti ir rodykles, char * s, 80 00:05:43,450 --> 00:05:49,670 kai suprantama vertė, tikriausiai null. 81 00:05:49,670 --> 00:05:58,270 Bet tai nėra visiškai būtina, kad mes darome, kad. 82 00:05:58,270 --> 00:06:04,200 >> Dabar yra dvi pagrindinės operacijos kaminai? 83 00:06:04,200 --> 00:06:07,610 Kas nors prisiminti iš paskaitos, ką jūs darote su kaminai? Taip? 84 00:06:07,610 --> 00:06:09,700 [Stella] Pushing ir Popping? >> Būtent. 85 00:06:09,700 --> 00:06:13,810 Stumti ir Popping yra dvi pagrindinės operacijos kaminai. 86 00:06:13,810 --> 00:06:17,060 Ir ką stumti daryti? >> Joje kažką ant viršaus 87 00:06:17,060 --> 00:06:19,300 kamino, tada Popping pasiima jį išjungti. 88 00:06:19,300 --> 00:06:23,150 [Hardison] Būtent. Taigi stumia stumia kažką ant kamino. 89 00:06:23,150 --> 00:06:27,700 Tai kaip apmokestinti valgomasis padėklą ant prekystalio valgomojo darbuotojų. 90 00:06:27,700 --> 00:06:33,630 Ir Popping ir valgomojo dėklą kamino. 91 00:06:33,630 --> 00:06:36,460 Leiskite eiti per porą pavyzdžių, kas atsitinka, 92 00:06:36,460 --> 00:06:39,720 kai mes nužengti į kaminą. 93 00:06:39,720 --> 00:06:45,110 , Jei mes paspauskite eilutę "Hello" į mūsų kamino, 94 00:06:45,110 --> 00:06:49,760 tai, kas mūsų diagrama atrodys dabar. 95 00:06:49,760 --> 00:06:53,410 Žiūrėkite, kas atsitinka? 96 00:06:53,410 --> 00:06:56,530 Mes stumiama į mūsų styginiams masyvo pirmojo elemento 97 00:06:56,530 --> 00:07:01,420 ir mes rezervavimo mūsų dydžio skaičius turi būti 1. 98 00:07:01,420 --> 00:07:05,340 Taigi, jei pažvelgsime į skirtumo tarp dviejų skaidrių, čia buvo 0, čia prieš paspaudimu. 99 00:07:05,340 --> 00:07:08,690 Čia yra po tiesioginio. 100 00:07:08,690 --> 00:07:13,460 Prieš stumti, po tiesioginio. 101 00:07:13,460 --> 00:07:16,860 Ir dabar mes turime vieną elementą mūsų kamino. 102 00:07:16,860 --> 00:07:20,970 Tai eilutė "labas", ir viskas. 103 00:07:20,970 --> 00:07:24,440 Visa kita masyve, mūsų styginiams masyvo, vis dar yra šiukšlių. 104 00:07:24,440 --> 00:07:27,070 Mes Nepaleista. 105 00:07:27,070 --> 00:07:29,410 Tarkime, mes stumti kitą eilutę į mūsų kamino. 106 00:07:29,410 --> 00:07:32,210 Mes ketiname stumti "Pasaulis" šiuo metu. 107 00:07:32,210 --> 00:07:35,160 Todėl jūs galite pamatyti, "pasaulis" čia eina ant "labas", 108 00:07:35,160 --> 00:07:40,040 ir dydis skaičius pakyla iki 2. 109 00:07:40,040 --> 00:07:44,520 Dabar mes galime stumti "CS50", ir kad eisiu vėl ant. 110 00:07:44,520 --> 00:07:51,110 Jei mes einame atgal, jūs galite pamatyti, kaip mes stumti dalykų ant kamino. 111 00:07:51,110 --> 00:07:53,320 Ir dabar mes pop. 112 00:07:53,320 --> 00:07:58,910 Kai mes popped ką nors ne iš kamino, kas atsitiko? 113 00:07:58,910 --> 00:08:01,540 Kas nors matote skirtumą? Tai gana subtilus. 114 00:08:01,540 --> 00:08:05,810 [Studentų] dydis. >> Taip, dydis pakeistas. 115 00:08:05,810 --> 00:08:09,040 >> Ką dar galėtumėte tikėtis pakeisti? 116 00:08:09,040 --> 00:08:14,280 [Studentų] Styga, taip pat. >> Teisė. Stygos taip pat. 117 00:08:14,280 --> 00:08:17,110 Pasirodo, kad, kai jūs darote ją tokiu būdu, 118 00:08:17,110 --> 00:08:21,960 nes mes ne kopijuoti elementus į mūsų kamino, 119 00:08:21,960 --> 00:08:24,670 mes iš tikrųjų nereikia nieko daryti, mes galime tiesiog naudokite dydį 120 00:08:24,670 --> 00:08:28,630 sekti dalykų mūsų masyvas 121 00:08:28,630 --> 00:08:33,780 , kad kai mes pop vėl ir vėl mes tiesiog Mažėja mūsų dydį iki 1. 122 00:08:33,780 --> 00:08:39,440 Nereikia, faktiškai eiti ir perrašyti nieko. 123 00:08:39,440 --> 00:08:41,710 Natūra funky. 124 00:08:41,710 --> 00:08:46,520 It turns out, kad mes paprastai tiesiog palikti ką vien, nes tai mažiau darbo mums daryti. 125 00:08:46,520 --> 00:08:50,060 Jei mes neturime grįžti atgal ir perrašyti kažką, tai kodėl tai daryti? 126 00:08:50,060 --> 00:08:54,150 Taigi, kai mes pop du kartus išjungti kamino, kad tai yra Mažėja SIZE porą kartų. 127 00:08:54,150 --> 00:08:59,120 Ir vėl, tai tik todėl, kad mes ne kopijuoti dalykų į mūsų kamino. 128 00:08:59,120 --> 00:09:01,320 Taip? Eiti į priekį. 129 00:09:01,320 --> 00:09:04,460 [Studentas, nesuprantamas] >> Ir tada, kas atsitinka, kai jūs stumti kažką vėl? 130 00:09:04,460 --> 00:09:08,570 Kai jūs stumti kažką vėl, kur jis dabar yra? 131 00:09:08,570 --> 00:09:12,390 Kur jis dabar yra, Bezili? >> Į styginiams [1]? >> Teisė. 132 00:09:12,390 --> 00:09:14,530 Kodėl aš negaliu eiti į stygos [3]? 133 00:09:14,530 --> 00:09:19,410 [Bazilikas] Kadangi jis pamiršo, kad ten buvo kas nors tinkleliuose [1] ir [2]? 134 00:09:19,410 --> 00:09:24,040 [Hardison] Būtent. Mūsų kamino, iš esmės, "pamiršo", kad ji laikė, kad nieko 135 00:09:24,040 --> 00:09:29,480 tinkleliuose [1] arba stygos [2], todėl, kai mes stumti "running", 136 00:09:29,480 --> 00:09:36,670 jis tiesiog nurodo, kad į elemento stygos [1]. 137 00:09:36,670 --> 00:09:41,590 Ar yra kokių nors klausimų, kaip tai veikia, baziniu lygiu? 138 00:09:41,590 --> 00:09:45,160 [Sam] Taigi, tai nėra dinamiška, bet kokiu būdu, sumas 139 00:09:45,160 --> 00:09:47,620 arba kamino dydis? 140 00:09:47,620 --> 00:09:56,750 [Hardison] Būtent. Tai - klausimas buvo, kad tai buvo ne dinamiškai growning kamino. 141 00:09:56,750 --> 00:10:02,850 Tai kamino, kuris gali turėti ne daugiau, keturi char * s, ne daugiau kaip keturių dalykų. 142 00:10:02,850 --> 00:10:07,580 Jeigu mes buvo, kad pabandyti ir stumti penktą dalykas, ką jūs manote turėtų atsitikti? 143 00:10:07,580 --> 00:10:11,870 [Studentai, nesuprantami] 144 00:10:11,870 --> 00:10:14,600 [Hardison] Būtent. Yra daug dalykų, kad gali atsitikti. 145 00:10:14,600 --> 00:10:19,330 Jis galėtų seg kaltės, priklausomai nuo to, ką mes buvome 146 00:10:19,330 --> 00:10:22,530 kaip tiksliai vykdė back-end. 147 00:10:22,530 --> 00:10:31,740 Tai gali perrašyti. Tai gali turėti, kad buferio perpildymą, kad mes kalbėjome apie klasėje. 148 00:10:31,740 --> 00:10:35,240 Koks būtų pats akivaizdžiausias dalykas, kad gali būti perrašyti 149 00:10:35,240 --> 00:10:42,370 jei mes bandė stumti papildomą dalyką mūsų kamino? 150 00:10:42,370 --> 00:10:44,550 Taigi, jūs paminėjote buferio perpildymą. 151 00:10:44,550 --> 00:10:47,870 Koks gali būti dalykas, kad būtų gauti raštu per arba stomped apie 152 00:10:47,870 --> 00:10:52,320 jei mes netyčia krantų bando stumti papildomą dalyką? 153 00:10:52,320 --> 00:10:54,730 [Daniel, nesuprantamas] >> Galima. 154 00:10:54,730 --> 00:10:58,440 Bet iš pradžių, kas gali atsitikti? Ką daryti, jei mes bandė stumti ketvirtąjį patį? 155 00:10:58,440 --> 00:11:06,220 Jis gali perrašyti dydį, bent jau šią atminties schema, kad mes turime. 156 00:11:06,220 --> 00:11:10,880 >> Problemą, specifikaciją, kuri yra tai, ką mes ketiname būti įgyvendinta šiandien, 157 00:11:10,880 --> 00:11:16,030 tai, ką mes norime padaryti, tai tiesiog grįžti klaidinga. 158 00:11:16,030 --> 00:11:20,030 Mūsų eksporto metodas ketina grįžti vertė logiška, 159 00:11:20,030 --> 00:11:22,920 ir kad Būlio vertė bus teisinga, jei stumti pavyksta 160 00:11:22,920 --> 00:11:29,730 ir false, jei mes negalime stumti nieko daugiau,, nes kamino yra pilnas. 161 00:11:29,730 --> 00:11:33,620 Leiskite šiek tiek vaikščioti per šio kodekso dabar. 162 00:11:33,620 --> 00:11:36,400 Štai mūsų stumti funkcija. 163 00:11:36,400 --> 00:11:40,380 Mūsų stumti funkcija kamino ketina imtis į eilutę įdėti į steką. 164 00:11:40,380 --> 00:11:45,820 Ji ketina grįžti tiesa, jei eilutė buvo sėkmingai stumiama 165 00:11:45,820 --> 00:11:51,820 kamino ir klaidingas kitaip. 166 00:11:51,820 --> 00:11:59,740 Apie tai, kokiu pasiūlymai gali būti geras pirmasis dalykas, kurį reikia padaryti čia? 167 00:11:59,740 --> 00:12:20,630 [Sam] Jei dydis lygus talpa tada gražins false? 168 00:12:20,630 --> 00:12:23,320 [Hardison] Bingo. Gražus darbas. 169 00:12:23,320 --> 00:12:26,310 Jei dydis yra talpa, mes ketiname grįžti klaidinga. 170 00:12:26,310 --> 00:12:29,270 Mes negalime pateikti nieko daugiau mūsų kamino. 171 00:12:29,270 --> 00:12:36,900 Priešingu atveju, mes norime daryti kažką ant kamino viršaus. 172 00:12:36,900 --> 00:12:41,670 Kas yra "kamino viršų", iš pradžių? 173 00:12:41,670 --> 00:12:43,650 [Daniel] Dydis 0? >> Dydis 0. 174 00:12:43,650 --> 00:12:49,990 Kas yra po to, kai yra vienas dalykas, kamino kamino viršų? Missy, jūs žinote? 175 00:12:49,990 --> 00:12:52,720 [Missy] Vienas. >> Dydis yra vienas, tiksliai. Jūs nuolat pridedant dydžio, 176 00:12:52,720 --> 00:13:01,690 ir kiekvieną kartą esate išleidimą į naują indekso dydis elemento masyve. 177 00:13:01,690 --> 00:13:05,470 Mes galime tai padaryti tokio vieno-LINER, jei tai turi prasmę. 178 00:13:05,470 --> 00:13:11,910 Taigi, mes turime mūsų stygos masyvo, mes ketiname jį pasiekti dydžio indeksas, 179 00:13:11,910 --> 00:13:14,780 ir mes ten tik ketina saugoti mūsų char *. 180 00:13:14,780 --> 00:13:19,340 Atkreipkite dėmesį, kaip ten vyksta čia ne eilutė kopijavimas, 181 00:13:19,340 --> 00:13:29,680 ne dinaminis atminties paskirstymas? 182 00:13:29,680 --> 00:13:34,440 Ir tada Missy išvedė tai, ką dabar turi padaryti, 183 00:13:34,440 --> 00:13:40,570 , nes mes saugomi eilutę į tinkamą vietą masyve, 184 00:13:40,570 --> 00:13:49,230 ir ji pasakė, kad mes turėjome prieaugio dydį, vienas, kad mes pasiruošę į kitą stumti. 185 00:13:49,230 --> 00:13:53,950 Taigi, mes galime padaryti, kad su s.size + +. 186 00:13:53,950 --> 00:13:59,330 Šiuo metu, mes stumiama į mūsų masyvas. Kas yra paskutinis dalykas, kurį mes turime padaryti? 187 00:13:59,330 --> 00:14:10,110 [Studentų] Grįžti tiesa. >> Grįžti tiesa. 188 00:14:10,110 --> 00:14:14,690 Taigi, tai gana paprasta, gana paprastas kodas. Ne per daug. 189 00:14:14,690 --> 00:14:17,070 Sukūrę suvynioti savo galvos aplink, kaip veikia kamino, 190 00:14:17,070 --> 00:14:21,910 tai yra gana paprasta įdiegti. 191 00:14:21,910 --> 00:14:26,390 >> Dabar, kitą dalį tai yra Popping eilutę kamino. 192 00:14:26,390 --> 00:14:29,410 Aš einu duoti jums, vaikinai, tam tikrą laiką dirbti šioje šiek tiek. 193 00:14:29,410 --> 00:14:34,320 Tai beveik iš esmės, ką mes padarėme čia stumti reverse. 194 00:14:34,320 --> 00:14:38,510 Ką aš padariau, yra iš tikrųjų - Oi. 195 00:14:38,510 --> 00:14:48,160 Aš įkrautas iki prietaisą per čia, ir prietaiso, 196 00:14:48,160 --> 00:14:53,600 Aš iškedentas iki problema 5 specifikacija. 197 00:14:53,600 --> 00:15:02,560 Jei mes padidinti čia, mes galime pamatyti, aš ne cdn.cs50.net/2012/fall/psets/pset5.pdf. 198 00:15:02,560 --> 00:15:08,590 Ar jus vaikinai atsisiųsti šį kodą, kuris yra čia, section6.zip? 199 00:15:08,590 --> 00:15:15,030 Gerai. Jei to dar nepadarėte, kad tai padaryti dabar, tikrai greitai. 200 00:15:15,030 --> 00:15:22,130 Aš tai padaryti mano terminalo lange. 201 00:15:22,130 --> 00:15:25,090 Aš iš tikrųjų čia. Taip. 202 00:15:25,090 --> 00:15:34,730 Taip, Inga? >> Turiu klausimą apie tai, kodėl jūs sakote s.string "dydžio skliausteliuose = g? 203 00:15:34,730 --> 00:15:42,910 Kas yra g? Yra tai, kad nustatytų kažkur anksčiau, arba - oi, char * str? 204 00:15:42,910 --> 00:15:47,160 [Hardison] Taip, būtent. Tai buvo argumentas. >> O, gerai. Atsiprašau. 205 00:15:47,160 --> 00:15:49,470 [Hardison] Mes nurodant eilutę stumti. 206 00:15:49,470 --> 00:15:55,220 Kitas klausimas, kad gali sugalvoti, kad mes ne iš tikrųjų kalbėti apie čia 207 00:15:55,220 --> 00:15:58,810 mes priėmėme, savaime suprantama, kad mes tai kintamasis vadinamas ai 208 00:15:58,810 --> 00:16:02,710 taikymo sritis ir mums prieinamoje. 209 00:16:02,710 --> 00:16:06,960 Mes priėmėme, savaime suprantamu dalyku, kad buvo toks struct kamino. 210 00:16:06,960 --> 00:16:08,930 Taigi, žvelgdamas atgal šiuo stumti kodą, 211 00:16:08,930 --> 00:16:13,450 jūs galite pamatyti, ką mes darome, stuff su šios eilutės, kad gavo praėjo 212 00:16:13,450 --> 00:16:19,210 bet tada visi staiga, mes susipažinimo s.size, kaip, kur ai atsirado? 213 00:16:19,210 --> 00:16:23,020 Kodą, kad mes ketiname pažvelgti skyrelyje Archyvas 214 00:16:23,020 --> 00:16:27,100 ir tada nustato dalykų, kad jums daryti jūsų problemą, 215 00:16:27,100 --> 00:16:32,440 mes padarėme mūsų kamino Struct pasaulinį kintamąjį 216 00:16:32,440 --> 00:16:36,380 taip, kad mes galime turėti prieigą prie visų mūsų skirtingas funkcijas 217 00:16:36,380 --> 00:16:40,630 be būtinybės rankiniu būdu perduoti jį aplink ir perduoti jį atsižvelgiant, 218 00:16:40,630 --> 00:16:44,870 padaryti viską, kad daiktų į jį natūra. 219 00:16:44,870 --> 00:16:52,280 Mes tiesiog apgaudinėja šiek tiek, jei norite, kad viskas gražiau. 220 00:16:52,280 --> 00:16:57,430 Ir tai yra kažkas, ką mes darome čia, nes tai for fun, tai lengviau. 221 00:16:57,430 --> 00:17:02,800 Dažnai, jūs pamatysite, žmonės tai padaryti, jei jie turi vieną didelį duomenų struktūrą 222 00:17:02,800 --> 00:17:07,750 kad operuojama po savo programą. 223 00:17:07,750 --> 00:17:09,560 >> Grįžkime į prietaiso. 224 00:17:09,560 --> 00:17:15,240 Ar visi sėkmingai gauti section6.zip? 225 00:17:15,240 --> 00:17:20,440 Visi išpakuokite jį naudojant išpakuokite section6.zip? 226 00:17:20,440 --> 00:17:27,200 Jeigu jūs einate į 6 skirsnis kataloge - 227 00:17:27,200 --> 00:17:29,220 AAH, visur - 228 00:17:29,220 --> 00:17:32,840 ir jums sąrašą, kas yra čia, matote, kad jūs turite tris skirtingus C failus. 229 00:17:32,840 --> 00:17:38,350 Jūs turite eilę, SLL, kuri yra atskirai susieta sąrašas ir kamino. 230 00:17:38,350 --> 00:17:44,600 Jei atidarote stack.c, 231 00:17:44,600 --> 00:17:47,330 galite matyti, kad mes turime šį struct apibrėžtas mus 232 00:17:47,330 --> 00:17:51,330 tiksli struct, kad mes tiesiog kalbėjomės apie skaidres. 233 00:17:51,330 --> 00:17:56,340 Mes turime savo pasaulinį kintamąjį kamino, 234 00:17:56,340 --> 00:18:00,110 mes turime mūsų stumti funkciją, 235 00:18:00,110 --> 00:18:04,230 ir tada mes turime mūsų pop funkciją. 236 00:18:04,230 --> 00:18:08,320 Aš įdėti kodą stumti atgal skaidrę, 237 00:18:08,320 --> 00:18:10,660 bet tai, ką aš norėčiau jus vaikinai daryti, savo galimybes, 238 00:18:10,660 --> 00:18:13,790 eiti ir įgyvendinti pop funkciją. 239 00:18:13,790 --> 00:18:18,480 Kai jūs ją įgyvendino, jūs galite sudaryti tai padaryti krūvą, 240 00:18:18,480 --> 00:18:22,540 ir paleiskite gautą kamino vykdomąjį 241 00:18:22,540 --> 00:18:28,390 ir kad bus paleisti visus šio bandymo kodas žemyn čia tai pagrindinis. 242 00:18:28,390 --> 00:18:31,060 Ir pagrindinis rūpinasi iš tikrųjų stumti ir pop skambučių 243 00:18:31,060 --> 00:18:33,220 ir įsitikinkite, kad viskas eina per visą teisę. 244 00:18:33,220 --> 00:18:36,820 Ji taip pat inicijuoja kamino dydis čia 245 00:18:36,820 --> 00:18:39,780 todėl jūs neturite jaudintis dėl Inicijuojama, kad. 246 00:18:39,780 --> 00:18:42,310 Galite manyti, kad tai buvo tinkamai inicializuoti 247 00:18:42,310 --> 00:18:48,000 iki to laiko, kad jūs į jį pop funkcija. 248 00:18:48,000 --> 00:18:53,530 Ar tai prasminga? 249 00:18:53,530 --> 00:19:00,100 Taigi čia mes einame. Yra push kodas. 250 00:19:00,100 --> 00:19:13,210 Aš duosiu jums, vaikinai, 5 ar 10 minučių. 251 00:19:13,210 --> 00:19:15,690 Ir jei turite kokių nors klausimų tarpu, o jūs kodavimo, 252 00:19:15,690 --> 00:19:17,710 paprašykite, kad garsiai. 253 00:19:17,710 --> 00:19:23,080 Taigi, jei jūs gaunate nesutarimų, tiesiog paprašykite. 254 00:19:23,080 --> 00:19:26,030 Leiskite man žinoti, tegul visi kiti žino. 255 00:19:26,030 --> 00:19:28,160 Dirbti su savo kaimyną. 256 00:19:28,160 --> 00:19:30,360 [Daniel] Mes tik įgyvendinimo pop dabar? >> Tiesiog pop. 257 00:19:30,360 --> 00:19:34,200 Nors galite kopijuoti tiesioginio įgyvendinimą, jei norite 258 00:19:34,200 --> 00:19:37,780 kad bandymai veiks. 259 00:19:37,780 --> 00:19:41,940 Nes sunku išbandyti dalykus, nepatektų į 260 00:19:41,940 --> 00:19:49,030 arba, sunku patikrinti, Popping dalykų iš kamino, jei įrenginyje nėra nieko pradėti. 261 00:19:49,030 --> 00:19:55,250 >> Kas yra pop turėtų grįžti? Iš kamino viršuje elementas. 262 00:19:55,250 --> 00:20:01,260 Jis turėjo gauti elementą iš kamino viršuje 263 00:20:01,260 --> 00:20:05,780 ir tada Mažėja kamino dydis, 264 00:20:05,780 --> 00:20:07,810 ir dabar jūs praradote ant viršaus elementas. 265 00:20:07,810 --> 00:20:11,420 Ir tada jums grįžti elementą į viršų. 266 00:20:11,420 --> 00:20:20,080 [Studentų, nesuprantamas] 267 00:20:20,080 --> 00:20:28,810 [Hardison] Taigi, kas atsitiks, jei jūs darote, kad? [Studentų, nesuprantamas] 268 00:20:28,810 --> 00:20:34,000 Kas galų gale vyksta, yra jūs tikriausiai susipažinimo arba 269 00:20:34,000 --> 00:20:37,350 elementas, kuris dar nebuvo inicializuoti, kad jūsų skaičiavimas 270 00:20:37,350 --> 00:20:39,990 kur pastarasis elementas yra išjungtas. 271 00:20:39,990 --> 00:20:46,260 Taigi čia, jei pastebėjote, stumti, mes prieigą prie eilutes tuo s.size elementas 272 00:20:46,260 --> 00:20:48,560 , nes tai naujas puslapis. 273 00:20:48,560 --> 00:20:51,460 Tai naujas kamino viršuje. 274 00:20:51,460 --> 00:21:01,100 Kadangi pop s.size bus kitą erdvę, 275 00:21:01,100 --> 00:21:05,210 vietos, kad ant visų savo kamino elementų. 276 00:21:05,210 --> 00:21:10,050 Taigi iš viršaus labiausiai elementas nėra stovėjimo s.size, 277 00:21:10,050 --> 00:21:14,930 o, tai po juo. 278 00:21:14,930 --> 00:21:19,640 >> Kitas dalykas daryti, kai jūs - pop, 279 00:21:19,640 --> 00:21:22,030 yra jūs turite Mažėja dydį. 280 00:21:22,030 --> 00:21:28,750 Jei prisimenate, atgal į mūsų mažai diagrama čia, 281 00:21:28,750 --> 00:21:30,980 tikrai, vienintelis dalykas, kad mes matėme vyksta, kai mes vadinami pop 282 00:21:30,980 --> 00:21:36,150 buvo tai, kad šis dydis sumažėjo, visų pirma iki 2, tada 1. 283 00:21:36,150 --> 00:21:42,620 Tada, kai mes stumti naują elementą, jis būtų eiti tinkamu vietoje. 284 00:21:42,620 --> 00:21:49,610 Bazilikas] Jei s.size yra 2, tada nebūtų it go elementas 2 285 00:21:49,610 --> 00:21:54,400 ir tada jūs norėtumėte, kad pop šis elementas? 286 00:21:54,400 --> 00:21:59,510 Taigi, jei mes nuvyko į >> Taigi pažvelkime į tai dar kartą. 287 00:21:59,510 --> 00:22:07,730 Jei tai yra mūsų kamino šiuo metu 288 00:22:07,730 --> 00:22:12,130 ir mes vadiname pop, 289 00:22:12,130 --> 00:22:16,150 indeksas, kuriame yra iš viršaus labiausiai elementas? 290 00:22:16,150 --> 00:22:19,300 [Bazilikas] 2, bet jis vyksta, kad pop-3. >> Teisė. 291 00:22:19,300 --> 00:22:24,220 Taip, kad kur mūsų dydis yra 3, bet mes norime, pop elemento indeksu 2. 292 00:22:24,220 --> 00:22:29,900 Tai, kad tipiškas rūšies išjungti, kad jūs turite su nulinės indeksavimo masyvų. 293 00:22:29,900 --> 00:22:36,430 Taigi, jūs norite pop trečiąjį elementą, bet Trečiasis elementas yra ne indeksu 3. 294 00:22:36,430 --> 00:22:39,430 Ir priežastis, mes neturime daryti, kad minus 1, kai mes stumti 295 00:22:39,430 --> 00:22:44,120 yra todėl, kad dabar, jūs pastebėsite, kad iš viršaus labiausiai elementas, 296 00:22:44,120 --> 00:22:47,600 , jei šiuo metu mes buvome nustumti kažką kita ant kamino, 297 00:22:47,600 --> 00:22:50,360 mes norime stumti jį indeksuoti 3. 298 00:22:50,360 --> 00:23:03,550 Ir ji tiesiog taip atsitinka, kad dydis ir indeksai išsirikiuoti, kai jūs stumti. 299 00:23:03,550 --> 00:23:06,960 >> Kas turi darbo kamino įgyvendinimą? 300 00:23:06,960 --> 00:23:09,690 Jūs turite darbo sukrauti vieną. Ar turite pop veikia dar? 301 00:23:09,690 --> 00:23:11,890 [Daniel] Taip. Manau, kad taip. 302 00:23:11,890 --> 00:23:14,610 >> Programos veikia, o ne seg kraigo, tai spausdinti? 303 00:23:14,610 --> 00:23:17,520 Ji atsispausdinti "sėkmę", kai jį paleisti? 304 00:23:17,520 --> 00:23:22,630 Taip. Padaryti sukrauti, paleisti jį, jei jis spausdina "sėkmę", ir jame nenumatyta jokių bumas, 305 00:23:22,630 --> 00:23:26,000 tada viskas gerai. 306 00:23:26,000 --> 00:23:34,070 Gerai. Eikime per prietaiso tikrai greitai, 307 00:23:34,070 --> 00:23:46,100 ir mes vaikščioti per šį. 308 00:23:46,100 --> 00:23:51,110 Jei pažvelgsime į tai, kas vyksta čia su pop, 309 00:23:51,110 --> 00:23:55,220 Daniel, kas buvo pirmas dalykas, kad jums padarė? 310 00:23:55,220 --> 00:23:58,850 [Daniel] Jei s.size yra didesnis už 0. 311 00:23:58,850 --> 00:24:03,120 [Hardison] Gerai. Ir kodėl tu taip padarei? 312 00:24:03,120 --> 00:24:05,610 [Daniel] Norėdami įsitikinti, kad ten buvo kažkas viduje kamino. 313 00:24:05,610 --> 00:24:10,950 [Hardison] Teisė. Norite patikrinti, įsitikinkite, kad s.size yra didesnis už 0; 314 00:24:10,950 --> 00:24:13,280 kitaip, ko tu nori, kad atsitiktų? 315 00:24:13,280 --> 00:24:16,630 [Daniel] Grįžti null? >> Grįžti null, tiksliai. 316 00:24:16,630 --> 00:24:20,740 Taigi, jei s.size yra didesnis už 0. Tada tai, ką mes ketiname daryti? 317 00:24:20,740 --> 00:24:25,890 Ką mes darome,, jei kamino nėra tuščias? 318 00:24:25,890 --> 00:24:31,210 [Stella] Mažėja dydį? >> Mažėja dydį, gerai. 319 00:24:31,210 --> 00:24:34,440 Taigi, kaip tu tai padarei? >> S.size -. 320 00:24:34,440 --> 00:24:37,030 [Hardison] Didysis. Ir tada, ką jūs darote? 321 00:24:37,030 --> 00:24:44,140 [Stella] Ir tada aš pasakiau grąža s.string [s.size]. 322 00:24:44,140 --> 00:24:48,560 [Hardison] Didysis. 323 00:24:48,560 --> 00:24:51,940 Priešingu atveju jums grąžina NULL. Taip, Inga? 324 00:24:51,940 --> 00:24:55,510 [Sam] Kodėl ji turi būti s.size + 1? 325 00:24:55,510 --> 00:24:58,430 [Hardison], pridėjus 1? >> Taip. >> Supratau. 326 00:24:58,430 --> 00:25:00,980 [Sam] Maniau, kad dėl to, kad jūs vartojate 1 iš 327 00:25:00,980 --> 00:25:04,290 tada jūs ketinate būti grąžinama ne vieną, kad jie paprašė. 328 00:25:04,290 --> 00:25:09,400 [Hardison] Ir tai buvo tik tai, ką mes kalbame apie visą šią išdavimo 0 indeksų. 329 00:25:09,400 --> 00:25:11,380 Taigi, jei mes padidinti čia. 330 00:25:11,380 --> 00:25:15,650 Jei pažvelgsime į šį vaikiną čia, galite matyti, kad, kai mes pop, 331 00:25:15,650 --> 00:25:19,340 mes Popping elementą indeksu 2. 332 00:25:19,340 --> 00:25:25,200 >> Taigi, mes sumažinti savo dydį, tada mūsų dydis atitinka mūsų rodyklę. 333 00:25:25,200 --> 00:25:39,650 Jei mes neturime Mažėja dydį, tada mes turime padaryti, dydis -1 ir tada silpnėjimas. 334 00:25:39,650 --> 00:25:45,270 Didysis. Viskas gerai? 335 00:25:45,270 --> 00:25:47,530 Klausimų apie tai? 336 00:25:47,530 --> 00:25:54,050 Yra įvairių būdų, rašyti tai, kaip gerai. 337 00:25:54,050 --> 00:26:03,290 Iš tiesų, mes galime padaryti kažką dar - mes galime padaryti vieną-LINER. 338 00:26:03,290 --> 00:26:05,770 Mes galime padaryti vienos eilutės grąžą. 339 00:26:05,770 --> 00:26:12,980 Taigi, mes galime iš tikrųjų Mažėja prieš tai, kad mes grįžtame. 340 00:26:12,980 --> 00:26:18,320 Todėl pradėti - prieš s.size. 341 00:26:18,320 --> 00:26:22,060 Kad daro linija tikrai tankus. 342 00:26:22,060 --> 00:26:30,940 Jeigu skirtumas tarp - S dydžio ir s.size - 343 00:26:30,940 --> 00:26:40,130 kad ši postfix - jie vadina tai postfix, nes ateina po s.size - 344 00:26:40,130 --> 00:26:47,430 reiškia, kad s.size Vertinamas rasti indeksą 345 00:26:47,430 --> 00:26:50,410 nes ji yra šiuo metu, kai ši eilutė yra vykdomas, 346 00:26:50,410 --> 00:26:54,290 ir tada tai atsitinka po linija paleidžiama vykdyti. 347 00:26:54,290 --> 00:27:00,340 Po to, kai indeksas s.size elementas yra prieinama. 348 00:27:00,340 --> 00:27:07,260 Ir tai ne tai, ką norime, nes mes norime Mažėja atsitikti pirmą kartą. 349 00:27:07,260 --> 00:27:10,990 Othewise, mes ketiname gauti masyvo, efektyviai, iš ribų. 350 00:27:10,990 --> 00:27:16,850 Mes ketiname gauti elementą, kad mes iš tikrųjų norite pasiekti didesnį nei. 351 00:27:16,850 --> 00:27:23,840 Taip, Inga? >> Ar greičiau arba naudotų mažiau RAM, kad vienoje eilutėje, ar ne? 352 00:27:23,840 --> 00:27:29,620 [Hardison] Sąžiningai, tai tikrai priklauso. 353 00:27:29,620 --> 00:27:34,220 [Sam nesuprantamas] >> Taip, jis priklauso. Tai galite padaryti gudrybės kompiliatoriaus 354 00:27:34,220 --> 00:27:41,580 gauti kompiliatorius pripažinti, kad, paprastai, aš įsivaizduoti. 355 00:27:41,580 --> 00:27:44,840 >> Taigi, mes paminėti šiek tiek apie šį sudarytojas PDA 356 00:27:44,840 --> 00:27:47,400 , kad jūs galite padaryti rengiant, 357 00:27:47,400 --> 00:27:50,580 ir štai koks dalykas, kad sudarytojas galėtų išsiaiškinti, 358 00:27:50,580 --> 00:27:54,710 kaip Oh, hey, gal galite padaryti visa tai per vieną operaciją, 359 00:27:54,710 --> 00:27:59,420 o ne pakrovimo kintamąjį dydį iš atminties, 360 00:27:59,420 --> 00:28:03,770 decrementing, saugoti jį atgal, ir tada pakrauti jį atgal 361 00:28:03,770 --> 00:28:08,000 įvykdyti šios operacijos poilsio. 362 00:28:08,000 --> 00:28:10,710 Tačiau paprastai ne, tai ne dalykai 363 00:28:10,710 --> 00:28:20,770 kad manimi vyksta gerokai greičiau padaryti savo programą. 364 00:28:20,770 --> 00:28:26,000 Turite klausimų kaminai? 365 00:28:26,000 --> 00:28:31,360 >> Taip stumti ir Popping. Jei jus vaikinai nori išbandyti programišiaus leidimas, 366 00:28:31,360 --> 00:28:33,660 ką mes padarėme hacker leidinyje yra iš tikrųjų dingo 367 00:28:33,660 --> 00:28:37,670 ir padarė tai kamino dinamiškai auga. 368 00:28:37,670 --> 00:28:43,190 Pagrindinis uždavinys yra visų pirma čia stumianćia funkcija, 369 00:28:43,190 --> 00:28:48,820 išsiaiškinti, kaip padaryti, kad masyvas augti 370 00:28:48,820 --> 00:28:52,450 kaip jūs nuolat stumia daugiau ir daugiau elementų, kamino. 371 00:28:52,450 --> 00:28:56,000 Tai tikrai ne per daug papildomas kodas. 372 00:28:56,000 --> 00:29:00,080 Tik skambutis - jūs turite prisiminti, kad gauti skambučius į malloc ten tinkamai, 373 00:29:00,080 --> 00:29:03,310 , o tada, kai jūs ketinate skambinti realloc. 374 00:29:03,310 --> 00:29:06,090 Tai įdomus iššūkis, jei jus domina. 375 00:29:06,090 --> 00:29:11,550 >> Tačiau šiuo metu, galime pereiti ir pakalbėkime apie eiles. 376 00:29:11,550 --> 00:29:15,680 Pereikite per čia. 377 00:29:15,680 --> 00:29:19,340 Eilė arti kamino Giminystės. 378 00:29:19,340 --> 00:29:25,380 Taigi, kamino, tai, kad buvo pateikti praėjusių 379 00:29:25,380 --> 00:29:28,810 buvo pirmųjų dalykų, tada būti atgautas. 380 00:29:28,810 --> 00:29:33,600 Mes turime tai paskutinė, pirmoji iš arba LIFO, užsakant. 381 00:29:33,600 --> 00:29:38,390 Kadangi eilėje, kaip jūs tikitės, kai esate stovėjo eilėje, 382 00:29:38,390 --> 00:29:41,980 pirmasis asmuo, gauti linija, pirmas dalykas, kad gauti į eilę, 383 00:29:41,980 --> 00:29:47,630 yra pirmas dalykas, kad bus atgautas iš eilės. 384 00:29:47,630 --> 00:29:51,490 Eilės taip pat dažnai naudojama, kai mes susiduriame su diagramomis, 385 00:29:51,490 --> 00:29:55,560 kaip mes kalbėjome apie trumpai kaminai, 386 00:29:55,560 --> 00:30:00,260 ir eilės krūva kitų dalykų taip pat patogu. 387 00:30:00,260 --> 00:30:06,180 Vienas dalykas, kad ateina dažnai bando išlaikyti, pavyzdžiui, 388 00:30:06,180 --> 00:30:12,310 surūšiuoti elementų sąrašas. 389 00:30:12,310 --> 00:30:17,650 Ir jūs galite tai padaryti su masyvo. Galite išlaikyti surūšiuoti sąrašą dalykų, masyvo, 390 00:30:17,650 --> 00:30:20,650 bet kur, kad bus sudėtinga, tada jūs visada turite rasti 391 00:30:20,650 --> 00:30:26,160 tinkama vieta įterpti į kitą dalyką. 392 00:30:26,160 --> 00:30:28,250 Taigi, jei turite skaičių masyvą, nuo 1 iki 10, 393 00:30:28,250 --> 00:30:31,630 ir tada jūs norite išplėsti, kad visus numerius 1 per 100, 394 00:30:31,630 --> 00:30:33,670 ir jūs gaunate šiuos numerius atsitiktine tvarka ir bando išlaikyti viską 395 00:30:33,670 --> 00:30:40,650 surūšiuoti kaip jūs einate per, jūs galų gale padaryti daug perkelia. 396 00:30:40,650 --> 00:30:43,910 Eilėse tam tikrų rūšių ir tam tikrų rūšių pagrindinių duomenų struktūrų, 397 00:30:43,910 --> 00:30:46,670 jūs iš tikrųjų galite laikyti, kad tai yra gana paprasta. 398 00:30:46,670 --> 00:30:50,640 Jūs neturite pridėti kažką ir tada perskirstyti visa tai kiekvieną kartą. 399 00:30:50,640 --> 00:30:56,770 Nei jūs turite padaryti daug perkeliant vidaus elementų aplink. 400 00:30:56,770 --> 00:31:02,990 Kai mes žiūrime į eilę, jūs pamatysite, kad - taip pat queue.c kodo skirsnyje - 401 00:31:02,990 --> 00:31:10,950 struct, kad mes davė jums yra labai panašus į struct, kad mes davė jums kamino. 402 00:31:10,950 --> 00:31:13,770 >> Yra viena išimtis, ir kad viena išimtis 403 00:31:13,770 --> 00:31:21,700 yra tai, kad mes turime šį papildomą sveikasis skaičius, vadinama galva, 404 00:31:21,700 --> 00:31:28,120 ir galva čia yra sekti iš eilės galvą, 405 00:31:28,120 --> 00:31:32,160 arba pirmasis elementas eilėje. 406 00:31:32,160 --> 00:31:37,470 Su kamino, mes galėjome sekti elementą, kad mes buvo gauti, 407 00:31:37,470 --> 00:31:40,800 ar kamino viršaus, naudojant tik dydį, 408 00:31:40,800 --> 00:31:44,220 kadangi eilėje, mes susidoroti su galuose. 409 00:31:44,220 --> 00:31:49,000 Mes stengiamės pabaigoje pakeisti halsą dalykų, bet tada grįžti dalykų iš priekio. 410 00:31:49,000 --> 00:31:54,640 Taip efektyviai, su galva, mes turime eilės pradžioje indeksą, 411 00:31:54,640 --> 00:31:58,920 ir dydis mums suteikia eilės galą indeksas 412 00:31:58,920 --> 00:32:03,730 taip, kad mes galime gauti dalykų, nuo galvos ir pridėti dalykų prie uodegos. 413 00:32:03,730 --> 00:32:06,890 Kadangi, kamino, mes tik kada nors buvo susijusios su kamino viršuje. 414 00:32:06,890 --> 00:32:08,900 Mes niekada neturėjo ir atidarykite kamino apačioje. 415 00:32:08,900 --> 00:32:12,220 Mes tik daiktus į viršų ir paėmė ko ne viršuje 416 00:32:12,220 --> 00:32:17,470 todėl mes nereikėjo kad viduje mūsų struct papildomą lauką. 417 00:32:17,470 --> 00:32:20,590 Ar tai apskritai turi prasmę? 418 00:32:20,590 --> 00:32:27,670 Gerai. Taip, Charlotte? [Charlotte, nesuprantamas] 419 00:32:27,670 --> 00:32:32,660 [Hardison] Tai puikus klausimas, ir tai buvo viena, kad atėjo į paskaitą. 420 00:32:32,660 --> 00:32:36,290 Gal vaikščioti per keletą pavyzdžių bus paaiškinta, kodėl 421 00:32:36,290 --> 00:32:41,400 mes nenorime naudoti Strings [0] kaip galvos eilės. 422 00:32:41,400 --> 00:32:46,770 >> Taigi, įsivaizduokite, kad mes turime eilę, mes ketiname ją vadina eilė. 423 00:32:46,770 --> 00:32:49,210 Pradžioje, kai mes ką tik instantiated jį, 424 00:32:49,210 --> 00:32:53,330 kai mes ką tik paskelbė jį, mes negalime inicijuoti nieko. 425 00:32:53,330 --> 00:32:56,790 Visa tai yra šiukšlių. Todėl, žinoma, mes norime įsitikinti, kad mes inicijuoti 426 00:32:56,790 --> 00:33:00,950 dydis ir galvos laukai turi būti 0, kažkas protinga. 427 00:33:00,950 --> 00:33:05,770 Mes taip pat galėtų eiti į priekį ir nulis elementus mūsų eilėje. 428 00:33:05,770 --> 00:33:09,930 Ir padaryti Ši diagrama tinka, pastebėsite, kad dabar mūsų eilė gali turėti tik tris elementus; 429 00:33:09,930 --> 00:33:13,150 kadangi mūsų kamino gali turėti keturis, mūsų eilė gali turėti tik tris. 430 00:33:13,150 --> 00:33:18,680 Ir tai tik padaryti diagrama tinka. 431 00:33:18,680 --> 00:33:26,150 Pirmas dalykas, kad kas čia vyksta, tai mes į eilę eilutę "labas". 432 00:33:26,150 --> 00:33:30,380 Ir kaip mes padarėme su kamino, nieko baisiai skiriasi čia, 433 00:33:30,380 --> 00:33:39,230 mes išmetame eilutę stygos [0] ir prieaugio mūsų dydį 1. 434 00:33:39,230 --> 00:33:42,720 Mes į eilę "bye", jis bus įdėti. 435 00:33:42,720 --> 00:33:45,870 Taigi, tai atrodo, kad didžioji dalis kamino. 436 00:33:45,870 --> 00:33:53,230 Mes prasidėjo čia, naujas elementas, naujas elementas, dydis nuolat didėja. 437 00:33:53,230 --> 00:33:56,330 Kas vyksta šiuo metu, kai norime dequeue kažką? 438 00:33:56,330 --> 00:34:01,280 Kai mes norime dequeue, kuris yra elementas, kad mes norime dequeue? 439 00:34:01,280 --> 00:34:04,110 [Bazilikas] Stygos [0]. >> Nulis. Visiškai teisus, bazilikas. 440 00:34:04,110 --> 00:34:10,960 Mes norime atsikratyti pirmą eilutę, tai vienas, "Labas". 441 00:34:10,960 --> 00:34:13,170 Taigi, kas buvo kitas dalykas, kad pasikeitė? 442 00:34:13,170 --> 00:34:17,010 Atkreipkite dėmesį, kai mes popped ką nors ne iš kamino, mes tiesiog pakeičiau dydį, 443 00:34:17,010 --> 00:34:22,080 bet čia, mes turime keletą dalykų, kad pokyčiams. 444 00:34:22,080 --> 00:34:27,440 Ne tik dydžio keitimą, bet pagrindinis pokyčius. 445 00:34:27,440 --> 00:34:31,020 Tai grįžta į Charlotte taško ankstesniu: 446 00:34:31,020 --> 00:34:38,699 kodėl mes turime šiuo pagrindu taip pat? 447 00:34:38,699 --> 00:34:42,110 Ar tai prasminga dabar, Charlotte? >> Rūšies. 448 00:34:42,110 --> 00:34:47,500 [Hardison] rūšis? Taigi, kas atsitiko kai mes dequeued? 449 00:34:47,500 --> 00:34:54,340 Ką galva dabar tai yra įdomu? 450 00:34:54,340 --> 00:34:56,449 [Charlotte] O, nes ji pasikeitė - gerai. Suprantu. 451 00:34:56,449 --> 00:35:02,090 Nes galvos - kur galva yra nukreipta į vietą pokyčius. 452 00:35:02,090 --> 00:35:07,200 Tai jau ne nulinis indeksas vienas. >> Taip, tiksliai. 453 00:35:07,200 --> 00:35:17,660 Kas atsitiko, jei dequeueing aukštą elementas 454 00:35:17,660 --> 00:35:20,590 buvo padaryta ir mes neturėjome Ši galva lauką 455 00:35:20,590 --> 00:35:26,880 nes mes visada skambina šią eilutę 0 indeksą mūsų eilėje galvos 456 00:35:26,880 --> 00:35:30,170 tada mes turėsime perkelti likusią eilėje. 457 00:35:30,170 --> 00:35:36,010 Mes norime turėti perkelti "bye" nuo nuo styginių [1] stygos [0]. 458 00:35:36,010 --> 00:35:38,760 Ir styginiams [2], kad stygos [1]. 459 00:35:38,760 --> 00:35:43,050 Ir mes norime tai padaryti visą sąrašą elementų, 460 00:35:43,050 --> 00:35:45,110 visas masyvo elementų. 461 00:35:45,110 --> 00:35:50,490 Ir kai mes tai darome su masyvo, kad bus tikrai brangus. 462 00:35:50,490 --> 00:35:53,340 Taigi čia, tai ne big deal. Mes tiesiog turime tris elementus mūsų masyvas. 463 00:35:53,340 --> 00:35:57,230 Bet jei mes turėjome tūkstančio elementų eilę arba milijono elementų, 464 00:35:57,230 --> 00:36:00,060 ir tada visi staiga, mes pradedame krūva dequeue ragina visus į kilpą, 465 00:36:00,060 --> 00:36:03,930 dalykai yra tikrai ketina sulėtinti, nes jo dėka viskas žemyn nuolat. 466 00:36:03,930 --> 00:36:07,320 Žinote, perkelti į 1, 1, pamainos poslinkį į 1, perėjimas iš 1. 467 00:36:07,320 --> 00:36:13,650 Vietoj to, mes naudojame šią galvą, mes jį vadiname "rodyklė", nors tai tikrai ne rodyklė 468 00:36:13,650 --> 00:36:16,430 siaurąja prasme, tai nėra žymeklis tipas. 469 00:36:16,430 --> 00:36:19,410 Tai ne int * arba char * ar kas nors panašaus. 470 00:36:19,410 --> 00:36:28,930 Bet tai nukreipta arba apie mūsų eilėje galvą. Taip? 471 00:36:28,930 --> 00:36:38,800 >> [Studentų] Kaip dequeue žinoti, tiesiog nusibaigti viską, kas į galvą? 472 00:36:38,800 --> 00:36:43,620 [Hardison] Kaip dequeue žinoti, kaip nusibaigti viską, kas į galvą? >> Teisė, taip. 473 00:36:43,620 --> 00:36:49,050 >> Tai, ką jis žiūri tik kokia galva laukas yra nustatytas. 474 00:36:49,050 --> 00:36:52,710 Taigi šiame Pirmuoju atveju, jei pažvelgsime čia, 475 00:36:52,710 --> 00:36:55,690 mūsų galvos yra 0, indeksas 0. >> Teisė. 476 00:36:55,690 --> 00:37:00,500 [Hardison] Taigi, jis tiesiog sako Gerai, gerai, indeksuoti 0 elementas, eilutė "labas", 477 00:37:00,500 --> 00:37:03,050 yra elementas mūsų eilėje galvos. 478 00:37:03,050 --> 00:37:05,570 Taigi, mes ketiname dequeue, kad vaikinas. 479 00:37:05,570 --> 00:37:09,800 Ir tai bus elementas, kuris bus grąžintas skambinančiajam. 480 00:37:09,800 --> 00:37:14,540 Taip, Saad? >> Taigi galva iš esmės nustato - kai jūs ketinate indeksuoti,? 481 00:37:14,540 --> 00:37:17,750 Štai ji paleisti? >> Taip. >> Gerai. 482 00:37:17,750 --> 00:37:22,900 [Hardison] Tai tampa nauja pradžia mūsų masyvas. 483 00:37:22,900 --> 00:37:28,930 Taigi,, kai jums dequeue kažką, viskas, ką jums reikia padaryti yra gauti indeksuoti q.head elementas, 484 00:37:28,930 --> 00:37:32,240 ir kad bus elementas, kad norite dequeue. 485 00:37:32,240 --> 00:37:34,930 Jūs taip pat turite Mažėja dydį. 486 00:37:34,930 --> 00:37:39,430 Mes pamatysime šiek tiek vėliau, kai ko gauti šiek tiek sudėtinga su šia. 487 00:37:39,430 --> 00:37:46,520 Mes dequeue, o dabar, jei mes į eilę dar kartą, 488 00:37:46,520 --> 00:37:51,300 kur mes į eilę? 489 00:37:51,300 --> 00:37:55,000 Kur gi kitas elementas mūsų eilėje? 490 00:37:55,000 --> 00:37:57,980 Tarkime, mes norime į eilę eilutę "CS". 491 00:37:57,980 --> 00:38:02,240 , Į kurią indeksas bus eiti? [Studentai] Stygos [2]. >> Du. 492 00:38:02,240 --> 00:38:04,980 Kodėl 2, o ne 0? 493 00:38:04,980 --> 00:38:13,570 [Bazilikas] Nes dabar galva yra 1, todėl, kad kaip sąrašo pradžioje? 494 00:38:13,570 --> 00:38:21,220 [Hardison] Teisė. Ir ką žymi sąrašo pabaigą? 495 00:38:21,220 --> 00:38:23,290 Ką mes buvome naudojant pažymėti mūsų eilėje pabaiga? 496 00:38:23,290 --> 00:38:25,970 Galva yra mūsų eilėje galva, mūsų eilėje pradžia. 497 00:38:25,970 --> 00:38:29,530 Kas yra mūsų eilėje pabaiga? [Studentai] Dydis. >> Dydis, tiksliai. 498 00:38:29,530 --> 00:38:36,360 Taigi, mūsų nauji elementai eiti dydis ir elementai, kad mes priimame išjungti pleiskanoti galvos. 499 00:38:36,360 --> 00:38:45,390 Kai mes į eilę kitą elementą, mes dedame ne dydis. 500 00:38:45,390 --> 00:38:48,530 [Studentų] Prieš įdėdami, kad nors dydis buvo 1, į dešinę? 501 00:38:48,530 --> 00:38:55,690 [Hardison] Teisė. Taigi, ne visai dydžio. Dydis +, o ne 1, bet + galvos. 502 00:38:55,690 --> 00:38:59,990 Kadangi mes persikėlė viską galvos sumą. 503 00:38:59,990 --> 00:39:14,270 Taigi čia, dabar mes turime 1 dydžio eilę, kad prasideda indeksas 1. 504 00:39:14,270 --> 00:39:20,730 Uodega 2 rodyklėje. Taip? 505 00:39:20,730 --> 00:39:25,780 >> [Studentų] Kas atsitinka, kai jūs dequeue stygos [0], ir stygos atminties lizdus 506 00:39:25,780 --> 00:39:29,420 tiesiog gauti ištuštinti, iš esmės, arba tiesiog pamiršote? 507 00:39:29,420 --> 00:39:34,700 [Hardison] Taip. Šia prasme, mes tiesiog užmiršimo. 508 00:39:34,700 --> 00:39:42,640 Jei mes saugoti jų kopijas - 509 00:39:42,640 --> 00:39:46,310 daug duomenų struktūras, dažnai saugo savo kopijas elementų 510 00:39:46,310 --> 00:39:51,760 valdyti duomenų struktūrą taip, kad asmuo neturi jaudintis 511 00:39:51,760 --> 00:39:53,650 apie tai, kur visi tie rodykles. 512 00:39:53,650 --> 00:39:56,000 Duomenų struktūra turi, kad viskas, turi visas kopijas, 513 00:39:56,000 --> 00:39:59,580 įsitikinti, kad viskas tęsiasi tinkamai. 514 00:39:59,580 --> 00:40:03,140 Tačiau šiuo atveju šios duomenų struktūros tiesiog, paprastumo, 515 00:40:03,140 --> 00:40:05,580 yra ne todėl, kad mes ją saugoti jų kopijas nieko. 516 00:40:05,580 --> 00:40:08,630 [Studentų] Taigi tai yra nuolatinis masyvas? >> Taip. 517 00:40:08,630 --> 00:40:14,350 Jei pažvelgsime atgal apibrėžimas buvo šios struktūros, ji yra. 518 00:40:14,350 --> 00:40:19,110 Tai tiesiog standartinis masyvas, kaip jūs mačiau, 519 00:40:19,110 --> 00:40:24,280 char * s masyvas. 520 00:40:24,280 --> 00:40:26,340 Ar tai - >> Aha, man buvo tiesiog įdomu 521 00:40:26,340 --> 00:40:29,130 , jei jūs galų gale paleisti iš atminties, tam tikru mastu, 522 00:40:29,130 --> 00:40:32,330 , jei turite visus šiuos tuščius dėmės jūsų masyvo? 523 00:40:32,330 --> 00:40:36,390 [Hardison] Taip, tai gera vieta. 524 00:40:36,390 --> 00:40:41,530 >> Jei pažvelgsime į tai, kas nutiko dabar, šiuo metu, 525 00:40:41,530 --> 00:40:46,350 mes užpildyti mūsų eilėje, jis atrodo. 526 00:40:46,350 --> 00:40:50,390 , Bet mes tikrai ne užpildyti mūsų eilę 527 00:40:50,390 --> 00:40:57,710 nes mes turime eilę, kad 2 dydis, bet ji prasideda indeksas 1, 528 00:40:57,710 --> 00:41:02,160 nes tai kur mūsų galvos rodyklė. 529 00:41:02,160 --> 00:41:08,400 Kaip jums sakydamas, kad stygos elemento [0], indeksuoti kaip 0, tai tikrai ne ten. 530 00:41:08,400 --> 00:41:10,450 Tai ne mūsų eilėje nebėra. 531 00:41:10,450 --> 00:41:16,460 Mes tiesiog nesivargino eiti ir ją perrašyti kai mes dequeued. 532 00:41:16,460 --> 00:41:18,700 Taigi, nors atrodo, kad mes paleisti iš atminties, mes tikrai ne. 533 00:41:18,700 --> 00:41:23,270 Kad vietoje mums naudoti. 534 00:41:23,270 --> 00:41:29,310 Tinkamas elgesys, jei mes buvo išbandyti ir pirmasis dequeue kažką 535 00:41:29,310 --> 00:41:34,420 patinka "bye", kad pop-bye išjungtas. 536 00:41:34,420 --> 00:41:38,460 Dabar mūsų eilė prasideda indeksu 2 ir 1 dydžio. 537 00:41:38,460 --> 00:41:42,240 Ir dabar, jei mes stengiamės ir į eilę vėl kažką, tarkim, 50, 538 00:41:42,240 --> 00:41:47,880 50 turėtų eiti šioje vietoje indeksuoti 0 539 00:41:47,880 --> 00:41:51,270 , nes jis vis dar pasiekiamas mums. Taip, Saad? 540 00:41:51,270 --> 00:41:53,630 [Saad] Ar, kad taip atsitiktų? 541 00:41:53,630 --> 00:41:56,150 [Hardison] Ji nėra atsitikti gana automatiškai. Jūs turite padaryti matematiką 542 00:41:56,150 --> 00:42:00,380 padaryti jį dirbti, tačiau iš esmės, ką mes padarėme, mes tiesiog suvynioti aplink. 543 00:42:00,380 --> 00:42:04,070 [Saad] Ir tai gerai, jei tai turi skylę jos viduryje? 544 00:42:04,070 --> 00:42:08,720 [Hardison] Tai jei mes galime padaryti matematikos dirbti tinkamai. 545 00:42:08,720 --> 00:42:15,470 >> Ir paaiškėja, kad tai iš tikrųjų ne tai, kad sunku padaryti su mod operatoriumi. 546 00:42:15,470 --> 00:42:20,040 Taigi, tiesiog, kaip mes padarėme su Cezario ir šifravimo stuff 547 00:42:20,040 --> 00:42:25,190 naudojant mod, mes galime gauti dalykų, į kuriuos vyniojami aplink ir nesustoti 548 00:42:25,190 --> 00:42:28,090 aplink ir aplink ir aplink su mūsų eilėje, 549 00:42:28,090 --> 00:42:32,180 kad galva rodyklė juda. 550 00:42:32,180 --> 00:42:38,840 Pastebėti, kad dydis yra visada atsižvelgiant į faktiškai elementų skaičių eilėje. 551 00:42:38,840 --> 00:42:43,110 Ir tai tik galva rodyklę, kad toliau važiuoti dviračiu per. 552 00:42:43,110 --> 00:42:49,660 Jei pažvelgsime, kas čia nutiko, jei mes einame atgal į pradžią, 553 00:42:49,660 --> 00:42:55,020 ir jūs tiesiog žiūrėti, kas atsitinka į galvą 554 00:42:55,020 --> 00:42:58,240 kai mes į eilę kažką, nieko neatsitiko į galvą. 555 00:42:58,240 --> 00:43:00,970 Kai mes enqueued ką nors kita, nieko neatsitiko į galvą. 556 00:43:00,970 --> 00:43:04,130 Greitai, kaip mes dequeued kažką, galva eina vieną. 557 00:43:04,130 --> 00:43:06,600 Mes enqueued kažką, nieko neįvyksta į galvą. 558 00:43:06,600 --> 00:43:11,060 ,, Kai mes dequeue kažką, visi staiga galva bus padidinamas. 559 00:43:11,060 --> 00:43:14,660 Kai mes į eilę kažką, nieko neįvyksta į galvą. 560 00:43:14,660 --> 00:43:20,240 >> Kas nutiktų, šiuo metu, jei mes kažką vėl dequeue? 561 00:43:20,240 --> 00:43:23,240 Bet mintis? Kas nutiktų, į galvą? 562 00:43:23,240 --> 00:43:27,190 , Kas turėtų atsitikti į galvą 563 00:43:27,190 --> 00:43:32,990 jei mes dequeue ką nors kita? 564 00:43:32,990 --> 00:43:35,400 Galva dabar yra indeksu 2, 565 00:43:35,400 --> 00:43:38,920 , o tai reiškia,, kad eilėje galva stygos [2]. 566 00:43:38,920 --> 00:43:44,280 [Studentų] Kuris grąžina 0? >> Jis turėtų grįžti iki 0. Jis turi zawijać atgal aplink, tiksliai. 567 00:43:44,280 --> 00:43:48,440 Iki šiol, kiekvieną kartą, kai mes vadinami dequeue, mes jau pridedant vieną į galvą, 568 00:43:48,440 --> 00:43:50,960 pridėti į galvą, pridėti vieną į galvą, pridėti vieną į galvą. 569 00:43:50,960 --> 00:43:58,400 Kuo greičiau, kad galva rodyklė gauna iki paskutinės indekso mūsų masyvas, 570 00:43:58,400 --> 00:44:05,650 tada mes turime wrap jį atgal aplink į pradžią, grįžkite į 0. 571 00:44:05,650 --> 00:44:09,900 [Charlotte] Kas lemia gebėjimus kamino eilėje? 572 00:44:09,900 --> 00:44:13,120 Šiuo atveju [Hardison], mes ką tik naudoju # apibrėžta konstanta. >> Gerai. 573 00:44:13,120 --> 00:44:19,590 [Hardison] faktinis c failas, galite eiti ir mėžti su juo šiek tiek 574 00:44:19,590 --> 00:44:21,710 ir padaryti jį tokie dideli, arba kiek norite. 575 00:44:21,710 --> 00:44:25,310 [Šarlotės "] Taigi, kai jūs darote eilę, kaip jūs, kad kompiuteris žinoti 576 00:44:25,310 --> 00:44:29,120 kaip didelis norite kamino? 577 00:44:29,120 --> 00:44:31,700 [Hardison] Tai puikus klausimas. 578 00:44:31,700 --> 00:44:34,800 Yra keletas būdų. Vienas iš jų yra tiesiog nustatyti jį iš anksto 579 00:44:34,800 --> 00:44:42,050 ir pasakyti, kad tai bus eilė, kuri turi 4 elementus arba 50 elementų arba 10.000. 580 00:44:42,050 --> 00:44:45,430 Kitas būdas yra daryti tai, ką įsilaužėlių leidimas žmonės daro 581 00:44:45,430 --> 00:44:52,310 ir sukurti funkcijas jūsų eilė dinamiškai auga daugiau dalykų, gauti papildomas. 582 00:44:52,310 --> 00:44:54,740 >> [Šarlotės "] Taigi eiti su pirmąjį variantą, ką sintaksė naudoti 583 00:44:54,740 --> 00:44:57,830 pasakyti programą, kas yra eilėje dydis? 584 00:44:57,830 --> 00:45:04,780 [Hardison] Ah. Taigi galime gauti iš to. 585 00:45:04,780 --> 00:45:12,650 Aš vis dar stack.c čia, todėl aš tik ketina slinkite aukštyn į viršų. 586 00:45:12,650 --> 00:45:17,920 Jūs galite pamatyti šią teisę? Tai # define capacity 10. 587 00:45:17,920 --> 00:45:24,600 Ir tai yra beveik tiksliai sintaksė, kad mes turime eilę. 588 00:45:24,600 --> 00:45:28,390 Išskyrus eilėje, čia mes turime, kad papildomų struct lauką. 589 00:45:28,390 --> 00:45:32,760 [Charlotte] O, aš maniau, talpa reiškė styginių gebėjimus. 590 00:45:32,760 --> 00:45:36,770 [Hardison] Ah. >> Kad tai didžiausias ilgis žodžio. >> Supratau. 591 00:45:36,770 --> 00:45:41,180 Taip. Pajėgumai čia - tai puikus taškas. 592 00:45:41,180 --> 00:45:44,000 Ir tai yra kažkas, kad sudėtinga 593 00:45:44,000 --> 00:45:49,480 , nes tai, ką mes nurodomas čia yra char * s masyvas. 594 00:45:49,480 --> 00:45:52,770 Patarimų masyvas. 595 00:45:52,770 --> 00:45:56,690 Tai simbolių masyvas. 596 00:45:56,690 --> 00:46:01,690 Tai tikriausiai yra tai, ką mačiau, kai jūs buvote, skelbiantis savo buferius failui I / O, 597 00:46:01,690 --> 00:46:06,840 kai jūs buvo sukurti eilutes rankiniu būdu ant kamino. 598 00:46:06,840 --> 00:46:09,090 Tačiau tai, ką mes turime čia, yra char * s matrica. 599 00:46:09,090 --> 00:46:13,400 Todėl masyvas rodykles. 600 00:46:13,400 --> 00:46:18,350 Tiesą sakant, jei mes padidinti atgal ir mes pažvelgti į tai, kas vyksta čia 601 00:46:18,350 --> 00:46:23,140 į pateiktį, pamatysite, kad faktinius elementus, simbolis duomenų 602 00:46:23,140 --> 00:46:26,180 nėra saugomas pačiame masyve. 603 00:46:26,180 --> 00:46:42,690 Kas saugomi mūsų masyvas rodykles į simbolių duomenis. 604 00:46:42,690 --> 00:46:52,560 Gerai. Taigi mes matėme, kaip eilės dydis kaip ir su kamino, 605 00:46:52,560 --> 00:46:58,670 dydis visada gerbia elementų skaičių eilėje. 606 00:46:58,670 --> 00:47:02,720 Atlikę 2 enqueues, dydis 2. 607 00:47:02,720 --> 00:47:07,110 Po priėmimo dequeue dydis yra dabar 1. 608 00:47:07,110 --> 00:47:09,330 Atlikę kitą į eilę dydis yra iki 2. 609 00:47:09,330 --> 00:47:12,340 Taigi dydis tikrai gerbia elementų skaičių eilėje, 610 00:47:12,340 --> 00:47:15,580 ir tada galva tiesiog išlaiko dviračiu. 611 00:47:15,580 --> 00:47:20,210 Ji eina nuo 0-1-2, 0-1-2, 0-1-2. 612 00:47:20,210 --> 00:47:25,620 Ir kiekvieną kartą, mes vadiname dequeue, galva žymeklis bus padidinamas iki kito indekso. 613 00:47:25,620 --> 00:47:29,930 Ir jei galva yra apie eiti per, kilpos atgal apie 0. 614 00:47:29,930 --> 00:47:34,870 Taigi su tuo, mes galime rašyti dequeue funkciją. 615 00:47:34,870 --> 00:47:40,200 Ir mes ketiname išvykti į eilę funkciją jus vaikinai įgyvendinti vietoj. 616 00:47:40,200 --> 00:47:45,880 >> Kai mes dequeue elementą iš mūsų eilėje, 617 00:47:45,880 --> 00:47:55,490 tai, kas buvo pirmas dalykas, kad Danielis, kai mes pradėjome rašyti pop funkcija kaminai? 618 00:47:55,490 --> 00:48:00,490 Leiskite man išgirsti ką nors, kas dar nebuvo kalbama. 619 00:48:00,490 --> 00:48:06,710 Pažiūrėkime, Saad, ar tu prisimeni, ką Daniel padarė taip, kaip pirmas dalykas, kai jis rašė pop? 620 00:48:06,710 --> 00:48:08,860 [Saad] Taip, tai buvo - >> Jis išbandyti ko nors. 621 00:48:08,860 --> 00:48:12,140 [Saad] Jei dydis yra didesnis už 0. >> Būtent. 622 00:48:12,140 --> 00:48:14,390 Ir kas buvo, kad bandymai? 623 00:48:14,390 --> 00:48:19,090 [Saad] Tai buvo bandymai, norėdami pamatyti, jei nėra nieko viduje masyvo. 624 00:48:19,090 --> 00:48:23,210 [Hardison] Taip. Tiksliai. Todėl jūs negalite jų pop nieko iš kamino, jei ji tuščia. 625 00:48:23,210 --> 00:48:26,510 Be to, galite ne dequeue nieko iš eilės, jei ji tuščia. 626 00:48:26,510 --> 00:48:30,420 Koks yra pirmas dalykas, kurį turėtume daryti mūsų dequeue funkciją čia, jūs manote? 627 00:48:30,420 --> 00:48:33,860 [Saad] Jei dydis yra didesnis nei 0? >> Taip. 628 00:48:33,860 --> 00:48:37,710 Šiuo atveju, aš iš tikrųjų tiesiog išbandyti, kad pamatyti, jei ji yra 0. 629 00:48:37,710 --> 00:48:42,240 Jei jis yra 0, mes galime grąžina NULL. 630 00:48:42,240 --> 00:48:45,280 Bet patį logika. 631 00:48:45,280 --> 00:48:49,110 Ir tegul toliau su šiuo. 632 00:48:49,110 --> 00:48:54,600 Jei dydis yra ne 0, kur yra elementas, kad mes norime dequeue? 633 00:48:54,600 --> 00:48:58,550 [Saad] į galvą? >> Būtent. 634 00:48:58,550 --> 00:49:01,720 Mes galime tiesiog ištraukite pirmasis elementas mūsų eilėje 635 00:49:01,720 --> 00:49:07,040 gauti elementą į galvą. 636 00:49:07,040 --> 00:49:14,630 Nieko iš proto. 637 00:49:14,630 --> 00:49:19,620 Po to, ką mes turėtume daryti? Kas turi atsitikti? 638 00:49:19,620 --> 00:49:23,740 Koks buvo kitas dalykas, kad mes kalbėjome apie dequeue? 639 00:49:23,740 --> 00:49:28,130 Du dalykai, kuriuos turi įvykti, nes mūsų eilė pasikeitė. 640 00:49:28,130 --> 00:49:35,640 [Daniel] sumažinti dydį. >> Mes turime sumažinti dydį ir padidinti galvą? Tiksliai. 641 00:49:35,640 --> 00:49:40,600 Norėdami padidinti galvą, mes galime ne tik aklai didinti galvą, prisiminti. 642 00:49:40,600 --> 00:49:45,080 Mes galime ne tik padaryti queue.head + +. 643 00:49:45,080 --> 00:49:51,630 Mes taip pat įtraukti šį pajėgumų mod. 644 00:49:51,630 --> 00:49:54,740 Ir kodėl mes mod pajėgumų, Stella? 645 00:49:54,740 --> 00:49:58,680 [Stella] Nes ji turi į kuriuos vyniojami aplink. >> Būtent. 646 00:49:58,680 --> 00:50:04,750 Mes mod pajėgumų, nes ji turi, į kuriuos vyniojami aplink 0. 647 00:50:04,750 --> 00:50:07,400 Taigi dabar, šiuo metu, mes galime daryti tai, ką Danielius sakė. 648 00:50:07,400 --> 00:50:12,700 Mes galime Mažėja dydį. 649 00:50:12,700 --> 00:50:29,170 Ir tada mes galime tiesiog grįžti elementas, kuris buvo į eilę viršuje. 650 00:50:29,170 --> 00:50:34,000 Atrodo mielas nesukalbamas ne pirmas. Jums gali tekti klausimą. Sorry? 651 00:50:34,000 --> 00:50:37,260 >> [Sam] Kodėl pirmą į eilę viršuje? Kur tai eiti? 652 00:50:37,260 --> 00:50:42,480 [Hardison] Jis kilęs iš ketvirtoje eilutėje nuo apačios. 653 00:50:42,480 --> 00:50:46,060 Po to, kai mes išbandyti, įsitikinti, kad mūsų eilė nėra tuščias, 654 00:50:46,060 --> 00:50:54,100 mes ištraukti char * pirma, mes ištraukti elementas, kuris sėdi prie galvos indeksas 655 00:50:54,100 --> 00:50:58,680 mūsų masyvas, mūsų styginiams masyvo, >> ir skambučiu, kuris pirmą kartą? 656 00:50:58,680 --> 00:51:04,500 [Hardison] Ir mes vadiname ji pirmą kartą. Taip. 657 00:51:04,500 --> 00:51:09,850 Tik imtis tolesnių veiksmų, kad, kodėl manote, kad mes turėjome padaryti, kad? 658 00:51:09,850 --> 00:51:18,270 [Sam] kiekvieną pirmą tik grįžau q.strings [q.head]? >> Taip. 659 00:51:18,270 --> 00:51:23,830 >> Kadangi mes darome, tai, kad q.head mod funkcija keičiasi, 660 00:51:23,830 --> 00:51:27,810 ir nėra jokio būdo tai padaryti, kad grįžtamosios linijos, taip pat. 661 00:51:27,810 --> 00:51:31,640 [Hardison] Būtent. Jūs esate vietoje. Sam visiškai vietoje. 662 00:51:31,640 --> 00:51:36,800 Priežastis, kodėl mes turėjome ištraukti pirmasis elementas mūsų eilėje ir laikyti jį į kintamąjį 663 00:51:36,800 --> 00:51:43,030 nes šią eilutę, jei mes ką tik q.head 664 00:51:43,030 --> 00:51:47,030 ten mod operatorius ten nėra kažkas, kad mes galime padaryti 665 00:51:47,030 --> 00:51:51,230 ir kad jis įsigalioja ant galvos be - vienoje eilutėje. 666 00:51:51,230 --> 00:51:54,480 Taigi, mes iš tikrųjų turime ištraukti pirmąjį elementą, tada koreguoti galvą, 667 00:51:54,480 --> 00:52:00,430 reguliuoti dydį, o tada grįžti elementą, kad mes ištraukė. 668 00:52:00,430 --> 00:52:02,680 Ir tai yra kažkas, kad mes pamatysime sugalvoti vėliau su 669 00:52:02,680 --> 00:52:04,920 susiję sąrašai, kaip mes pažaisti su jais. 670 00:52:04,920 --> 00:52:08,410 Dažnai, kai jūs atlaisvinti arba šalinimo sujungtų sąrašų 671 00:52:08,410 --> 00:52:13,500 jums reikia prisiminti kitą elementą, kitą žymiklį susietą sąrašą 672 00:52:13,500 --> 00:52:16,330 Prieš išmesdami dabartinės. 673 00:52:16,330 --> 00:52:23,580 , Nes priešingu atveju jūs išmesti informaciją apie tai, kas liko sąraše. 674 00:52:23,580 --> 00:52:34,160 Dabar, jei jūs einate į savo prietaiso, jums atverti queue.c--x tai. 675 00:52:34,160 --> 00:52:39,390 Taigi, jei aš atverti queue.c, leiskite man padidinti čia, 676 00:52:39,390 --> 00:52:44,970 pamatysite, kad jūs turite panašios išvaizdos failą. 677 00:52:44,970 --> 00:52:49,200 Panašios išvaizdos failą, ką turėjome anksčiau su stack.c. 678 00:52:49,200 --> 00:52:54,690 Mes turime mūsų struct eilėje apibrėžta tiesiog kaip matėme skaidres. 679 00:52:54,690 --> 00:52:59,870 >> Mes turime į eilę funkciją, kuri jums reikia padaryti,. 680 00:52:59,870 --> 00:53:04,340 Ir mes turime dequeue funkciją čia. 681 00:53:04,340 --> 00:53:06,870 Neįgyvendintos dequeue faile yra funkcija, 682 00:53:06,870 --> 00:53:13,230 bet aš įdėti ją atgal į viršų į "PowerPoint", taip, kad jūs galite įvesti jį, jei norite. 683 00:53:13,230 --> 00:53:16,690 Taigi per ateinančius 5 minučių arba tiek, jus vaikinai dirbti į eilę 684 00:53:16,690 --> 00:53:22,570 kuris yra beveik tik, priešais dequeue. 685 00:53:22,570 --> 00:53:29,560 Jūs neturite reguliuoti galvą, kai jūs enqueueing, bet ką turite koreguoti? 686 00:53:29,560 --> 00:53:38,920 Dydis. Taigi, kai jums į eilę, galva lieka nepaliesti, dydis bus pakeistas. 687 00:53:38,920 --> 00:53:46,920 Tačiau ji šiek tiek - galėsite pažaisti su tuo mod 688 00:53:46,920 --> 00:53:57,560 išsiaiškinti tiksliai indeksas naujasis elementas turi būti įrašomas. 689 00:53:57,560 --> 00:54:03,080 Taigi, aš duosiu jums, vaikinai, šiek tiek, įdėti dequeue atgal skaidrę, 690 00:54:03,080 --> 00:54:05,200 ir kaip jūs vaikinai turite klausimų, šaukti juos taip, kad galėtume 691 00:54:05,200 --> 00:54:09,220 visi apie juos kalbėti, kaip grupė. 692 00:54:09,220 --> 00:54:13,960 Be to, su dydžio jums NeraŠykiTe - kai jūs reguliuoti dydį, visada galite tiesiog 693 00:54:13,960 --> 00:54:18,720 jūs turite mod dydį kada nors? [Daniel] L. >> Jūs neturite mod dydį, teisė. 694 00:54:18,720 --> 00:54:24,260 Nes dydis visada bus, jei Tu - darant prielaidą, kad jūs valdymo dalykus tinkamai, 695 00:54:24,260 --> 00:54:30,840 dydis visada bus tarp 0 ir 3. 696 00:54:30,840 --> 00:54:38,680 Kur jūs turite mod, kai jūs darote į eilę? 697 00:54:38,680 --> 00:54:41,060 [Studentų] Tik už galvos. >> Tik už galvos, tiksliai. 698 00:54:41,060 --> 00:54:44,620 Ir kodėl jūs turite mod visi į eilę? 699 00:54:44,620 --> 00:54:48,830 Kai yra situacija, kurioje jūs turite mod? 700 00:54:48,830 --> 00:54:53,630 [Studentų] Jei turite stuff tarpų, pavyzdžiui, patalpos 1 ir 2 dalių, 701 00:54:53,630 --> 00:54:55,950 ir tada jums reikia pridėti kažką esant 0. 702 00:54:55,950 --> 00:55:02,570 [Hardison] Taip, būtent. Taigi, jei jūsų pagrindinė žymeklis yra pačioje pabaigoje, 703 00:55:02,570 --> 00:55:14,210 arba, jei jūsų dydis plius jūsų galva yra didesnis arba, tiksliau, į kuriuos vyniojami aplink eilėje. 704 00:55:14,210 --> 00:55:17,830 >> Taigi, šioje situacijoje, kad mes atsikėlė čia skaidrėje dabar, 705 00:55:17,830 --> 00:55:24,370 jei aš noriu į eilę kažką dabar, 706 00:55:24,370 --> 00:55:31,110 mes norime į eilę kažką indeksuoti kaip 0. 707 00:55:31,110 --> 00:55:35,450 Taigi, jei jums pažvelgti į kai 50 eina, ir aš skambinti į eilę 50, 708 00:55:35,450 --> 00:55:40,840 jis eina ten apačioje. Jis eina indekso 0. 709 00:55:40,840 --> 00:55:44,160 Ji pakeičia "Labas", kuri jau buvo dequeued. 710 00:55:44,160 --> 00:55:46,210 [Daniel] Ar ne jūs rūpintis, kad dequeue jau? 711 00:55:46,210 --> 00:55:50,550 Kodėl tai nieko daryti su į eilę galvos? 712 00:55:50,550 --> 00:55:55,770 [Hardison] Oi, todėl jūs ne keisti galvą, atsiprašau. 713 00:55:55,770 --> 00:56:02,310 Bet jūs turite naudoti mod operatorių, kai bandote pasiekti 714 00:56:02,310 --> 00:56:04,250 elementas, kad jūs norite į eilę, kai bandote pasiekti 715 00:56:04,250 --> 00:56:06,960 kitas elementas į savo eilę. 716 00:56:06,960 --> 00:56:10,960 [Bazilikas] aš ne daryti, kad ir aš "sėkmę" ten. 717 00:56:10,960 --> 00:56:13,370 [Daniel] O, aš suprantu, ką jūs sakote. 718 00:56:13,370 --> 00:56:16,240 [Hardison] Taigi jums didn't - tiesiog padarė gresia q.size? 719 00:56:16,240 --> 00:56:20,670 [Bazilikas] Taip. Aš tik pasikeitė pusių, aš ne daryti nieko su galva. 720 00:56:20,670 --> 00:56:24,300 [Hardison] Jūs neturite iš tikrųjų turi iš naujo galvą į ką nors, 721 00:56:24,300 --> 00:56:31,650 bet kai jūs puslapis į styginiams masyvo, 722 00:56:31,650 --> 00:56:39,500 jūs iš tikrųjų eiti į priekį ir apskaičiuoti, kur kito elemento, 723 00:56:39,500 --> 00:56:44,230 nes vytelė kitas elementas Jūsų žetonų krūvą, visada buvo 724 00:56:44,230 --> 00:56:48,740 indekso atitinkamu dydžio. 725 00:56:48,740 --> 00:56:55,850 Jei pažvelgsime atgal į viršų mūsų kamino stumti funkcija, 726 00:56:55,850 --> 00:57:03,100 mes visada galėtų Nogāzt mūsų naują elementą į dešinę indekso dydis. 727 00:57:03,100 --> 00:57:06,710 Kadangi eilėje, mes negalime padaryti, kad 728 00:57:06,710 --> 00:57:10,340 nes jei mes šioje situacijoje, 729 00:57:10,340 --> 00:57:18,130 jei mes enqueued 50 mūsų nauja eilutė būtų eiti į dešinę stygos [1] 730 00:57:18,130 --> 00:57:20,540 , kurios mes nenorime daryti. 731 00:57:20,540 --> 00:57:41,200 Mes norime, kad naujos eilutės eiti indeksuoti kaip 0. 732 00:57:41,200 --> 00:57:44,320 >> Ar kas nors taip? [Studentų] Turiu klausimą, bet tai tikrai nėra susiję su. 733 00:57:44,320 --> 00:57:48,160 Ką tai reiškia, kai kažkas tiesiog reikia kažką panašaus pred rodyklė? 734 00:57:48,160 --> 00:57:51,260 Kas yra tas pavadinimas, trumpas? Aš žinau, tai tik pavadinimas. 735 00:57:51,260 --> 00:57:59,110 [Hardison] Pred žymiklis? Pažiūrėkime. Kokiame kontekste? 736 00:57:59,110 --> 00:58:01,790 [Studentų] Tai buvo įterptos sekos. Galiu paprašyti jus, jei tik norėsite 737 00:58:01,790 --> 00:58:03,920 , nes jis nėra iš tikrųjų susijęs su, bet aš tiesiog - 738 00:58:03,920 --> 00:58:07,300 [Hardison] Nuo Dovydo įterpti kodą iš paskaitos? 739 00:58:07,300 --> 00:58:10,860 Mes galime traukti kad ir kalbėti apie tai. 740 00:58:10,860 --> 00:58:15,550 Mes kalbame apie tai, kad kita, kai mes gauti susietų sąrašus. 741 00:58:15,550 --> 00:58:21,440 >> Todėl galime labai greitai pažvelgti ką į eilę funkcija atrodo. 742 00:58:21,440 --> 00:58:26,530 Koks buvo pirmas dalykas, kad žmonės bandė padaryti savo į eilę eilutėje? Į šią eilę? 743 00:58:26,530 --> 00:58:29,960 Panašus į tai, ką padarė kamino stumia. 744 00:58:29,960 --> 00:58:32,080 Ką jūs darėte, Stella? 745 00:58:32,080 --> 00:58:35,050 [Stela, nesuprantamas] 746 00:58:35,050 --> 00:58:45,700 [Hardison] Būtent. Jei (q.size == TALPA) 747 00:58:45,700 --> 00:58:54,720 Man reikia įdėti savo petnešos tinkamoje vietoje - return false. 748 00:58:54,720 --> 00:59:01,370 Šiek tiek padidinti. Gerai. 749 00:59:01,370 --> 00:59:03,800 Dabar, kas Kitas dalykas, kad mes turėjome daryti? 750 00:59:03,800 --> 00:59:11,370 Kaip ir su į steką, ir įterpiamos reikiamoje vietoje. 751 00:59:11,370 --> 00:59:16,010 Ir kas buvo tinkama vieta, įterpti, kad? 752 00:59:16,010 --> 00:59:23,170 Kamino indekso dydis, su šiuo, tai ne gana, kad. 753 00:59:23,170 --> 00:59:30,210 [Daniel] Turiu q.head--- >> q.strings? >> Taip. 754 00:59:30,210 --> 00:59:40,470 q.strings [q.head + q.size mod TALPA]? 755 00:59:40,470 --> 00:59:42,740 [Hardison] Mes tikriausiai norite įdėti skliaustus aplink 756 00:59:42,740 --> 00:59:48,830 kad mes gauti atitinkamą pirmenybę ir kad cleart visiems. 757 00:59:48,830 --> 00:59:55,800 Ir nustatyti, kad lygios? >> STR? >> G. Didysis. 758 00:59:55,800 --> 01:00:00,160 Ir dabar, kas yra paskutinis dalykas, kad mes turime padaryti? 759 01:00:00,160 --> 01:00:06,780 Tiesiog, kaip mes padarėme kamino. >> Prieaugio dydį? >> Prieaugio dydį. 760 01:00:06,780 --> 01:00:13,830 Bumas. Ir tada, nuo starterio kodą ką tik grįžo klaidinga pagal nutylėjimą, 761 01:00:13,830 --> 01:00:27,460 mes norime pakeisti tai tiesa, jei viskas praeina ir viskas bus gerai. 762 01:00:27,460 --> 01:00:33,050 Gerai. Tai yra daug informacijos skyriuje. 763 01:00:33,050 --> 01:00:39,480 Nesame visiškai per. Mes norime, kad tikrai greitai kalbėti apie atskirai susijusių sąrašus. 764 01:00:39,480 --> 01:00:44,010 Aš įdėti tai, kad mes galime grįžti į ją vėliau. 765 01:00:44,010 --> 01:00:50,850 Bet grįžkime tik keli mūsų pristatymo skaidres. 766 01:00:50,850 --> 01:00:53,790 Taigi į eilę yra TODO, dabar mes tai padarėme. 767 01:00:53,790 --> 01:00:57,430 >> Dabar galime imtis atskirai susijusių sąrašus išvaizdą. 768 01:00:57,430 --> 01:01:00,040 Mes kalbėjome apie tai šiek tiek daugiau paskaitą. 769 01:01:00,040 --> 01:01:02,540 Kiek iš jūsų vaikinai pamatė demo, kur mes turėjome žmonių 770 01:01:02,540 --> 01:01:08,220 nerangiai nukreipta vieni su kitais ir ūkis skaičių? >> Buvau, kad. 771 01:01:08,220 --> 01:01:16,620 >> Ką jūs manote? Ar, tikiuosi paprastai paaiškinti šias šiek tiek? 772 01:01:16,620 --> 01:01:25,990 Su sąrašu, paaiškėja, kad turime kovoti su tokio tipo, kad mes ketiname skambinti mazgas. 773 01:01:25,990 --> 01:01:32,520 Kadangi, eilėje ir dėklą mes turėjome structs, kad mes norime skambinti eilę kamino, 774 01:01:32,520 --> 01:01:34,860 mes turėjome šias naujas kamino tipų eilę, 775 01:01:34,860 --> 01:01:39,240 Čia sąrašas yra tikrai ką tik padarė mazgų krūva. 776 01:01:39,240 --> 01:01:45,920 Tuo pačiu būdu, kad eilutės yra tik simbolių krūva visi išsirikiavo viena šalia kitos. 777 01:01:45,920 --> 01:01:50,650 Susijęs sąrašas yra tik mazgas ir kitas mazgas ir kitas mazgas ir kitas mazgas. 778 01:01:50,650 --> 01:01:55,080 Ir, užuot Smashing visus mazgus kartu ir saugoti juos Kaimynystėje 779 01:01:55,080 --> 01:01:58,090 viskas gerai šalia vienas kito atmintyje, 780 01:01:58,090 --> 01:02:04,470 tai kitą žymeklį leidžia mums laikyti mazgai visais atvejais, kai atsitiktinai. 781 01:02:04,470 --> 01:02:10,500 Ir tada natūra vielos juos visus kartu, kad iš vieno į kitą. 782 01:02:10,500 --> 01:02:15,850 >> Ir kas buvo didelis privalumas, kad tai turėjo per masyvo? 783 01:02:15,850 --> 01:02:21,680 Kaimynystėje tiesiog pakimba per laikymo viskas vienas šalia kito? 784 01:02:21,680 --> 01:02:24,190 Jūs prisimenate? Taip? >> Dinaminis atminties paskirstymas? 785 01:02:24,190 --> 01:02:27,220 >> Dinaminis atminties paskirstymas, kokia prasme? 786 01:02:27,220 --> 01:02:31,780 [Studentų], kad galite laikyti, kad ji didesnė ir jūs neturite perkelti savo visą masyvą? 787 01:02:31,780 --> 01:02:40,940 [Hardison] Būtent. Taigi su masyvo, kai norite įdėti naują elementą į jo viduryje, 788 01:02:40,940 --> 01:02:45,320 jūs turite perkelti viską, kad vietos. 789 01:02:45,320 --> 01:02:47,880 Ir, kaip mes kalbėjome apie tai su eilės 790 01:02:47,880 --> 01:02:50,080 Štai kodėl mes išlaikyti, kad galvos žymeklį, 791 01:02:50,080 --> 01:02:52,050 todėl, kad mes ne nuolat kinta dalykų. 792 01:02:52,050 --> 01:02:54,520 , Nes tai tampa brangus, jei jūs turite didelis masyvas 793 01:02:54,520 --> 01:02:57,130 ir jūs nuolat daryti šiuos atsitiktinius įterpia. 794 01:02:57,130 --> 01:03:00,820 Kadangi su sąrašu, viskas, ką jums reikia padaryti, yra mesti jį į naujas mazgas, 795 01:03:00,820 --> 01:03:06,330 nustatyti patarimų, ir baigsite. 796 01:03:06,330 --> 01:03:10,940 Kas sucks apie tai? 797 01:03:10,940 --> 01:03:16,830 Be tai, kad tai nėra taip lengva dirbti su masyvo? Taip? 798 01:03:16,830 --> 01:03:22,980 [Daniel] Na, manau, tai daug sunkiau pasiekti tam tikrą elementą į susietą sąrašą? 799 01:03:22,980 --> 01:03:30,470 [Hardison] Jūs galite ne tik pereiti į savavališkai elementas susieta "sąrašą viduryje. 800 01:03:30,470 --> 01:03:33,800 Kaip jūs turite padaryti, vietoj to? >> Jūs turite žingsnis per visą dalykas. 801 01:03:33,800 --> 01:03:35,660 [Hardison] Taip. Jūs turite eiti per vieną vienu metu, vienu metu. 802 01:03:35,660 --> 01:03:38,480 Tai didžiulis - tai skausmas. 803 01:03:38,480 --> 01:03:41,550 Kas kita - yra dar vienas nuopuolis į. 804 01:03:41,550 --> 01:03:45,340 [Bazilikas] Tu negali eiti į priekį ir atgal? Jūs turite eiti viena kryptimi? 805 01:03:45,340 --> 01:03:48,570 [Hardison] Taip. Taigi, kaip mes sprendžiame, kad kartais? 806 01:03:48,570 --> 01:03:53,370 [Bazilikas] Dvigubai susijusi sąrašus? >> Būtent. Yra dvigubai susijusių sąrašai. 807 01:03:53,370 --> 01:03:55,540 Taip pat yra - Atsiprašau? 808 01:03:55,540 --> 01:03:57,620 >> [Sam] Ar tai tas pats, kaip ir naudojant pred dalykas, kad 809 01:03:57,620 --> 01:04:01,090 Aš tiesiog prisiminiau, yra ne tai, ko Pred dalykas yra? 810 01:04:01,090 --> 01:04:05,850 Yra ne tai, kad tarp dvigubai ir atskirai? 811 01:04:05,850 --> 01:04:10,020 [Hardison] Pažvelkime, ką tiksliai jis daro. 812 01:04:10,020 --> 01:04:15,760 Taigi čia mes einame. Štai jų sąrašas kodas. 813 01:04:15,760 --> 01:04:25,620 Čia mes turime predptr čia. Tai yra tai, ką mes kalbame apie? 814 01:04:25,620 --> 01:04:30,750 Taigi tai buvo - jis atlaisvinus sąrašą ir jis bando laikyti rodyklę į jį. 815 01:04:30,750 --> 01:04:35,000 Tai ne dvigubai, atskirai susijusias sąrašai. 816 01:04:35,000 --> 01:04:40,090 Mes galime kalbėti daugiau apie tai vėliau, nes tai kalbame apie atlaisvinus sąrašą 817 01:04:40,090 --> 01:04:42,900 ir aš noriu parodyti kai kurių kitų dalykų. 818 01:04:42,900 --> 01:04:51,480 bet tai tik - tai prisimindamas ptr vertę 819 01:04:51,480 --> 01:04:54,170 [Studentų] O, tai ankstesniuose rodyklė? >> Taip. 820 01:04:54,170 --> 01:05:04,070 , Kad galėtume tada prieaugio PTR pati, kol mes tada laisvai, ką predptr. 821 01:05:04,070 --> 01:05:09,130 Kadangi mes negalime laisvai PTR ir tada paskambinti ptr = PTR kitą, tiesa? 822 01:05:09,130 --> 01:05:11,260 , Kad bus blogai. 823 01:05:11,260 --> 01:05:20,940 Taigi pažiūrėkime, šis vaikinas. 824 01:05:20,940 --> 01:05:23,900 >> Kitas blogas dalykas apie sąrašus, yra tas, kad su masyvo 825 01:05:23,900 --> 01:05:26,520 mes tiesiog turime visus elementus patys sukrauti vienas šalia kito, 826 01:05:26,520 --> 01:05:29,050 čia mes taip pat įvedė šį žymeklį. 827 01:05:29,050 --> 01:05:34,060 Taigi ten papildoma atminties riekė, kad mes naudoti 828 01:05:34,060 --> 01:05:37,910 kiekvieno elemento, kad mes ją saugoti mūsų sąraše. 829 01:05:37,910 --> 01:05:40,030 Mes gauname lankstumą, tačiau jis ateina į sąnaudas. 830 01:05:40,030 --> 01:05:42,230 Jis ateina su šio laiko sąnaudų, 831 01:05:42,230 --> 01:05:45,270 ir ji ateina su šią atminties sąnaudos. 832 01:05:45,270 --> 01:05:47,800 Laikas ta prasme, kad dabar mes turime pereiti per kiekvieno elemento masyve 833 01:05:47,800 --> 01:05:58,670 rasti 10 indeksuoti vieną, arba kad būtų buvę 10 puslapis masyvo. 834 01:05:58,670 --> 01:06:01,230 >> Tiesiog tikrai greitai, kai mes schema šiuos sąrašus, 835 01:06:01,230 --> 01:06:05,980 paprastai mes laikomės to sąrašo vadovo arba pirmą sąrašo rodyklė 836 01:06:05,980 --> 01:06:08,010 ir atkreipkite dėmesį, kad tai yra tiesa, rodyklė. 837 01:06:08,010 --> 01:06:11,100 Tai tik 4 baitų. Tai nėra tikrasis mazgas pati. 838 01:06:11,100 --> 01:06:17,120 Taigi, kaip matote, kad jis neturi int vertę, be kita žymiklį į jį. 839 01:06:17,120 --> 01:06:20,790 Tiesiogine prasme tai tiesiog rodyklė. 840 01:06:20,790 --> 01:06:23,550 Ji ketina atkreipti dėmesį į kažką, kad yra tikrasis mazgas struct. 841 01:06:23,550 --> 01:06:28,480 [Sam] rodyklė vadinama mazgas? >> Tai - ne. Tai yra rodyklė į kažką tipo mazgas. 842 01:06:28,480 --> 01:06:32,540 Tai yra rodyklė į struct mazgas. >> O, gerai. 843 01:06:32,540 --> 01:06:36,870 Diagrama kairėje dešinėje, kodas. 844 01:06:36,870 --> 01:06:42,190 Mes galime nustatyti NULL, kuris yra geras būdas pradėti. 845 01:06:42,190 --> 01:06:49,850 Kai jūs diagrama jį, jūs arba rašyti netekusiais arba jūs įtraukėte liniją per jį, kaip kad. 846 01:06:49,850 --> 01:06:53,910 >> Vienas iš paprasčiausių būdų, kaip dirbti su sąrašais, 847 01:06:53,910 --> 01:06:57,430 ir mes prašome, jūs tiek pridėkite ir prie pamatyti skirtumus tarp dviejų, 848 01:06:57,430 --> 01:07:01,320 bet prieš atitinkamai yra tikrai lengviau. 849 01:07:01,320 --> 01:07:05,790 Pridėkite iki keliu ženklas, tai kur jūs - kai jūs pridėkite (7), 850 01:07:05,790 --> 01:07:10,050 jūs einate ir sukurti mazgas struct 851 01:07:10,050 --> 01:07:13,870 ir jūs pirmiausia reikia priminti tai, nes dabar, nes mes jį pridėtas pradžioje, 852 01:07:13,870 --> 01:07:17,240 tai bus sąrašo pradžioje. 853 01:07:17,240 --> 01:07:22,540 Jei mes pridėkite (3), kuri sukuria kitą mazgą, bet dabar 3 ateina iki 7. 854 01:07:22,540 --> 01:07:31,130 Taigi mes iš esmės stumti dalykų į mūsų sąrašą. 855 01:07:31,130 --> 01:07:34,720 Dabar, jūs galite pamatyti, kad pridėkite, kartais žmonės ją vadina stumti, 856 01:07:34,720 --> 01:07:39,600 nes jūs stumti naują elementą į savo sąrašą. 857 01:07:39,600 --> 01:07:43,270 Tai taip pat lengva ištrinti sąrašo priekyje. 858 01:07:43,270 --> 01:07:45,650 Todėl žmonės dažnai skambinti, kad pop. 859 01:07:45,650 --> 01:07:52,200 Ir tokiu būdu, jūs galite rungtyniauti kamino, naudojant susietą sąrašą. 860 01:07:52,200 --> 01:07:57,880 Šūksniais. Atsiprašome, dabar mes vis į APPEND. Taigi čia mes pridėtas pradžioje (7), dabar mes pridėkite (3). 861 01:07:57,880 --> 01:08:02,600 Jei mes pridėtas pradžioje kažką kita į šį sąrašą, jei mes pridėtas pradžioje (4), 862 01:08:02,600 --> 01:08:06,540 tada mes norime turėti 4 ir 3 ir 7. 863 01:08:06,540 --> 01:08:14,220 Taip, tada mes galėtume pop ir pašalinti 4 3, pašalinti, pašalinti 7. 864 01:08:14,220 --> 01:08:16,500 Dažnai labiau intuityvus būdas galvoti apie tai su papildymo. 865 01:08:16,500 --> 01:08:20,310 Taigi aš diagrammed, ką jis atrodys su pridėti čia. 866 01:08:20,310 --> 01:08:23,380 Čia, pridedama (7) neturi atrodo kitoks 867 01:08:23,380 --> 01:08:25,160 nes ten yra tik vienas elementas sąraše. 868 01:08:25,160 --> 01:08:28,620 Ir papildymo (3) pradedančiam jį pabaigoje. 869 01:08:28,620 --> 01:08:31,020 Gal galite pamatyti dabar triuką su papildymo 870 01:08:31,020 --> 01:08:36,600 yra tai, kad, nes mes tik žinoti, kur sąrašo pradžioje, 871 01:08:36,600 --> 01:08:39,450 pridėti į sąrašą, jūs turite vaikščioti visą kelią per sąrašą 872 01:08:39,450 --> 01:08:46,500 gauti iki galo, sustabdyti, tada sukurti savo mazgas ir Nogāzt viskas žemyn. 873 01:08:46,500 --> 01:08:50,590 Viela visų dalykų. 874 01:08:50,590 --> 01:08:55,170 Taigi su Dėti mes tiesiog neveikiančių tikrai greitai, 875 01:08:55,170 --> 01:08:58,170 pridėkite iki keliu ženklas į sąrašą, tai gana paprasta. 876 01:08:58,170 --> 01:09:02,960 >> Jums padaryti jūsų naują mazgas, įtraukti tam tikrą dinaminį atminties paskirstymas. 877 01:09:02,960 --> 01:09:09,830 Taigi čia mes darome mazgo struct naudojant malloc. 878 01:09:09,830 --> 01:09:14,710 Taigi malloc mes naudojame, nes tai bus atidėta atminties mus ateičiai 879 01:09:14,710 --> 01:09:20,350 nes mes nenorime, kad tai - mes norime, kad ši atmintis išlieka ilgą laiką. 880 01:09:20,350 --> 01:09:25,350 Ir mes gauti žymiklį į atminties erdvę, kad mes tiesiog skirtos. 881 01:09:25,350 --> 01:09:29,260 Mes naudojame mazgo dydį, mes neturime susumuoja laukus. 882 01:09:29,260 --> 01:09:31,899 Mes neturime rankiniu būdu generuoti baitų skaičių, 883 01:09:31,899 --> 01:09:39,750 vietoj to, mes naudojame sizeof, kad mes žinome, kad gaunate atitinkamą skaičių baitų. 884 01:09:39,750 --> 01:09:43,660 Mes įsitikinkite, kad patikrinti, kad mūsų malloc skambutis pavyko. 885 01:09:43,660 --> 01:09:47,939 Tai yra kažkas, ką norite daryti apskritai. 886 01:09:47,939 --> 01:09:52,590 Modernios mašinos, nėra kažkas, kad lengva iš atminties 887 01:09:52,590 --> 01:09:56,610 , nebent esate skirti daiktų toną ir didžiulis sąrašas, 888 01:09:56,610 --> 01:10:02,220 tačiau, jei esate pastate dalykų, tarkim, kaip "iPhone" ar "Android", 889 01:10:02,220 --> 01:10:05,230 jūs turite ribotą atminties išteklių, ypač jei jūs darote kažką intensyvus. 890 01:10:05,230 --> 01:10:08,300 Todėl gerai gauti į praktiką. 891 01:10:08,300 --> 01:10:10,510 >> Atkreipkite dėmesį, kad aš naudojamas keletą skirtingų funkcijų 892 01:10:10,510 --> 01:10:12,880 , kad jūs matėte, kad yra tam tikros naujos. 893 01:10:12,880 --> 01:10:15,870 Taigi fprintf yra kaip printf 894 01:10:15,870 --> 01:10:21,320 išskyrus pirmojo argumento yra srautas, į kurią norite spausdinti. 895 01:10:21,320 --> 01:10:23,900 Šiuo atveju, mes norime spausdinti į standartinį klaidų eilutę 896 01:10:23,900 --> 01:10:29,410 kuris yra skiriasi nuo standartinės outstream. 897 01:10:29,410 --> 01:10:31,620 Pagal nutylėjimą ji pasirodo toje pačioje vietoje. 898 01:10:31,620 --> 01:10:34,600 Ji taip pat spausdina į terminalą, bet jūs galite 899 01:10:34,600 --> 01:10:38,790 naudojant šias komandas jums sužinojau apie, peradresavimo metodus 900 01:10:38,790 --> 01:10:42,290 sužinojote apie Tommy vaizdo problemą, 4, galite nukreipti ją 901 01:10:42,290 --> 01:10:47,900 įvairių sričių, tada išeiti, čia, išėjimai jūsų programa. 902 01:10:47,900 --> 01:10:50,440 Tai iš esmės kaip grįžęs iš pagrindinių, 903 01:10:50,440 --> 01:10:53,600 išskyrus mes naudojame išėjimą nes čia grąža nebus nieko. 904 01:10:53,600 --> 01:10:57,140 Mes ne pagrindinis, todėl grįžti nėra išeiti iš programos, kaip mes norime. 905 01:10:57,140 --> 01:11:03,020 Todėl mes naudojame išėjimo funkciją ir suteikia jai klaidos kodą. 906 01:11:03,020 --> 01:11:11,890 Tada čia mes nustatome naujas mazgas lauke vertė "i lauko turi būti lygus i, ir tada mes vielos jį. 907 01:11:11,890 --> 01:11:15,530 Mes nustatėme naujas mazgas kitą žymiklį pirmiausia, 908 01:11:15,530 --> 01:11:20,460 ir tada pirma į naujas mazgas. 909 01:11:20,460 --> 01:11:25,120 Šie pirmieji eilučių kodo, mes iš tikrųjų sukurti naują mazgas. 910 01:11:25,120 --> 01:11:27,280 Ne paskutinis dvi eilutės šios funkcijos, tačiau pirmieji. 911 01:11:27,280 --> 01:11:30,290 Jūs iš tikrųjų galite ištraukti į funkciją, į pagalbininkas funkcija. 912 01:11:30,290 --> 01:11:32,560 Kad dažnai tai, ką darau, aš traukti ją į funkciją, 913 01:11:32,560 --> 01:11:36,040 Aš tai vadinu kažką panašaus statyti mazgo, 914 01:11:36,040 --> 01:11:40,410 ir kuri išlaiko pridėkite funkcija gana mažas, tai tik tada 3 linijos. 915 01:11:40,410 --> 01:11:48,710 Skambinti mano statyti mazgo funkciją, ir tada aš vielos viską aukštyn. 916 01:11:48,710 --> 01:11:51,970 >> Paskutinis dalykas, aš noriu parodyti jums, 917 01:11:51,970 --> 01:11:54,030 ir aš jums pridėti ir visa tai dėl savo, 918 01:11:54,030 --> 01:11:57,500 yra, kaip pakartoti per sąrašą. 919 01:11:57,500 --> 01:12:00,780 Yra daug įvairių būdų, kad paeiliui per sąrašą krūva. 920 01:12:00,780 --> 01:12:03,140 Šiuo atveju, mes ketiname rasti sąrašą ilgis. 921 01:12:03,140 --> 01:12:06,570 Taigi mes pradedame ilgio = 0. 922 01:12:06,570 --> 01:12:11,580 Tai yra labai panašus strlen raštu eilutę. 923 01:12:11,580 --> 01:12:17,780 Tai, ką aš noriu parodyti jums, tai už linijos čia. 924 01:12:17,780 --> 01:12:23,530 Atrodo kinda funky, tai nėra įprasta, int i = 0, i 01:12:34,920 Vietoj to jis Inicijuojama mūsų kintama n turi būti sąrašo pradžioje. 926 01:12:34,920 --> 01:12:40,620 Ir tada, o mūsų iteratorius kintamasis nėra lygus nuliui, mes nuolat vyksta. 927 01:12:40,620 --> 01:12:46,340 Taip yra todėl, kaip įprasta, mūsų sąraše pabaiga bus niekinis. 928 01:12:46,340 --> 01:12:48,770 Ir tada prieaugio, o ne daro + + 929 01:12:48,770 --> 01:12:57,010 susijęs sąrašas atitikmuo + + n = n-> Kitas. 930 01:12:57,010 --> 01:13:00,410 >> Aš jums užpildyti spragas čia, nes mes iš laiko. 931 01:13:00,410 --> 01:13:09,300 Bet turėti tai omenyje, kaip jūs dirbate savo spellr psets. 932 01:13:09,300 --> 01:13:11,650 Susietos sąrašai, jei jūs įgyvendinimo maišos lentelę, 933 01:13:11,650 --> 01:13:14,010 tikrai ateis labai patogu. 934 01:13:14,010 --> 01:13:21,780 Ir šį tarmės kilpų užkliuvę, kad gyvenimas daug lengviau, tikiuosi. 935 01:13:21,780 --> 01:13:25,910 Bet kokių klausimų, greitai? 936 01:13:25,910 --> 01:13:28,920 [Sam] Ar galite atsiųsti užpildytą SLL ir SC? 937 01:13:28,920 --> 01:13:38,360 [Hardison] Taip. Aš atsiųsime užpildytus skaidres ir užpildytą SLL kamino ir queue.cs. 938 01:13:38,360 --> 01:13:41,360 [CS50.TV]