1 00:00:00,000 --> 00:00:02,730 [Powered by Google Translate] [6. jagu vähem mugavad] 2 00:00:02,730 --> 00:00:05,040 [Nate Hardison] [Harvardi Ülikool] 3 00:00:05,040 --> 00:00:07,320 [See on CS50.] [CS50.TV] 4 00:00:07,320 --> 00:00:11,840 Hea küll. Tere 6. jagu. 5 00:00:11,840 --> 00:00:14,690 Sel nädalal läheme räägime andmestruktuurid punktis, 6 00:00:14,690 --> 00:00:19,780 peamiselt seetõttu, et selle nädala probleem seatud spellr 7 00:00:19,780 --> 00:00:24,410 Kas terve hulk erinevaid andmeid struktuuri uurimine. 8 00:00:24,410 --> 00:00:26,520 Seal on hunnik erinevaid viise saab minna lahendamist, 9 00:00:26,520 --> 00:00:31,570 ja rohkem andmestruktuurid sa tead, seda rohkem lahedaid asju saab teha. 10 00:00:31,570 --> 00:00:34,990 >> Nii et hakkame pihta. Esiteks me ei kavatse rääkida korstnad, 11 00:00:34,990 --> 00:00:37,530 korstnat ja järjekorda andmestruktuurid et me ei kavatse rääkida. 12 00:00:37,530 --> 00:00:40,560 Hoidla ja järjekorrad on tõesti kasulik, kui me hakkame rääkima graafikud, 13 00:00:40,560 --> 00:00:44,390 mis me ei kavatse teha nii palju kohe. 14 00:00:44,390 --> 00:00:52,820 Aga nad on tõesti hea mõista üks suur fundamentaalne andmestruktuurid CS. 15 00:00:52,820 --> 00:00:54,880 Kirjeldus lahendamist spetsifikatsioon, 16 00:00:54,880 --> 00:00:59,260 kui te tõmmake see üles, räägib korstnad nagu sarnane 17 00:00:59,260 --> 00:01:05,239 kuhja söögituba plaate, et teil on kohviku juures söögisaali 18 00:01:05,239 --> 00:01:09,680 kus kui söögituba personal tuleb ja paneb söögituba plaate välja pärast olen puhastada neid, 19 00:01:09,680 --> 00:01:12,000 nad virna neid üks peal teine. 20 00:01:12,000 --> 00:01:15,050 Ja siis kui lapsed tulevad, et süüa saada, 21 00:01:15,050 --> 00:01:19,490 nad tõmmake plaate välja esimene top üks, siis teine ​​selle all seda, siis üks allpool seda. 22 00:01:19,490 --> 00:01:25,190 Niisiis, tegelikult, esimene plaat, mis söögituba personal panema on viimane, mis saab maha võetud. 23 00:01:25,190 --> 00:01:32,330 Viimane, et söökla töötajad panna on esimene, mis saab maha võetud õhtusöögile. 24 00:01:32,330 --> 00:01:38,100 Kui probleem kogumi spec, mille saate alla laadida kui te seda juba teinud pole, 25 00:01:38,100 --> 00:01:46,730 me räägime modelleerimine korstnat andmete plokk kasutades sellist struct. 26 00:01:46,730 --> 00:01:51,070 >> Mida meil siin, see on sarnane sellele, mis oli esitatud loeng, 27 00:01:51,070 --> 00:01:58,120 välja arvatud loeng tutvustasime seda ints mitte char * s. 28 00:01:58,120 --> 00:02:06,250 See saab olema korstnat, mis salvestab mida? 29 00:02:06,250 --> 00:02:09,009 Daniel? Mida me ladustamiseks selles korstnat? 30 00:02:09,009 --> 00:02:15,260 [Daniel] stringid? >> Me stringide salvestamiseks, see korstna täpselt. 31 00:02:15,260 --> 00:02:20,950 Kõik, mida vaja on, et luua pinu on massiiv 32 00:02:20,950 --> 00:02:23,920 konkreetse võimsus, mis antud juhul 33 00:02:23,920 --> 00:02:28,020 võimsus saab olema kõik mütsid, sest see on pidev. 34 00:02:28,020 --> 00:02:36,340 Ja siis lisaks massiivi kõik peame lugu on praegune suurus massiiv. 35 00:02:36,340 --> 00:02:38,980 Üks asi märkida siin, et on selline lahe 36 00:02:38,980 --> 00:02:47,060 on see, et me luua laotud andmestruktuur peal teine ​​andmestruktuur, massiiv. 37 00:02:47,060 --> 00:02:50,110 On erinevaid viise, kuidas rakendada korstnad. 38 00:02:50,110 --> 00:02:54,250 Me ei tee seda päris veel, kuid loodetavasti pärast teeme seotud nimekirja probleemid, 39 00:02:54,250 --> 00:03:00,520 näete, kuidas saate hõlpsasti rakendada korstna peal lingitud nimekiri samuti. 40 00:03:00,520 --> 00:03:02,640 Aga nüüd, me jääda massiivid. 41 00:03:02,640 --> 00:03:06,350 Nii et taas, kõik me vajame, on massiiv ja me lihtsalt vaja jälgida suurusest massiivist. 42 00:03:06,350 --> 00:03:09,850 [Sam] Vabandust, miks on nii, et sa ütlesid, et korstnat on peal stringid? 43 00:03:09,850 --> 00:03:13,440 Mulle tundub, stringid kuuluvad pinu. 44 00:03:13,440 --> 00:03:16,790 [Hardison] Jah. Loome me viime meie massiivi andmestruktuur - 45 00:03:16,790 --> 00:03:22,130 see on hea küsimus. Seega on küsimus selles, miks inimesed, kes vaatavad seda online, 46 00:03:22,130 --> 00:03:24,140 Miks me öelda, et korstnat on peal stringid, 47 00:03:24,140 --> 00:03:27,990 sest siin tundub, stringid on sees korstna? 48 00:03:27,990 --> 00:03:31,050 Mis on täiesti puhul. 49 00:03:31,050 --> 00:03:34,660 Mida ma viitasin oli see, et meil on massiiv andmete struktuuri. 50 00:03:34,660 --> 00:03:39,290 Meil array char * s, seda massiivi stringe, 51 00:03:39,290 --> 00:03:45,300 ja me lisada, et selleks, et luua laotud andmestruktuur. 52 00:03:45,300 --> 00:03:48,620 >> Nii et korstnat on veidi keerulisem kui massiivi. 53 00:03:48,620 --> 00:03:51,890 Me saame kasutada massiivi luua pinu. 54 00:03:51,890 --> 00:03:55,810 Nii et kui me ütleme, et pakk on ehitatud peal massiivi. 55 00:03:55,810 --> 00:04:02,510 Samamoodi nagu ma juba ütlesin, me saame ehitada korstna peal seotud nimekirja. 56 00:04:02,510 --> 00:04:04,960 Selle asemel, kasutades massiivi hoida meie elemente, 57 00:04:04,960 --> 00:04:10,070 saaksime kasutada seotud nimekirja hoida meie elemendid ja ehitada korstna ümber selle. 58 00:04:10,070 --> 00:04:12,420 Vaatame läbi kõndida paar näidet vaadates mingi kood, 59 00:04:12,420 --> 00:04:14,960 näha, mis tegelikult toimub siin. 60 00:04:14,960 --> 00:04:23,400 Vasakul olen visati alla, mida see korstna struct näeks mälu 61 00:04:23,400 --> 00:04:28,330 kui tootmisvõimsuse # defineeritud neli. 62 00:04:28,330 --> 00:04:33,490 Meil meie nelja-element char * massiiv. 63 00:04:33,490 --> 00:04:38,110 Meil stringid [0], stringid, [1] stringid [2], stringid, [3] 64 00:04:38,110 --> 00:04:43,800 ja siis see viimane ruumi meie suurus täisarv. 65 00:04:43,800 --> 00:04:46,270 Kas see on mõttekas? Okei. 66 00:04:46,270 --> 00:04:48,790 Nii juhtub, kui ma teen paremal 67 00:04:48,790 --> 00:04:55,790 mis on minu kood, on lihtsalt kuulutada struct, laotud struct nimetatakse s. 68 00:04:55,790 --> 00:05:01,270 See on see, mida me saame. Selles sätestatakse see jalajälg mällu. 69 00:05:01,270 --> 00:05:05,590 Esimene küsimus on see, mida on sisu see korstna struct? 70 00:05:05,590 --> 00:05:09,250 Just nüüd on nad midagi, kuid nad ei ole täiesti midagi. 71 00:05:09,250 --> 00:05:13,300 Nad on selline prügi. Meil pole aimugi, mis see neile. 72 00:05:13,300 --> 00:05:17,000 Kui me kuulutame korstnat s, me lihtsalt viskamine et alla peal mälu. 73 00:05:17,000 --> 00:05:19,840 See on selline nagu kuulutatakse int i ja ei lähtestamisel. 74 00:05:19,840 --> 00:05:21,730 Sa ei tea, mis seal sees on. Te saate lugeda, mis seal on, 75 00:05:21,730 --> 00:05:27,690 kuid see ei pruugi olla super abivalmis. 76 00:05:27,690 --> 00:05:32,680 Üks asi, mida tahame alati meeles, et vaja on initsialiseerida iganes tuleb initsialiseerida. 77 00:05:32,680 --> 00:05:35,820 Sel juhul me ei kavatse initsialiseerida suurus on null, 78 00:05:35,820 --> 00:05:39,960 sest et läheb osutuda meie jaoks väga oluline. 79 00:05:39,960 --> 00:05:43,450 Võiksime minna ja initsialiseerida kõik suunanäitajaks, kõik char * s, 80 00:05:43,450 --> 00:05:49,670 olema mingi arusaadav väärtus, ilmselt null. 81 00:05:49,670 --> 00:05:58,270 Aga see ei ole täiesti vajalik, et me seda teeme. 82 00:05:58,270 --> 00:06:04,200 >> Nüüd, kaks peamist tegevust korstnad on? 83 00:06:04,200 --> 00:06:07,610 Keegi mäletab alates loeng mida te teete korstnad? Jah? 84 00:06:07,610 --> 00:06:09,700 [Stella] lükkamine ja popping? >> Täpselt. 85 00:06:09,700 --> 00:06:13,810 Lükkamine ja popping on kaks peamist tegevust korstnad. 86 00:06:13,810 --> 00:06:17,060 Ja mida see lükke teha? >> See paneb midagi peale üles 87 00:06:17,060 --> 00:06:19,300 virna ja siis paugu võtab selle ära. 88 00:06:19,300 --> 00:06:23,150 [Hardison] Täpselt. Nii surudes vajutab midagi peal virnas. 89 00:06:23,150 --> 00:06:27,700 See on nagu söökla personal paneb söögituba kandikut kohta counter. 90 00:06:27,700 --> 00:06:33,630 Ja popping võtab söögituba plaat välja pinu. 91 00:06:33,630 --> 00:06:36,460 Vaatame läbi kõndida paar näidet sellest, mis juhtub 92 00:06:36,460 --> 00:06:39,720 kui vajutada asjad virna. 93 00:06:39,720 --> 00:06:45,110 Kui me push string "tere" peale meie korstnat 94 00:06:45,110 --> 00:06:49,760 see on see, mida meie diagramm näeks nüüd. 95 00:06:49,760 --> 00:06:53,410 Vaata, mis juhtub? 96 00:06:53,410 --> 00:06:56,530 Me tõugatakse esimene osa meie stringide massiiv 97 00:06:56,530 --> 00:07:01,420 ja me upped meie suuruste arv on 1. 98 00:07:01,420 --> 00:07:05,340 Nii et kui me vaatame vahe kahe slaidid, siin oli 0, siin on enne viik. 99 00:07:05,340 --> 00:07:08,690 Siin on pärast viik. 100 00:07:08,690 --> 00:07:13,460 Enne push pärast viik. 101 00:07:13,460 --> 00:07:16,860 Ja nüüd on meil üks osa meie pinu. 102 00:07:16,860 --> 00:07:20,970 See on string "tere", ja ongi kõik. 103 00:07:20,970 --> 00:07:24,440 Kõik muu massiiv, meie stringide massiiv, on ikka prügi. 104 00:07:24,440 --> 00:07:27,070 Me pole käivitatud, siis. 105 00:07:27,070 --> 00:07:29,410 Oletame, et me push teise stringi peale meie pinu. 106 00:07:29,410 --> 00:07:32,210 Me läheme push "maailma" kohta seekord. 107 00:07:32,210 --> 00:07:35,160 Nii et näete, "maailm" siin läheb peale "tere", 108 00:07:35,160 --> 00:07:40,040 ja suurus kokku ulatub kuni 2. 109 00:07:40,040 --> 00:07:44,520 Nüüd saame push "CS50", ja et lähen peal jälle. 110 00:07:44,520 --> 00:07:51,110 Kui me tagasi minna, saate näha, kuidas me surudes asju pinu. 111 00:07:51,110 --> 00:07:53,320 Ja nüüd saame pop. 112 00:07:53,320 --> 00:07:58,910 Kui me hüppasid midagi välja virna, mis juhtus? 113 00:07:58,910 --> 00:08:01,540 Kas keegi nägi midagi? See on päris peen. 114 00:08:01,540 --> 00:08:05,810 [Student] suurus. >> Jah, suurust muuta. 115 00:08:05,810 --> 00:08:09,040 >> Mis muidu olete muutu? 116 00:08:09,040 --> 00:08:14,280 [Student] stringid, liiga. >> Õigus. Stringid liiga. 117 00:08:14,280 --> 00:08:17,110 Tuleb välja, et kui sa teed seda nii, 118 00:08:17,110 --> 00:08:21,960 sest me ei kopeerimist elemendid meie korstnat 119 00:08:21,960 --> 00:08:24,670 me tegelikult ei pea midagi tegema, me võime lihtsalt kasutada suurus 120 00:08:24,670 --> 00:08:28,630 jälgida mitmeid asju meie massiivi 121 00:08:28,630 --> 00:08:33,780 nii et kui me pop uuesti, jälle me lihtsalt kahandab meie suurus kuni 1. 122 00:08:33,780 --> 00:08:39,440 Ei ole vaja tegelikult minna ja kirjutada midagi. 123 00:08:39,440 --> 00:08:41,710 Kuidagi kahtlane. 124 00:08:41,710 --> 00:08:46,520 Tuleb välja, et me tavaliselt lihtsalt jätta asju üksi, sest see on vähem tööd meile, mida teha. 125 00:08:46,520 --> 00:08:50,060 Kui me ei pea minema tagasi ja kirjuta midagi, siis miks seda teha? 126 00:08:50,060 --> 00:08:54,150 Nii et kui me pop kaks korda maha virna, kõik mis teeb on aland suurus paar korda. 127 00:08:54,150 --> 00:08:59,120 Ja jälle, see on ainult sellepärast, et me ei kopeerimise asjad meie pinu. 128 00:08:59,120 --> 00:09:01,320 Jah? Lase käia. 129 00:09:01,320 --> 00:09:04,460 [Student, arusaamatult] >> Ja mis siis juhtub, kui vajutada midagi jälle? 130 00:09:04,460 --> 00:09:08,570 Kui vajutada midagi uuesti, kus see kadus? 131 00:09:08,570 --> 00:09:12,390 Kuhu see viib, Basil? >> Into stringid [1]? >> Õigus. 132 00:09:12,390 --> 00:09:14,530 Miks ei ta lähe stringid? [3] 133 00:09:14,530 --> 00:09:19,410 [Basiilik] Sest see unustasin, et seal oli midagi stringid [1] ja [2]? 134 00:09:19,410 --> 00:09:24,040 [Hardison] Täpselt. Meie stack sisuliselt, "unustas", et ta hoiab kinni midagi 135 00:09:24,040 --> 00:09:29,480 palmikutes [1] või stringid [2], nii et kui me push "woot" 136 00:09:29,480 --> 00:09:36,670 see lihtsalt paneb seda arvesse element on string [1]. 137 00:09:36,670 --> 00:09:41,590 Kas on mingeid küsimusi selle kohta, kuidas see töötab, on algtasemel? 138 00:09:41,590 --> 00:09:45,160 [Sam] Nii see ei ole dünaamiline kuidagi, nii summa 139 00:09:45,160 --> 00:09:47,620 või nii suuruse korstnat? 140 00:09:47,620 --> 00:09:56,750 [Hardison] Täpselt. See on - mõte oli, et see ei olnud dünaamiliselt growning pinu. 141 00:09:56,750 --> 00:10:02,850 See on pinu, mis mahutab kõige rohkem neli char * s, kõige rohkem neli asja. 142 00:10:02,850 --> 00:10:07,580 Kui me proovida ja push 1/5 asja, mida peaks teie arvates juhtub? 143 00:10:07,580 --> 00:10:11,870 [Õpilased, arusaamatult] 144 00:10:11,870 --> 00:10:14,600 [Hardison] Täpselt. On mitmeid asju, mis võib juhtuda. 145 00:10:14,600 --> 00:10:19,330 See võiks seg süü, sõltuvalt sellest, mida me olime - 146 00:10:19,330 --> 00:10:22,530 kuidas täpselt me ​​rakendamisel back-end. 147 00:10:22,530 --> 00:10:31,740 See võiks kirjutada. See võiks olla, et buffer overflow, et me rääkisime klassis. 148 00:10:31,740 --> 00:10:35,240 Mis oleks kõige ilmsem asi, mis võib üle kirjutada 149 00:10:35,240 --> 00:10:42,370 kui üritasime suruda pildi asi meie korstnat? 150 00:10:42,370 --> 00:10:44,550 Nii et te mainisite buffer overflow. 151 00:10:44,550 --> 00:10:47,870 Mis võib olla asi, et saaksin üle kirjutada või stomped 152 00:10:47,870 --> 00:10:52,320 kui me ajama kogemata üritab suruda pildi asi? 153 00:10:52,320 --> 00:10:54,730 [Daniel, arusaamatult] >> Võimalikud. 154 00:10:54,730 --> 00:10:58,440 Aga esialgu, mis võib juhtuda? Mida teha, kui üritasime suruda Neljas asi? 155 00:10:58,440 --> 00:11:06,220 See võib hävitada suurus, vähemalt selle mälu diagramm, mis meil on. 156 00:11:06,220 --> 00:11:10,880 >> Kui probleem komplekt spetsifikatsioon, mida me ei kavatse rakendamisel täna, 157 00:11:10,880 --> 00:11:16,030 mida me tahame teha, on lihtsalt tagasi false. 158 00:11:16,030 --> 00:11:20,030 Meie tõukemeetod läheb tagasi tõeväärtuse, 159 00:11:20,030 --> 00:11:22,920 ja et tõeväärtuse on tõsi, kui push õnnestub 160 00:11:22,920 --> 00:11:29,730 ja vale, kui me ei saa sundida midagi rohkem, sest stack on täis. 161 00:11:29,730 --> 00:11:33,620 Vaatame läbi kõndida natuke, et kood kohe. 162 00:11:33,620 --> 00:11:36,400 Siin on meie push funktsioon. 163 00:11:36,400 --> 00:11:40,380 Meie push funktsioon stack läheb võtta stringi panna virna. 164 00:11:40,380 --> 00:11:45,820 See läheb tagasi true, kui string on edukalt surunud 165 00:11:45,820 --> 00:11:51,820 kohta virna ja vale teisiti. 166 00:11:51,820 --> 00:11:59,740 Kõik ettepanekud, mida võiks olla hea esimene asi, mida siin teha? 167 00:11:59,740 --> 00:12:20,630 [Sam] Kui suurus võrdub võimsusega siis tagasi false? 168 00:12:20,630 --> 00:12:23,320 [Hardison] Bingo. Tubli töö. 169 00:12:23,320 --> 00:12:26,310 Kui suur on võimsus, me lähme tagasi false. 170 00:12:26,310 --> 00:12:29,270 Me ei saa panna midagi rohkem meie pinu. 171 00:12:29,270 --> 00:12:36,900 Muidu me tahame panna midagi peal virnas. 172 00:12:36,900 --> 00:12:41,670 Mis on "pinu" esialgu? 173 00:12:41,670 --> 00:12:43,650 [Daniel] Suurus 0? >> Suurus 0. 174 00:12:43,650 --> 00:12:49,990 Mis on pinu pärast on üks asi pakis? Missy, sa tead? 175 00:12:49,990 --> 00:12:52,720 [Missy] Üks. >> Suurus on üks, täpselt. Sa hoida lisades suurus, 176 00:12:52,720 --> 00:13:01,690 ja iga kord, kui paned uue elemendi indeksi suurus massiiv. 177 00:13:01,690 --> 00:13:05,470 Me saame seda teha koos seda liiki ühe-liner, kui see on mõistlik. 178 00:13:05,470 --> 00:13:11,910 Nii et meil on meie stringide massiiv, me ei kavatse seda lugeda suurus indeks, 179 00:13:11,910 --> 00:13:14,780 ja me lihtsalt läheb salvestada oma char * seal. 180 00:13:14,780 --> 00:13:19,340 Märka, kuidas seal ei ole string kopeerimine toimub siin, 181 00:13:19,340 --> 00:13:29,680 ei dünaamiline jaotamine mälu? 182 00:13:29,680 --> 00:13:34,440 Ja siis Missy üles kasvanud, mida me nüüd peame tegema, 183 00:13:34,440 --> 00:13:40,570 sest me oleme salvestatud stringi sobiv koht massiivi, 184 00:13:40,570 --> 00:13:49,230 ja ta ütles, et me pidime juurdekasvu suurus ühe, nii et me oleme valmis järgmiseks viik. 185 00:13:49,230 --> 00:13:53,950 Nii saame teha, et s.size + +. 186 00:13:53,950 --> 00:13:59,330 Sel hetkel oleme tõugatakse meie massiivi. Mis on viimane asi, mida me peame tegema? 187 00:13:59,330 --> 00:14:10,110 [Student] Tagasi tõsi. >> Tagasi tõsi. 188 00:14:10,110 --> 00:14:14,690 Nii et see on üsna lihtne, üsna lihtne kood. Mitte liiga palju. 189 00:14:14,690 --> 00:14:17,070 Kui oled murtud oma pea ümber, kuidas korstnat töötab, 190 00:14:17,070 --> 00:14:21,910 see on üsna lihtne rakendada. 191 00:14:21,910 --> 00:14:26,390 >> Nüüd järgmine osa sellest on popping string off pinu. 192 00:14:26,390 --> 00:14:29,410 Ma annan teile kutid mõnda aega tööd selle natuke. 193 00:14:29,410 --> 00:14:34,320 See on peaaegu sisuliselt vastupidine sellele, mida me oleme teinud siin viik. 194 00:14:34,320 --> 00:14:38,510 Mida ma olen teinud, on tegelikult - oih. 195 00:14:38,510 --> 00:14:48,160 Olen käivitatud seadme üle siin, ja aparaat, 196 00:14:48,160 --> 00:14:53,600 Olen tõmmata probleem seatud 5 spetsifikatsioon. 197 00:14:53,600 --> 00:15:02,560 Kui me suumimiseks siin näeme, ma olen cdn.cs50.net/2012/fall/psets/pset5.pdf. 198 00:15:02,560 --> 00:15:08,590 Kas te olete alla laadinud seda koodi see asub siin, section6.zip? 199 00:15:08,590 --> 00:15:15,030 Hea küll. Kui te pole seda teinud, seda teha just nüüd, tõesti kiiresti. 200 00:15:15,030 --> 00:15:22,130 Ma teen seda minu terminaliakent. 201 00:15:22,130 --> 00:15:25,090 Ma tegelikult tegin seda siin üleval. Jah. 202 00:15:25,090 --> 00:15:34,730 Jah, Sam? >> Mul on küsimus, miks sa ütlesid s.string on sulgudes size = str? 203 00:15:34,730 --> 00:15:42,910 Mis on str? Kas see on määratletud kuskil enne või - oh, et char * str? 204 00:15:42,910 --> 00:15:47,160 [Hardison] Jah, just. See oli argument. >> Oh, okei. Vabandust. 205 00:15:47,160 --> 00:15:49,470 [Hardison] Me täpsustades string suruda sisse 206 00:15:49,470 --> 00:15:55,220 Teine küsimus, mis võiks tulla, et me tegelikult ei räägi siin oli 207 00:15:55,220 --> 00:15:58,810 võtsime enesestmõistetavaks, et meil oli see muutuja nimega s 208 00:15:58,810 --> 00:16:02,710 et oli oma ulatuselt ja kättesaadav meile. 209 00:16:02,710 --> 00:16:06,960 Võtsime iseenesestmõistetavaks, et s oli see virna struct. 210 00:16:06,960 --> 00:16:08,930 Nii et vaadata tagasi selle push-koodi, 211 00:16:08,930 --> 00:16:13,450 te näete, et me teeme asju selle stringiga, mis sai möödunud aastal 212 00:16:13,450 --> 00:16:19,210 aga siis äkki, me tutvumise s.size, nagu, kust on pärit? 213 00:16:19,210 --> 00:16:23,020 Kui koodi, et me ei kavatse vaadata jaos arhiiv 214 00:16:23,020 --> 00:16:27,100 ja siis värk, et saate teha oma probleem seab, 215 00:16:27,100 --> 00:16:32,440 oleme teinud meie korstnat vatseti globaalne muutuja 216 00:16:32,440 --> 00:16:36,380 nii et meil on juurdepääs see kõik meie erinevad funktsioonid 217 00:16:36,380 --> 00:16:40,630 ilma käsitsi andke seda ümber ja andke seda viitena, 218 00:16:40,630 --> 00:16:44,870 teha kõik, et sellist kraami ta. 219 00:16:44,870 --> 00:16:52,280 Me lihtsalt petmine natuke, kui soovite, et muuta asju kenamaks. 220 00:16:52,280 --> 00:16:57,430 Ja see on midagi, mida me siin teeme, sest see on lõbus, see on lihtsam. 221 00:16:57,430 --> 00:17:02,800 Tihti näete inimesed teevad seda, kui neil on üks suur andmestruktuur 222 00:17:02,800 --> 00:17:07,750 mis kuramuse opereeritaks oma programmi. 223 00:17:07,750 --> 00:17:09,560 >> Lähme tagasi üle seadme. 224 00:17:09,560 --> 00:17:15,240 Kas igaüks edukalt saada section6.zip? 225 00:17:15,240 --> 00:17:20,440 Igaüks unzip see kasutades unzip section6.zip? 226 00:17:20,440 --> 00:17:27,200 Kui te lähete lõik 6 kataloog - 227 00:17:27,200 --> 00:17:29,220 aah, kogu koht - 228 00:17:29,220 --> 00:17:32,840 ja te nimekirja, mis siin, näed, et sul on kolm erinevat. c faile. 229 00:17:32,840 --> 00:17:38,350 Sul sabas, sll, mis on üksikult seotud loetelu ja korstnat. 230 00:17:38,350 --> 00:17:44,600 Kui te avada stack.c, 231 00:17:44,600 --> 00:17:47,330 näete, et meil on see struct määratletud meie jaoks 232 00:17:47,330 --> 00:17:51,330 täpse struct, et me lihtsalt rääkisime slaidid. 233 00:17:51,330 --> 00:17:56,340 Meil meie globaalse muutuja korstnat 234 00:17:56,340 --> 00:18:00,110 meil meie push funktsioon, 235 00:18:00,110 --> 00:18:04,230 ja siis pole meil meie pop funktsioon. 236 00:18:04,230 --> 00:18:08,320 Ma panen koodi tagurdamise üles slaidi siin, 237 00:18:08,320 --> 00:18:10,660 aga mida ma tahaksin teiega teha on, et parima teie võimet, 238 00:18:10,660 --> 00:18:13,790 minna ja rakendada pop funktsioon. 239 00:18:13,790 --> 00:18:18,480 Kui olete rakendanud, saate kompileerida seda tegema korstnat 240 00:18:18,480 --> 00:18:22,540 ja seejärel käivitage tulemuseks korstna käivitatava, 241 00:18:22,540 --> 00:18:28,390 ja mis kestab kogu selle testi koodi siia alla see on peamine. 242 00:18:28,390 --> 00:18:31,060 Ja peamine hoolitseb tegelikult teeb push ja pop kõned 243 00:18:31,060 --> 00:18:33,220 ning tagada, et kõik läheb läbi küll. 244 00:18:33,220 --> 00:18:36,820 Samuti käivitab stäki suurus siinsamas 245 00:18:36,820 --> 00:18:39,780 nii et sa ei pea muretsema initsialiseerimisel seda. 246 00:18:39,780 --> 00:18:42,310 Võite eeldada, et see on õigesti vormindatud 247 00:18:42,310 --> 00:18:48,000 ajaks, mil te seda kasutada on pop funktsioon. 248 00:18:48,000 --> 00:18:53,530 Kas see on loogiline? 249 00:18:53,530 --> 00:19:00,100 Nii et siin me läheme. Seal on push-koodi. 250 00:19:00,100 --> 00:19:13,210 Ma annan sulle poisid 5 või 10 minutit. 251 00:19:13,210 --> 00:19:15,690 Ja kui teil on küsimusi vahepeal, kui oled kodeerimine, 252 00:19:15,690 --> 00:19:17,710 küsige neid valjusti. 253 00:19:17,710 --> 00:19:23,080 Nii et kui sa saad torkekoha, küsige. 254 00:19:23,080 --> 00:19:26,030 Anna teada, lase kõik teised teavad. 255 00:19:26,030 --> 00:19:28,160 Töö oma naabri liiga. 256 00:19:28,160 --> 00:19:30,360 [Daniel] Me lihtsalt rakendamise pop praegu? >> Lihtsalt pop. 257 00:19:30,360 --> 00:19:34,200 Kuigi saate kopeerida rakendamise push kui soovite 258 00:19:34,200 --> 00:19:37,780 nii et katsetamine töötab. 259 00:19:37,780 --> 00:19:41,940 Sest see on raske katsetada asju sattumist - 260 00:19:41,940 --> 00:19:49,030 või, see on raske testida popping asjad läbi korstna, kui ei ole midagi pakis alustada. 261 00:19:49,030 --> 00:19:55,250 >> Mis on pop peaks olema tagasi? Element pinu. 262 00:19:55,250 --> 00:20:01,260 See peaks saama element off Pinu 263 00:20:01,260 --> 00:20:05,780 ja siis kahandab suurus korstnat 264 00:20:05,780 --> 00:20:07,810 ja nüüd oled kaotanud elemendi peal. 265 00:20:07,810 --> 00:20:11,420 Ja siis tagasi osa peal. 266 00:20:11,420 --> 00:20:20,080 [Student, arusaamatult] 267 00:20:20,080 --> 00:20:28,810 [Hardison] Mis juhtub, kui sa seda tegid? [Student, arusaamatult] 268 00:20:28,810 --> 00:20:34,000 Mis jõuab juhtub, on sul ilmselt tutvumise kas 269 00:20:34,000 --> 00:20:37,350 element, mis ei ole vormindatud veel, nii et teie arvutus 270 00:20:37,350 --> 00:20:39,990 kus viimane element on välja lülitatud. 271 00:20:39,990 --> 00:20:46,260 Nii et siin, kui te märkate, et push, me tutvumise stringid s.size element 272 00:20:46,260 --> 00:20:48,560 sest see on uus indeks. 273 00:20:48,560 --> 00:20:51,460 See on uus pinu. 274 00:20:51,460 --> 00:21:01,100 Arvestades, pop, s.size saab olema järgmise ruumi, 275 00:21:01,100 --> 00:21:05,210 ruumi, mis on peal kõik elemendid oma korstnat. 276 00:21:05,210 --> 00:21:10,050 Nii et kõige ülemisele element ei ole kell s.size, 277 00:21:10,050 --> 00:21:14,930 vaid pigem, et see on selle all. 278 00:21:14,930 --> 00:21:19,640 >> Teine asi, mida teha, kui sa - pop, 279 00:21:19,640 --> 00:21:22,030 on sul on ainult kahandab suurus. 280 00:21:22,030 --> 00:21:28,750 Kui te mäletate tagasi meie väike diagram siin, 281 00:21:28,750 --> 00:21:30,980 tõesti, ainus asi, mida me nägime juhtub, kui me kutsusime pop 282 00:21:30,980 --> 00:21:36,150 oli see, et suurus langenud, esimene 2, siis 1. 283 00:21:36,150 --> 00:21:42,620 Siis, kui me lükatakse uue osa kohta, see oleks minna õigel kohapeal. 284 00:21:42,620 --> 00:21:49,610 [Basiilik] Kui s.size on 2, siis kas ei oleks minna element 2, 285 00:21:49,610 --> 00:21:54,400 ja siis tahaks pop see element ära? 286 00:21:54,400 --> 00:21:59,510 Nii et kui me läksime - >> Nii et vaatame seda uuesti. 287 00:21:59,510 --> 00:22:07,730 Kui see on meie stack selles punktis 288 00:22:07,730 --> 00:22:12,130 ja me kutsume pop, 289 00:22:12,130 --> 00:22:16,150 kus indeks on kõige ülemisele element? 290 00:22:16,150 --> 00:22:19,300 [Basiilik] 2., kuid see läheb Pop 3. >> Õigus. 291 00:22:19,300 --> 00:22:24,220 Nii et kui meie suurus on 3, kuid me tahame pop elemendi indeks 2. 292 00:22:24,220 --> 00:22:29,900 See on see tüüpiline selline välja üks, et teil on null-indekseerimine massiivid. 293 00:22:29,900 --> 00:22:36,430 Nii et sa ei taha pop kolmas element, aga kolmas element ei ole kell indeks 3. 294 00:22:36,430 --> 00:22:39,430 Ja põhjus, miks me ei pea seda tegema miinus 1, kui me surudes 295 00:22:39,430 --> 00:22:44,120 on, sest just nüüd, märkate, et kõige ülemisele element, 296 00:22:44,120 --> 00:22:47,600 kui me olime suruda midagi muud peale virna selles punktis, 297 00:22:47,600 --> 00:22:50,360 me tahaks vajutage neid indeks 3. 298 00:22:50,360 --> 00:23:03,550 Ja see lihtsalt nii juhtub, et suurus ja indeksid rivistama, kui sa lükates. 299 00:23:03,550 --> 00:23:06,960 >> Kellel on töö korstnat rakendamise? 300 00:23:06,960 --> 00:23:09,690 Sul on töö virna üks. Kas teil on pop töötab veel? 301 00:23:09,690 --> 00:23:11,890 [Daniel] Jah. Ma arvan küll. 302 00:23:11,890 --> 00:23:14,610 >> Programmi töötab ja ei seg Murrang, see prindib? 303 00:23:14,610 --> 00:23:17,520 See välja printida "edu" kui sa jooksed ta? 304 00:23:17,520 --> 00:23:22,630 Jah. Tee korstnat, käivitage see, kui ta prindib välja "edu" ja ei lähe buumi, 305 00:23:22,630 --> 00:23:26,000 siis kõik on hea. 306 00:23:26,000 --> 00:23:34,070 Hea küll. Lähme üle seadmele tõesti kiiresti, 307 00:23:34,070 --> 00:23:46,100 ja me käime läbi selle. 308 00:23:46,100 --> 00:23:51,110 Kui me vaatame, mis toimub siin popmuusika, 309 00:23:51,110 --> 00:23:55,220 Daniel, mis oli esimene asi, mis sa tegid? 310 00:23:55,220 --> 00:23:58,850 [Daniel] Kui s.size on suurem kui 0. 311 00:23:58,850 --> 00:24:03,120 [Hardison] Okei. Ja miks sa seda tegid? 312 00:24:03,120 --> 00:24:05,610 [Daniel] Et veenduda, et seal oli midagi sees pinu. 313 00:24:05,610 --> 00:24:10,950 [Hardison] Õigus. Sa tahad katsetada veendumaks, et s.size on suurem kui 0; 314 00:24:10,950 --> 00:24:13,280 muidu, mida sa tahad on juhtunud? 315 00:24:13,280 --> 00:24:16,630 [Daniel] Tagasi null? >> Tagasi null, täpselt. 316 00:24:16,630 --> 00:24:20,740 Nii et kui s.size on suurem kui 0. Mida me siis nüüd teeme? 317 00:24:20,740 --> 00:24:25,890 Mida me teeme, kui korstnat ei ole tühi? 318 00:24:25,890 --> 00:24:31,210 [Stella] Sa kahandab suurus? >> Sa kahandab suurus, eks. 319 00:24:31,210 --> 00:24:34,440 Niisiis, kuidas sa seda tegid? >> S.size--. 320 00:24:34,440 --> 00:24:37,030 [Hardison] Tore. Ja siis mida sa tegid? 321 00:24:37,030 --> 00:24:44,140 [Stella] Ja siis ma ütlesin tagasi s.string [s.size]. 322 00:24:44,140 --> 00:24:48,560 [Hardison] Tore. 323 00:24:48,560 --> 00:24:51,940 Vastasel naasete null. Jah, Sam? 324 00:24:51,940 --> 00:24:55,510 [Sam] Miks see ei pea olema s.size + 1? 325 00:24:55,510 --> 00:24:58,430 [Hardison] Pluss 1? >> Jah. >> Sain. 326 00:24:58,430 --> 00:25:00,980 [Sam] Ma arvasin, sest te võtate 1-, 327 00:25:00,980 --> 00:25:04,290 siis sa lähed tuleb tagasi mitte üks, et nad palusid. 328 00:25:04,290 --> 00:25:09,400 [Hardison] Ja see oli just see, mida me rääkisime kogu see teema on 0 indeksid. 329 00:25:09,400 --> 00:25:11,380 Nii et kui me suumida tagasi siia. 330 00:25:11,380 --> 00:25:15,650 Kui me vaatame seda meest siin, näete, et kui me pop, 331 00:25:15,650 --> 00:25:19,340 me popping elemendi indeks 2. 332 00:25:19,340 --> 00:25:25,200 >> Nii et me vähendada meie suurus ja seejärel meie suurus sobib meie kataloogi. 333 00:25:25,200 --> 00:25:39,650 Kui me ei aland suurus, seejärel me peame tegema suurus -1 ja siis muutu. 334 00:25:39,650 --> 00:25:45,270 Suur. Kõik hea? 335 00:25:45,270 --> 00:25:47,530 Kõik küsimused selle kohta? 336 00:25:47,530 --> 00:25:54,050 On mitmeid erinevaid viise, kuidas kirjutada see samuti. 337 00:25:54,050 --> 00:26:03,290 Tegelikult me ​​saame midagi teha ka - me saame teha Sutkaus. 338 00:26:03,290 --> 00:26:05,770 Me saame teha ühe liini edasi-tagasi. 339 00:26:05,770 --> 00:26:12,980 Nii saame tegelikult kahandab enne kui me tagasi tehes seda. 340 00:26:12,980 --> 00:26:18,320 Nii paneb - enne s.size. 341 00:26:18,320 --> 00:26:22,060 See teeb liin tõesti tihe. 342 00:26:22,060 --> 00:26:30,940 Kui vahe - s. Suurus ja s.size-- 343 00:26:30,940 --> 00:26:40,130 on see, et postfix - nad kutsuvad seda postfix sest - tuleb pärast s.size-- 344 00:26:40,130 --> 00:26:47,430 tähendab, et s.size hinnatakse jaoks leida indeksi 345 00:26:47,430 --> 00:26:50,410 kuna see on hetkel, kui see liin on täidetud, 346 00:26:50,410 --> 00:26:54,290 ja siis see - juhtub pärast rida saab teostada. 347 00:26:54,290 --> 00:27:00,340 Pärast elemendi indeks s.size pääseb. 348 00:27:00,340 --> 00:27:07,260 Ja see pole see, mida me tahame, sest me tahame aland juhtub esimesena. 349 00:27:07,260 --> 00:27:10,990 Othewise, me ei kavatse olla juurdepääsu massiivi, tõhusalt, audis. 350 00:27:10,990 --> 00:27:16,850 Me ei kavatse tutvumise osa kohal üks, mida me tegelikult tahame pääseda. 351 00:27:16,850 --> 00:27:23,840 Jah, Sam? >> Kas see kiiremini või kasutada vähem RAM teha ühel real või mitte? 352 00:27:23,840 --> 00:27:29,620 [Hardison] Ausalt, see tõesti sõltub. 353 00:27:29,620 --> 00:27:34,220 [Sam, arusaamatult] >> Jah, see sõltub. Seda saab teha kompilaator trikke 354 00:27:34,220 --> 00:27:41,580 saada kompilaator tunnistada, et tavaliselt, ma kujutan ette. 355 00:27:41,580 --> 00:27:44,840 >> Nii oleme mainitud natuke selle kompilaatori optimeerimine värk 356 00:27:44,840 --> 00:27:47,400 mida saate teha koostamisel, 357 00:27:47,400 --> 00:27:50,580 ja see on selline asi, et tõlkija oleks võimalik aru saada, 358 00:27:50,580 --> 00:27:54,710 nagu Oh, hei, äkki ma suudan seda kõike ühe operatsiooni 359 00:27:54,710 --> 00:27:59,420 mitte laadimise suurus muutuja RAM, 360 00:27:59,420 --> 00:28:03,770 degressioon see, talletades seda tagasi viia, ja siis laadimist see uuesti 361 00:28:03,770 --> 00:28:08,000 töödelda ülejäänud seda operatsiooni. 362 00:28:08,000 --> 00:28:10,710 Aga tavaliselt, ei, see ei ole mingisugune asi 363 00:28:10,710 --> 00:28:20,770 et läheb teeb oma programmi oluliselt kiiremini. 364 00:28:20,770 --> 00:28:26,000 Enam küsimustele korstnad? 365 00:28:26,000 --> 00:28:31,360 >> Nii surudes ja popping. Kui te tahate proovida häkker väljaanne, 366 00:28:31,360 --> 00:28:33,660 mida me oleme teinud häkker väljaanne on tegelikult läinud 367 00:28:33,660 --> 00:28:37,670 ja teinud seda virna kasvatada dünaamiliselt. 368 00:28:37,670 --> 00:28:43,190 Väljakutse on eelkõige siia üles push funktsioon, 369 00:28:43,190 --> 00:28:48,820 välja nuputada, kuidas teha, et massiivi kasvada 370 00:28:48,820 --> 00:28:52,450 nagu te hoida surudes rohkem ja rohkem elemente, et korstnat. 371 00:28:52,450 --> 00:28:56,000 See on tegelikult mitte liiga palju lisakood. 372 00:28:56,000 --> 00:29:00,080 Lihtsalt üleskutse - sa pead meeles pidama, et saada kõnesid malloc seal korralikult, 373 00:29:00,080 --> 00:29:03,310 ja siis aru saada, kui sa lähed helistada RealLOC. 374 00:29:03,310 --> 00:29:06,090 See on lõbus väljakutse, kui oled huvitatud. 375 00:29:06,090 --> 00:29:11,550 >> Aga praegu, liigume edasi, ja räägime järjekorrad. 376 00:29:11,550 --> 00:29:15,680 Leidke siit läbi. 377 00:29:15,680 --> 00:29:19,340 Järjekord on lähedal vend virna. 378 00:29:19,340 --> 00:29:25,380 Nii et pakis, asju, mis pandi viimane 379 00:29:25,380 --> 00:29:28,810 olid esimesed asjad, siis oleks võimalik taastada. 380 00:29:28,810 --> 00:29:33,600 Meil seda viimast sisse, esimesena välja, või LIFO, tellimine. 381 00:29:33,600 --> 00:29:38,390 Arvestades järjekorras, nagu te ootaksite kui sa seisad kooskõlas, 382 00:29:38,390 --> 00:29:41,980 esimene inimene saada kooskõlas, esimene asi sattuda järjekorda, 383 00:29:41,980 --> 00:29:47,630 on esimene asi, et saab laaditakse järjekorda. 384 00:29:47,630 --> 00:29:51,490 Järjekorrad kasutatakse sageli ka siis, kui me tegeleme graafikud, 385 00:29:51,490 --> 00:29:55,560 nagu me rääkisime põgusalt korstnad, 386 00:29:55,560 --> 00:30:00,260 ja järjekorrad on ka mugav hunnik muid asju. 387 00:30:00,260 --> 00:30:06,180 Üks asi, mis kerkib sageli üritab säilitada, näiteks, 388 00:30:06,180 --> 00:30:12,310 järjestatud elementide loetelu. 389 00:30:12,310 --> 00:30:17,650 Ja seda saab teha koos massiivi. Te saate säilitada järjestatud nimekiri asjadest massiivi, 390 00:30:17,650 --> 00:30:20,650 kuid kui see saab keeruline on siis alati leidma 391 00:30:20,650 --> 00:30:26,160 sobiv koht lisada järgmine asi. 392 00:30:26,160 --> 00:30:28,250 Nii et kui teil on array numbrite 1 kuni 10, 393 00:30:28,250 --> 00:30:31,630 ja siis sa tahad laieneda, et kõikide numbrid 1 kuni 100, 394 00:30:31,630 --> 00:30:33,670 ja te saate neid numbreid juhuslikus järjekorras ja üritab hoida kõik 395 00:30:33,670 --> 00:30:40,650 järjestatud kui sa lähed läbi, siis lõpuks oleks vaja teha palju muutuvad. 396 00:30:40,650 --> 00:30:43,910 Teatud tüüpi järjekorrad ja teatud alusvara andmestruktuure 397 00:30:43,910 --> 00:30:46,670 tegelikult võite hoida seda üsna lihtne. 398 00:30:46,670 --> 00:30:50,640 Sa ei pea midagi lisada ja siis ümberkujundamist kogu asi iga kord. 399 00:30:50,640 --> 00:30:56,770 Ega sa pead tegema palju nihkumise sisemisi elemente ümber. 400 00:30:56,770 --> 00:31:02,990 Kui me vaatame järjekorda, näed, et - ka queue.c jaos kood - 401 00:31:02,990 --> 00:31:10,950 struct et me oleme sulle andnud on tõesti sarnane struct mis meie Teile andsime jaoks virna. 402 00:31:10,950 --> 00:31:13,770 >> On üks erand sellest ja et ühe erandiga 403 00:31:13,770 --> 00:31:21,700 on see, et meil on see täiendav täisarv nimetatakse pea, 404 00:31:21,700 --> 00:31:28,120 ja pea siin on jälgida, pea järjekorda, 405 00:31:28,120 --> 00:31:32,160 või esimene element järjekorda. 406 00:31:32,160 --> 00:31:37,470 Mis korstnat, suutsime jälgida element, et me olime umbes toomiseks, 407 00:31:37,470 --> 00:31:40,800 või magasini tippu, kasutades ainult suurus, 408 00:31:40,800 --> 00:31:44,220 arvestades, järjekorda, me tegelema otsades. 409 00:31:44,220 --> 00:31:49,000 Me püüame tack asju lõpus, kuid siis tagasi asju ees. 410 00:31:49,000 --> 00:31:54,640 Nii et tegelikult, peaga, meil on indeks alguses järjekorda, 411 00:31:54,640 --> 00:31:58,920 ja suurus annab meile indeks lõpuks järjekorda 412 00:31:58,920 --> 00:32:03,730 nii et me saame kätte asjad peast ja lisada asju, et saba. 413 00:32:03,730 --> 00:32:06,890 Ning arvestades, pinu, olime ainult kunagi tegelevad pinu. 414 00:32:06,890 --> 00:32:08,900 Me ei ole kunagi olnud juurdepääsu põhja korstnat. 415 00:32:08,900 --> 00:32:12,220 Me ainult lisatud asjad üles ja võttis asjad välja ülemise 416 00:32:12,220 --> 00:32:17,470 nii et me ei vaja, et ekstra valdkonnas sees meie struct. 417 00:32:17,470 --> 00:32:20,590 Kas see üldiselt mõtet? 418 00:32:20,590 --> 00:32:27,670 Hea küll. Jah, Charlotte? [Charlotte, arusaamatult] 419 00:32:27,670 --> 00:32:32,660 [Hardison] See on hea küsimus, ja see oli üks, mis tuli üles loeng. 420 00:32:32,660 --> 00:32:36,290 Ehk jalgsi läbi mõned näited illustreerivad miks 421 00:32:36,290 --> 00:32:41,400 me ei taha kasutada stringe [0] juhina järjekorda. 422 00:32:41,400 --> 00:32:46,770 >> Seega kujutada, et meil on meie sabas, me nimetame seda järjekorda. 423 00:32:46,770 --> 00:32:49,210 Alguses, kui me just instantiated see, 424 00:32:49,210 --> 00:32:53,330 kui me just kuulutanud, et me ei ole vormindatud midagi. 425 00:32:53,330 --> 00:32:56,790 See kõik prügi. Nii et loomulikult me ​​tahame veenduda, et me initsialiseerida 426 00:32:56,790 --> 00:33:00,950 nii suuruse ja pea väljad olema 0, midagi mõistlikku. 427 00:33:00,950 --> 00:33:05,770 Me võiksime ka minna ja tühjaks välja elemente meie sabas. 428 00:33:05,770 --> 00:33:09,930 Ja teha seda skeemi järgi, on märgata, et nüüd meie järjekorda saab omada ainult kolm elementi; 429 00:33:09,930 --> 00:33:13,150 arvestades, et meie stack võiks olla neli, meie järjekorda saab omada ainult kolm. 430 00:33:13,150 --> 00:33:18,680 Ja see on ainult, et diagramm sobib. 431 00:33:18,680 --> 00:33:26,150 Esimene asi, mis juhtub on meil Lisa järjekorda string "Tere". 432 00:33:26,150 --> 00:33:30,380 Ja just nagu me tegime koos korstna, midagi kohutavalt erinev siin, 433 00:33:30,380 --> 00:33:39,230 me visata nöör kell stringid [0] ja juurdekasvu meie suurus 1. 434 00:33:39,230 --> 00:33:42,720 Meil Lisa järjekorda "Bye", siis saab panna. 435 00:33:42,720 --> 00:33:45,870 Nii et see näeb välja nagu pinu enamasti. 436 00:33:45,870 --> 00:33:53,230 Me alustasime siin, uus element, uus element, suurus hoiab tõusevad. 437 00:33:53,230 --> 00:33:56,330 Mis juhtub sel hetkel, kui me tahame dequeue midagi? 438 00:33:56,330 --> 00:34:01,280 Kui me tahame dequeue, mis on element, mida me tahame dequeue? 439 00:34:01,280 --> 00:34:04,110 [Basiilik] Strings [0]. >> Zero. Täpselt õige, basiilik. 440 00:34:04,110 --> 00:34:10,960 Me tahame vabaneda esimene string, see üks, "tere". 441 00:34:10,960 --> 00:34:13,170 Mis siis oli teine ​​asi, mis on muutunud? 442 00:34:13,170 --> 00:34:17,010 Teade, kui me hüppasid midagi välja virna, me lihtsalt muutunud suurus, 443 00:34:17,010 --> 00:34:22,080 kuid siin, meil on paar asja, mis muutus. 444 00:34:22,080 --> 00:34:27,440 Mitte ainult ei suurus muutus, kuid pea muudatusi. 445 00:34:27,440 --> 00:34:31,020 See läheb tagasi Charlotte'i punkt varem: 446 00:34:31,020 --> 00:34:38,699 miks me peame seda pea ka? 447 00:34:38,699 --> 00:34:42,110 Kas on mõtet nüüd, Charlotte? >> Liik. 448 00:34:42,110 --> 00:34:47,500 [Hardison] Kind of? Mis siis juhtus, kui me dequeued? 449 00:34:47,500 --> 00:34:54,340 Mida pead tegema, et nüüd on huvitav? 450 00:34:54,340 --> 00:34:56,449 [Charlotte] Oh, sest see muutunud - eks. Mõistan. 451 00:34:56,449 --> 00:35:02,090 Sest pea - kui juht on suunatud muutustele vastavalt asukohale. 452 00:35:02,090 --> 00:35:07,200 See ei ole enam alati null indeks üks. >> Jah, täpselt. 453 00:35:07,200 --> 00:35:17,660 Mis juhtus oli see, kui dequeueing kõrge element 454 00:35:17,660 --> 00:35:20,590 tehtud ja meil ei olnud see pea valdkonnas 455 00:35:20,590 --> 00:35:26,880 sest meil oli alati kutsudes seda stringi 0 indeks pea meie sabas, 456 00:35:26,880 --> 00:35:30,170 siis oleks meil suunata ülejäänud järjekorda alla. 457 00:35:30,170 --> 00:35:36,010 Meil oleks nihutada "Bye" alates alates stringid [1] stringid [0]. 458 00:35:36,010 --> 00:35:38,760 Ja stringid [2] sätestatakse, et stringide [1]. 459 00:35:38,760 --> 00:35:43,050 Ja me peame seda tegema kogu elementide loetelu, 460 00:35:43,050 --> 00:35:45,110 kogu massiivi elemente. 461 00:35:45,110 --> 00:35:50,490 Ja kui me teeme seda massiivi, et saab tõesti kulukas. 462 00:35:50,490 --> 00:35:53,340 Nii et siin, see ei ole suur asi. Meil on lihtsalt kolm elementi meie massiivi. 463 00:35:53,340 --> 00:35:57,230 Aga kui meil oleks järjekorda tuhat elemente või miljoni elemente, 464 00:35:57,230 --> 00:36:00,060 ja siis äkki, kui hakkame tegema kamp dequeue kutsub kõiki tsüklina 465 00:36:00,060 --> 00:36:03,930 asjad on tõesti aeglustada kui see nihutab kõike ette pidevalt. 466 00:36:03,930 --> 00:36:07,320 Tead, vahetustega 1., vahetustega 1., vahetustega 1., vahetustega 1.. 467 00:36:07,320 --> 00:36:13,650 Selle asemel me kasutame seda peas, me nimetame seda "osuti", kuigi see ei ole tõesti pointer 468 00:36:13,650 --> 00:36:16,430 sõna otseses mõttes, see pole osutiloendurid. 469 00:36:16,430 --> 00:36:19,410 See ei ole int * või char * või midagi sellist. 470 00:36:19,410 --> 00:36:28,930 Aga see on suunatud või näidates pea meie sabas. Jah? 471 00:36:28,930 --> 00:36:38,800 >> [Student] Kuidas dequeue tea lihtsalt pop off iganes eesotsas? 472 00:36:38,800 --> 00:36:43,620 [Hardison] Kuidas dequeue tea, kuidas pop off iganes on otsas? >> Õigus, jah. 473 00:36:43,620 --> 00:36:49,050 >> Mis see vaadates on lihtsalt mida iganes pea väli on seatud. 474 00:36:49,050 --> 00:36:52,710 Nii et see esimene juhtum, kui me vaatame siin, 475 00:36:52,710 --> 00:36:55,690 meie peas on 0, indeks 0.. >> Õigus. 476 00:36:55,690 --> 00:37:00,500 [Hardison] Nii see lihtsalt ütleb okei, noh, elemendi indeks 0, string "Tere", 477 00:37:00,500 --> 00:37:03,050 on element eesotsas meie sabas. 478 00:37:03,050 --> 00:37:05,570 Nii et me ei kavatse dequeue et kutt. 479 00:37:05,570 --> 00:37:09,800 Ja see on element, mis saab tagastada helistaja. 480 00:37:09,800 --> 00:37:14,540 Jah, Saad? >> Nii pea põhimõtteliselt seab - kui sa lähed indeks on? 481 00:37:14,540 --> 00:37:17,750 See on algusest on? >> Jah. >> Okei. 482 00:37:17,750 --> 00:37:22,900 [Hardison] See on saamas uus algus meie massiivi. 483 00:37:22,900 --> 00:37:28,930 Nii et kui te dequeue midagi, kõik mida sa pead tegema, on avada elemendi indeks q.head, 484 00:37:28,930 --> 00:37:32,240 ja see on element, mida soovite dequeue. 485 00:37:32,240 --> 00:37:34,930 Sul on ka kahandab suurus. 486 00:37:34,930 --> 00:37:39,430 Me näeme natuke koht, kus asjad veidi keeruline seda. 487 00:37:39,430 --> 00:37:46,520 Me dequeue, ja nüüd, kui meil Lisa järjekorda uuesti, 488 00:37:46,520 --> 00:37:51,300 kus me Lisa järjekorda? 489 00:37:51,300 --> 00:37:55,000 Kust järgmise elemendi minna meie sabas? 490 00:37:55,000 --> 00:37:57,980 Ütle tahame Lisa järjekorda string "CS". 491 00:37:57,980 --> 00:38:02,240 Kuhu indeks läks? [Õpilased] Strings [2]. >> Kaks. 492 00:38:02,240 --> 00:38:04,980 Miks 2 ja mitte 0? 493 00:38:04,980 --> 00:38:13,570 [Basiilik] Sest nüüd on pea 1, seega see on nagu algust nimekirja? 494 00:38:13,570 --> 00:38:21,220 [Hardison] Õigus. Ja mis tähistab loendi lõppu? 495 00:38:21,220 --> 00:38:23,290 Mida me kasutame, et tähistada lõpuks meie sabas? 496 00:38:23,290 --> 00:38:25,970 Pea on pea meie sabas, alguses meie sabas. 497 00:38:25,970 --> 00:38:29,530 Mis on lõpuks meie sabas? [Õpilased] Suurus. >> Suurus täpselt. 498 00:38:29,530 --> 00:38:36,360 Nii et meie uued elemendid minna kell suurus, ning vahendid, mida me startida tulnud maha pea. 499 00:38:36,360 --> 00:38:45,390 Kui me Lisa järjekorda järgmise elemendi, me paneme selle juures suurusest. 500 00:38:45,390 --> 00:38:48,530 [Student] Enne paned et kuigi suurus oli 1, eks? 501 00:38:48,530 --> 00:38:55,690 [Hardison] Õigus. Nii ei ole päris kell suurus. Suurus +, mitte 1, vaid + pea. 502 00:38:55,690 --> 00:38:59,990 Sest me nihkunud kõike peast summa. 503 00:38:59,990 --> 00:39:14,270 Nii et siin, praegu meil järjekorda suurus 1, mis algab kell indeks 1. 504 00:39:14,270 --> 00:39:20,730 Saba on indeks 2. Jah? 505 00:39:20,730 --> 00:39:25,780 >> [Student] Mis juhtub, kui sa dequeue stringid [0], ja stringid "teenindusaegade mälu 506 00:39:25,780 --> 00:39:29,420 lihtsalt saada tühjendada, põhiliselt, või lihtsalt unustatud? 507 00:39:29,420 --> 00:39:34,700 [Hardison] Jah. Selles mõttes, et me lihtsalt ei unusta neid. 508 00:39:34,700 --> 00:39:42,640 Kui olime ladustamiseks neist koopiaid jaoks - 509 00:39:42,640 --> 00:39:46,310 palju andmestruktuurid sageli salvestada oma koopiad elemendid 510 00:39:46,310 --> 00:39:51,760 nii et isiku juhtimisel andmestruktuur ei pea muretsema 511 00:39:51,760 --> 00:39:53,650 umbes seal, kus kõik suunanäitajaks lähevad. 512 00:39:53,650 --> 00:39:56,000 Andmestruktuur hoiab kõike, hoiab kõiki koopiaid, 513 00:39:56,000 --> 00:39:59,580 veenduda, et kõik püsib sobivalt. 514 00:39:59,580 --> 00:40:03,140 Kuid sellisel juhul need andmestruktuurid lihtsalt, lihtsuse, 515 00:40:03,140 --> 00:40:05,580 ei tee koopiaid midagi, et me ladustamiseks neid. 516 00:40:05,580 --> 00:40:08,630 [Student] Nii on see pidev array -? >> Jah. 517 00:40:08,630 --> 00:40:14,350 Kui me vaatame tagasi, mida mõiste oli selle struktuuri, see on. 518 00:40:14,350 --> 00:40:19,110 See on lihtsalt tavaline massiiv nagu olete näinud, 519 00:40:19,110 --> 00:40:24,280 array char * s. 520 00:40:24,280 --> 00:40:26,340 Kas see -? >> Jah, ma just mõtlesin, 521 00:40:26,340 --> 00:40:29,130 kui sa lõpuks otsa mälu, teatud määral, 522 00:40:29,130 --> 00:40:32,330 kui teil on kõik need tühjad kohad oma massiivi? 523 00:40:32,330 --> 00:40:36,390 [Hardison] Jah, see on hea punkt. 524 00:40:36,390 --> 00:40:41,530 >> Kui me vaatame, mis nüüd juhtus sel hetkel, 525 00:40:41,530 --> 00:40:46,350 oleme täis meie sabas, tundub. 526 00:40:46,350 --> 00:40:50,390 Aga me ei ole tõesti täis meie sabas 527 00:40:50,390 --> 00:40:57,710 sest meil on järjekord see on suurus 2, kuid see algab kell indeks 1, 528 00:40:57,710 --> 00:41:02,160 sest see on kui meie peas osuti on. 529 00:41:02,160 --> 00:41:08,400 Nagu sa ütlesid, et element on string [0], on indeks 0, ei ole tegelikult olemas. 530 00:41:08,400 --> 00:41:10,450 See ei ole meie järjekorda enam. 531 00:41:10,450 --> 00:41:16,460 Me lihtsalt ei viitsinud minna ja üle kirjutada, kui me dequeued ta. 532 00:41:16,460 --> 00:41:18,700 Nii et kuigi tundub, et me oleme otsa mälu, me tõesti ei ole. 533 00:41:18,700 --> 00:41:23,270 See koht on saadaval meie jaoks kasutada. 534 00:41:23,270 --> 00:41:29,310 Asjakohane käitumine, kui me proovida ja esimene dequeue midagi 535 00:41:29,310 --> 00:41:34,420 meeldib "Bye", mis oleks pop bye maha. 536 00:41:34,420 --> 00:41:38,460 Nüüd on meie sabas algab indeks 2 ja on suurusega 1. 537 00:41:38,460 --> 00:41:42,240 Ja nüüd, kui me püüame Lisa järjekorda midagi jälle öelda, 50, 538 00:41:42,240 --> 00:41:47,880 50 peaks minema selle koha juures indeks 0. 539 00:41:47,880 --> 00:41:51,270 sest see on ikka saadaval siin. Jah, Saad? 540 00:41:51,270 --> 00:41:53,630 [Saad] Kas see juhtub automaatselt? 541 00:41:53,630 --> 00:41:56,150 [Hardison] See ei juhtu üsna automaatselt. Sa pead tegema matemaatika 542 00:41:56,150 --> 00:42:00,380 teha seda tööd, kuid sisuliselt mida me oleme teinud, on meil lihtsalt pakitud ümber. 543 00:42:00,380 --> 00:42:04,070 [Saad] Ja see on okei, kui see on auk keskel on? 544 00:42:04,070 --> 00:42:08,720 [Hardison] See on, kui me suudame teha matemaatika töötada välja korralikult. 545 00:42:08,720 --> 00:42:15,470 >> Ja selgub, et tegelikult ei ole nii raske teha mod operaator. 546 00:42:15,470 --> 00:42:20,040 Nii nagu me tegime koos Caesar ja krüpto värk, 547 00:42:20,040 --> 00:42:25,190 kasutades mod, saame asju murtakse ja jätkame 548 00:42:25,190 --> 00:42:28,090 ringi ja ringi ja ringi meie sabas, 549 00:42:28,090 --> 00:42:32,180 hoides, et pea kursorit ringi liikudes. 550 00:42:32,180 --> 00:42:38,840 Pange tähele, et suurus on alati kinni mitmeid elemente tegelikult jooksul järjekorda. 551 00:42:38,840 --> 00:42:43,110 Ja see on lihtsalt pea osuti, mis hoiab jalgrattaga läbi. 552 00:42:43,110 --> 00:42:49,660 Kui me vaatame, mis juhtus siin, kui me läheme tagasi algusesse, 553 00:42:49,660 --> 00:42:55,020 ja sa lihtsalt vaadata, mis juhtub peaga 554 00:42:55,020 --> 00:42:58,240 kui me Lisa järjekorda midagi ei juhtunud midagi pähe. 555 00:42:58,240 --> 00:43:00,970 Kui me enqueued midagi muud, midagi ei juhtunud pähe. 556 00:43:00,970 --> 00:43:04,130 Niipea kui me dequeued midagi, pea läheb ühe võrra ülespoole. 557 00:43:04,130 --> 00:43:06,600 Me enqueued midagi ei juhtu midagi pähe. 558 00:43:06,600 --> 00:43:11,060 Kui me dequeue midagi, äkki pea saab suurendatakse. 559 00:43:11,060 --> 00:43:14,660 Kui me Lisa järjekorda midagi ei juhtu midagi pähe. 560 00:43:14,660 --> 00:43:20,240 >> Mis juhtuks sel hetkel, kui me dequeue midagi jälle? 561 00:43:20,240 --> 00:43:23,240 Kõik mõtted? Mis juhtuks pähe? 562 00:43:23,240 --> 00:43:27,190 Mis peaks juhtuma, et pea 563 00:43:27,190 --> 00:43:32,990 kui me dequeue midagi muud? 564 00:43:32,990 --> 00:43:35,400 Pea kohe on indeks 2, 565 00:43:35,400 --> 00:43:38,920 mis tähendab, et juht järjekord on stringid. [2] 566 00:43:38,920 --> 00:43:44,280 [Student] mis tagastab 0? >> See peaks tagastama kuni 0. See peaks wrap tagasi umbes, täpselt. 567 00:43:44,280 --> 00:43:48,440 Seni iga kord me kutsusime dequeue, oleme olnud lisades ühe pea, 568 00:43:48,440 --> 00:43:50,960 lisada ühe pea, lisada üks pea, lisada üks pea. 569 00:43:50,960 --> 00:43:58,400 Niipea, et pea osuti jõuab viimase indeks meie massiiv, 570 00:43:58,400 --> 00:44:05,650 siis peame murrab ta tagasi umbes aasta algusega, mine tagasi 0. 571 00:44:05,650 --> 00:44:09,900 [Charlotte] Mis määrab võime järjekord korstna? 572 00:44:09,900 --> 00:44:13,120 [Hardison] Sellisel juhul oleme lihtsalt kasutanud # määratletud konstantne. >> Okei. 573 00:44:13,120 --> 00:44:19,590 [Hardison] Tegeliku. C fail, saab minna ja sopp seda natuke 574 00:44:19,590 --> 00:44:21,710 ja teha see nii suur või nii vähe kui soovite. 575 00:44:21,710 --> 00:44:25,310 [Charlotte] Nii et kui sa üritad seda järjekorda, kuidas sa teha arvuti tea 576 00:44:25,310 --> 00:44:29,120 kuidas suur soovite korstnat olla? 577 00:44:29,120 --> 00:44:31,700 [Hardison] See on hea küsimus. 578 00:44:31,700 --> 00:44:34,800 Seal on paar võimalust. Üks on lihtsalt määratleda seda rindel 579 00:44:34,800 --> 00:44:42,050 ja öelda, et see saab olema järjekorras, mis on 4 elementi või 50 elementi või 10.000. 580 00:44:42,050 --> 00:44:45,430 Teine võimalus on teha seda, mida häkker väljaanne inimesed teevad 581 00:44:45,430 --> 00:44:52,310 ja luua funktsioone, et teie järjekord kasvab dünaamiliselt kui veel asjad lisatud sisse 582 00:44:52,310 --> 00:44:54,740 >> [Charlotte] Nii minna esimese variandi, mida süntaks te kasutate 583 00:44:54,740 --> 00:44:57,830 öelda programmi, mis on suuruse järjekorras? 584 00:44:57,830 --> 00:45:04,780 [Hardison] Ah. Nii et lähme siit. 585 00:45:04,780 --> 00:45:12,650 Ma olen ikka stack.c siin, nii et ma lihtsalt lähen üles kerimiseks üles siin. 586 00:45:12,650 --> 00:45:17,920 Kas te näete seda siin? See on # define mahuga 10. 587 00:45:17,920 --> 00:45:24,600 Ja see on peaaegu täpselt sama süntaksit, et meil on järjekord. 588 00:45:24,600 --> 00:45:28,390 Välja arvatud järjekorda, meil, et pildi struct valdkonnas siia. 589 00:45:28,390 --> 00:45:32,760 [Charlotte] Ma arvasin, mahutavus tähendas võime string. 590 00:45:32,760 --> 00:45:36,770 [Hardison] Ah. >> Et see on pikim sõna. >> Sain. 591 00:45:36,770 --> 00:45:41,180 Jah. Suutlikkuse siin - see on suurepärane punkt. 592 00:45:41,180 --> 00:45:44,000 Ja see on midagi, mis on keeruline 593 00:45:44,000 --> 00:45:49,480 sest me oleme siin deklareerida on array char * s. 594 00:45:49,480 --> 00:45:52,770 Massiivi osuti. 595 00:45:52,770 --> 00:45:56,690 See on array tähemärki. 596 00:45:56,690 --> 00:46:01,690 See on ilmselt, mida olete näinud, kui olete olnud kuulutab oma puhvrid Faili I / O, 597 00:46:01,690 --> 00:46:06,840 kui olete olnud luua stringe käsitsi pinu. 598 00:46:06,840 --> 00:46:09,090 See, mida meil siin on array char * s. 599 00:46:09,090 --> 00:46:13,400 Seega on massiivi osuti. 600 00:46:13,400 --> 00:46:18,350 Tegelikult, kui me suumida tagasi välja ja vaatame, mis siin toimub 601 00:46:18,350 --> 00:46:23,140 esitlemisel, näed, et tegelik elemendid, märkandmeid 602 00:46:23,140 --> 00:46:26,180 ei ole salvestatud massiivi ise. 603 00:46:26,180 --> 00:46:42,690 Mis salvestatud meie massiivi siin on vihjeid iseloomuga andmeid. 604 00:46:42,690 --> 00:46:52,560 Okei. Nii et me oleme näinud, kuidas suuruse järjekorras on nagu koos korstna, 605 00:46:52,560 --> 00:46:58,670 suurus alati austab elementide arvuga praegu järjekorras. 606 00:46:58,670 --> 00:47:02,720 Pärast tegemise 2. enqueues, suurus on 2. 607 00:47:02,720 --> 00:47:07,110 Pärast seda dequeue suurus on nüüd 1. 608 00:47:07,110 --> 00:47:09,330 Pärast seda teise Lisa järjekorda suurus on tagasi kuni 2. 609 00:47:09,330 --> 00:47:12,340 Nii suurus kindlasti austab elementide arvu järjekorras, 610 00:47:12,340 --> 00:47:15,580 ja siis pead muudkui jalgrattaga. 611 00:47:15,580 --> 00:47:20,210 See läheb 0-1-2, 0-1-2, 0-1-2. 612 00:47:20,210 --> 00:47:25,620 Ja iga kord, kui me helistada dequeue, pea kursorit saab suurendatakse järgmise indeks. 613 00:47:25,620 --> 00:47:29,930 Ja kui pea hakkab minema üle ning see silma tagasi umbes 0-ga. 614 00:47:29,930 --> 00:47:34,870 Nii et, saame kirjutada dequeue funktsioon. 615 00:47:34,870 --> 00:47:40,200 Ja me ei kavatse lahkuda Lisa järjekorda funktsioon kutid rakendada asemel. 616 00:47:40,200 --> 00:47:45,880 >> Kui me dequeue element välja meie sabas, 617 00:47:45,880 --> 00:47:55,490 Mis oli esimene asi, mis Taaniel tegi, kui me hakkasime kirjalikult pop funktsioon korstnad? 618 00:47:55,490 --> 00:48:00,490 Las ma kuulen keegi, kes ei ole rääkinud veel. 619 00:48:00,490 --> 00:48:06,710 Vaatame, Saad, kas sa mäletad, mida Daniel tegi kui esimene asi, kui ta kirjutas pop? 620 00:48:06,710 --> 00:48:08,860 [Saad] Seal oli, see oli - >> Ta proovis midagi. 621 00:48:08,860 --> 00:48:12,140 [Saad] Kui suurus on suurem kui 0. >> Täpselt. 622 00:48:12,140 --> 00:48:14,390 Ja mis see oli testimine? 623 00:48:14,390 --> 00:48:19,090 [Saad] See oli katse, et näha, kas seal on midagi sees massiiv. 624 00:48:19,090 --> 00:48:23,210 [Hardison] Jah. Täpselt. Nii et sa ei saa pop midagi välja pinu kui see on tühi. 625 00:48:23,210 --> 00:48:26,510 Samuti ei saa te dequeue midagi järjekorda, kui see on tühi. 626 00:48:26,510 --> 00:48:30,420 Mis on esimene asi, mida me peaksime tegema meie dequeue funktsioon siin, sa arvad? 627 00:48:30,420 --> 00:48:33,860 [Saad] Kui suurus on suurem kui 0? >> Jah. 628 00:48:33,860 --> 00:48:37,710 Sel juhul, ma olen tegelikult lihtsalt katsetada, et näha, kas see on 0. 629 00:48:37,710 --> 00:48:42,240 Kui see on 0, me saame naasta null. 630 00:48:42,240 --> 00:48:45,280 Aga täpselt sama loogikat. 631 00:48:45,280 --> 00:48:49,110 Ja olgem jätkata seda. 632 00:48:49,110 --> 00:48:54,600 Kui suurus ei ole 0, kus on element, mida me tahame dequeue? 633 00:48:54,600 --> 00:48:58,550 [Saad] tipus? >> Täpselt. 634 00:48:58,550 --> 00:49:01,720 Me ei saa lihtsalt tõmmake esimene osa meie sabas 635 00:49:01,720 --> 00:49:07,040 , pääsedes element eesotsas. 636 00:49:07,040 --> 00:49:14,630 Miski hull. 637 00:49:14,630 --> 00:49:19,620 Pärast seda, mida me peaksime tegema? Mis peab juhtuma? 638 00:49:19,620 --> 00:49:23,740 Milline oli teine ​​asi, mis me rääkisime dequeue? 639 00:49:23,740 --> 00:49:28,130 Kaks asjad peavad juhtuma, sest meie järjekord on muutunud. 640 00:49:28,130 --> 00:49:35,640 [Daniel] suuruse vähendamiseks. >> Meil ​​on suuruse vähendamiseks ja suurendada pea? Täpselt. 641 00:49:35,640 --> 00:49:40,600 Suurendada pea, ei saa me lihtsalt pimesi tõsta pea meeles. 642 00:49:40,600 --> 00:49:45,080 Me ei saa lihtsalt teha queue.head + +. 643 00:49:45,080 --> 00:49:51,630 Peame ka see mod poolt võimsust. 644 00:49:51,630 --> 00:49:54,740 Ja miks me Mod by võimsus, Stella? 645 00:49:54,740 --> 00:49:58,680 [Stella] Sest see peab ümbritsev. >> Täpselt. 646 00:49:58,680 --> 00:50:04,750 Me mod poolt läbilaskevõime, sest see on wrap tagasi umbes 0-ga. 647 00:50:04,750 --> 00:50:07,400 Nii et nüüd, sel hetkel, saame teha seda, mida Daniel ütles. 648 00:50:07,400 --> 00:50:12,700 Saame kahandab suurus. 649 00:50:12,700 --> 00:50:29,170 Ja siis me saame lihtsalt tagasi element, mis oli tipus järjekorda. 650 00:50:29,170 --> 00:50:34,000 Tundub selline gnarly alguses. Sul võib olla küsimus. Vabandust? 651 00:50:34,000 --> 00:50:37,260 >> [Sam] Miks on esimene ülaosas järjekorda? Kuhu see kadus? 652 00:50:37,260 --> 00:50:42,480 [Hardison] See pärineb neljanda rea ​​alt. 653 00:50:42,480 --> 00:50:46,060 Pärast me testida veendumaks, et meie järjekorda ei ole tühi, 654 00:50:46,060 --> 00:50:54,100 me tõmmake char * Esiteks, me tõmba element, mis istub eesotsas indeks 655 00:50:54,100 --> 00:50:58,680 meie massiiv, meie stringide massiiv, >> ja kõne, et esimesena? 656 00:50:58,680 --> 00:51:04,500 [Hardison] Ja me kutsume seda esimesena. Jah. 657 00:51:04,500 --> 00:51:09,850 Lihtsalt jälgida, et miks sa arvad, me pidime seda tegema? 658 00:51:09,850 --> 00:51:18,270 [Sam] Iga Esimene on lihtsalt tagasi q.strings [q.head]? >> Jah. 659 00:51:18,270 --> 00:51:23,830 >> Sest me seda teeme muutmine q.head koos mod funktsioon, 660 00:51:23,830 --> 00:51:27,810 ja ei ole viis seda teha jooksul tagasi rida ka. 661 00:51:27,810 --> 00:51:31,640 [Hardison] Täpselt. Sa oled kohapeal. Sam on täiesti kohapeal. 662 00:51:31,640 --> 00:51:36,800 Seetõttu pidime tõmmake esimene element meie järjekorda ja salvestada see muutuja 663 00:51:36,800 --> 00:51:43,030 sest see rida, kus olime just q.head, 664 00:51:43,030 --> 00:51:47,030 seal mod operaator seal ei ole midagi, mida me saame teha 665 00:51:47,030 --> 00:51:51,230 ja on see jõustub pea ilma - ühele joonele. 666 00:51:51,230 --> 00:51:54,480 Nii et me tegelikult tõmmake esimene element, siis reguleeri pea, 667 00:51:54,480 --> 00:52:00,430 suurust kohandada, ja siis tagasi element, mis me välja tõmmatud. 668 00:52:00,430 --> 00:52:02,680 Ja see on midagi, mida me näeme tulla hiljem 669 00:52:02,680 --> 00:52:04,920 seotud nimekirjades, nagu me mängida nendega. 670 00:52:04,920 --> 00:52:08,410 Sageli, kui sa vabastades või kõrvaldamise seotud nimekirjad 671 00:52:08,410 --> 00:52:13,500 tuleb meeles pidada järgmise elemendi, järgmise pointer seotud nimekirja 672 00:52:13,500 --> 00:52:16,330 Enne kõrvaldamise praegune. 673 00:52:16,330 --> 00:52:23,580 Sest muidu sa visata informatsiooni sellest, mis on jäänud nimekirja. 674 00:52:23,580 --> 00:52:34,160 Nüüd, kui sa lähed oma seade, kui avada queue.c--x läbi selle. 675 00:52:34,160 --> 00:52:39,390 Nii et kui ma avada queue.c, lubage mul suurendada siin, 676 00:52:39,390 --> 00:52:44,970 te näete, et teil on sarnase välimusega faili. 677 00:52:44,970 --> 00:52:49,200 Sarnase välimusega faili, mis meil oli varem stack.c. 678 00:52:49,200 --> 00:52:54,690 Meil meie struct jaoks järjekorda määratletud nagu nägime slaidid. 679 00:52:54,690 --> 00:52:59,870 >> Meil on meie Lisa järjekorda funktsioon, mis on sinu jaoks teha. 680 00:52:59,870 --> 00:53:04,340 Ja meil on dequeue funktsioon siin. 681 00:53:04,340 --> 00:53:06,870 Dequeue funktsiooni fail on rakendamata, 682 00:53:06,870 --> 00:53:13,230 aga ma panen selle tagasi üles PowerPoint, nii et saate tippige see, kui soovite. 683 00:53:13,230 --> 00:53:16,690 Nii, et järgmise 5 minutit või nii, kutid töötavad Lisa järjekorda 684 00:53:16,690 --> 00:53:22,570 mis on peaaegu täpselt vastupidine dequeue. 685 00:53:22,570 --> 00:53:29,560 Sa ei pea kohandama pea kui sa enqueueing, aga mida sa pead muuta? 686 00:53:29,560 --> 00:53:38,920 Suurus. Nii et kui teil Lisa järjekorda, pea jääb puutumata, suurus saab muuta. 687 00:53:38,920 --> 00:53:46,920 Aga see võtab natuke - siis on mängida, et moderaator 688 00:53:46,920 --> 00:53:57,560 välja nuputada täpselt, mida indeksi uus element tuleks lisada juures. 689 00:53:57,560 --> 00:54:03,080 Nii et ma annan sulle poisid natuke, pane dequeue tagasi üles klapp 690 00:54:03,080 --> 00:54:05,200 ja kui te on küsimusi, karjuda neid, et saaksime 691 00:54:05,200 --> 00:54:09,220 kõik räägivad nad rühmana. 692 00:54:09,220 --> 00:54:13,960 Samuti suurusele sa ei - kui te suurust kohandada, saad alati lihtsalt - 693 00:54:13,960 --> 00:54:18,720 sa pead mod suurus kunagi? [Daniel] No >> Sul ei ole mod suurus, eks. 694 00:54:18,720 --> 00:54:24,260 Sest suurus alati, kui Sa - eeldades haldate asju õigesti, 695 00:54:24,260 --> 00:54:30,840 suurus on alati 0 ja 3. 696 00:54:30,840 --> 00:54:38,680 Kui teil mod kui sa teed Lisa järjekorda? 697 00:54:38,680 --> 00:54:41,060 [Student] Ainult pea. >> Ainult pea, täpselt. 698 00:54:41,060 --> 00:54:44,620 Ja miks sa pead mod üldse Lisa järjekorda? 699 00:54:44,620 --> 00:54:48,830 Kui on olukord, kus soovid on mod? 700 00:54:48,830 --> 00:54:53,630 [Student] Kui teil on kraami ruumid meeldi ruumid 1 ja 2, 701 00:54:53,630 --> 00:54:55,950 ja siis vaja midagi lisada 0. 702 00:54:55,950 --> 00:55:02,570 [Hardison] Jah, täpselt. Nii et kui su pea osuti on päris lõpus, 703 00:55:02,570 --> 00:55:14,210 või kui teie suurus pluss teie pea on suurem, või pigem läheb ümbritsev järjekorda. 704 00:55:14,210 --> 00:55:17,830 >> Nii et selles olukorras, et meil on siin üleval objektiklaasil just nüüd, 705 00:55:17,830 --> 00:55:24,370 kui ma tahan Lisa järjekorda midagi just nüüd, 706 00:55:24,370 --> 00:55:31,110 tahame Lisa järjekorda millegi indeks 0.. 707 00:55:31,110 --> 00:55:35,450 Nii et kui te vaatate, kui 50 läheb, ja ma kutsun Lisa järjekorda 50, 708 00:55:35,450 --> 00:55:40,840 see läheb sinna allosas. See läheb indeks 0.. 709 00:55:40,840 --> 00:55:44,160 See asendab "tere", mis oli juba dequeued. 710 00:55:44,160 --> 00:55:46,210 [Daniel] Ära sa hoolitseda, et dequeue juba? 711 00:55:46,210 --> 00:55:50,550 Miks see midagi peale hakata pea Lisa järjekorda? 712 00:55:50,550 --> 00:55:55,770 [Hardison] Ah, et sa ei muuda pea, vabandust. 713 00:55:55,770 --> 00:56:02,310 Aga sa pead kasutama mod operaator kui olete juurdepääsusoovide 714 00:56:02,310 --> 00:56:04,250 element, mida soovite Lisa järjekorda, kui olete juurdepääsusoovide 715 00:56:04,250 --> 00:56:06,960 Järgmise osa oma järjekorda. 716 00:56:06,960 --> 00:56:10,960 [Basiilik] Ma ei teinud seda, ja ma sain "edu" seal. 717 00:56:10,960 --> 00:56:13,370 [Daniel] Oh, ma saan aru, mida sa räägid. 718 00:56:13,370 --> 00:56:16,240 [Hardison] Nii et sa ei - sa lihtsalt tegi q.size? 719 00:56:16,240 --> 00:56:20,670 [Basiilik] Jah. Kolisin just pool, ma ei teinud midagi peaga. 720 00:56:20,670 --> 00:56:24,300 [Hardison] Sa ei tegelikult on taastada pea olema midagi, 721 00:56:24,300 --> 00:56:31,650 aga kui sa indeks stringid massiivi 722 00:56:31,650 --> 00:56:39,500 sa tegelikult minna ja arvutada, kui järgmine element on, 723 00:56:39,500 --> 00:56:44,230 sest väät korstna kõrval osa oma korstnat oli alati 724 00:56:44,230 --> 00:56:48,740 kell indeks, mis vastab suurusele. 725 00:56:48,740 --> 00:56:55,850 Kui me vaatame tagasi üles meie pinu push funktsioon, 726 00:56:55,850 --> 00:57:03,100 me võiks alati kõmakas meie uus element paremale indeksi suurus. 727 00:57:03,100 --> 00:57:06,710 Ning arvestades, järjekorda, me ei saa seda teha 728 00:57:06,710 --> 00:57:10,340 sest kui me oleme selles olukorras, 729 00:57:10,340 --> 00:57:18,130 kui me enqueued 50 Meie uus string läheks otse stringid [1] 730 00:57:18,130 --> 00:57:20,540 mida me ei taha teha. 731 00:57:20,540 --> 00:57:41,200 Me tahame uus string minna kell indeks 0.. 732 00:57:41,200 --> 00:57:44,320 >> Kas keegi - jah? [Student] Mul on küsimus, kuid see ei ole tõesti seotud. 733 00:57:44,320 --> 00:57:48,160 Mida see tähendab, kui keegi lihtsalt nõuab midagi pred pointer? 734 00:57:48,160 --> 00:57:51,260 Mis on selle nime lühend? Ma tean, see on lihtsalt nimi. 735 00:57:51,260 --> 00:57:59,110 [Hardison] pred pointer? Vaatame. Mis kontekstis? 736 00:57:59,110 --> 00:58:01,790 [Student] See oli Lisa. Võin küsida hiljem, kui soovite 737 00:58:01,790 --> 00:58:03,920 sest see ei ole tõesti seotud, aga ma lihtsalt - 738 00:58:03,920 --> 00:58:07,300 [Hardison] Alates Davidi sisestada koodi loeng? 739 00:58:07,300 --> 00:58:10,860 Me ei tõmba, et üles ja räägi sellest. 740 00:58:10,860 --> 00:58:15,550 Me räägime, et järgmisel, kui saame lingitud nimekirjad. 741 00:58:15,550 --> 00:58:21,440 >> Nii et olgem tõesti kiiresti pilk Lisa järjekorda funktsioon välja näeb. 742 00:58:21,440 --> 00:58:26,530 Mis oli esimene asi, mida inimesed püüdnud teha oma Lisa järjekorda rida? Sellesse järjekorda? 743 00:58:26,530 --> 00:58:29,960 Sarnane sellele, mida sa tegid korstnat surudes. 744 00:58:29,960 --> 00:58:32,080 Mida sa tegid, Stella? 745 00:58:32,080 --> 00:58:35,050 [Stella, arusaamatult] 746 00:58:35,050 --> 00:58:45,700 [Hardison] Täpselt. Kui (q.size == CAPACITY) - 747 00:58:45,700 --> 00:58:54,720 Mul on vaja panna minu traksid õiges kohas - tagasi false. 748 00:58:54,720 --> 00:59:01,370 Suurenda natuke. Okei. 749 00:59:01,370 --> 00:59:03,800 Nüüd Mis on järgmine asi, mis me tegema pidime? 750 00:59:03,800 --> 00:59:11,370 Just nagu pinu, ja sisestatud õiges kohas. 751 00:59:11,370 --> 00:59:16,010 Ja mis oli õiges kohas lisada seda? 752 00:59:16,010 --> 00:59:23,170 Mis stack oli indeksi suurus, seda, et see pole päris nii. 753 00:59:23,170 --> 00:59:30,210 [Daniel] Mul on q.head--või - >> q.strings? >> Jah. 754 00:59:30,210 --> 00:59:40,470 q.strings [q.head + q.size mod MAHT]? 755 00:59:40,470 --> 00:59:42,740 [Hardison] Me ilmselt taha panna sulgudesse selle ümber 756 00:59:42,740 --> 00:59:48,830 nii et saame sobiva järjestuse ja nii see on cleart kõigile. 757 00:59:48,830 --> 00:59:55,800 Ja seatud, et võrdne? >> STR? >> Et tn. Suur. 758 00:59:55,800 --> 01:00:00,160 Ja mis nüüd on viimane asi, mida me peame tegema? 759 01:00:00,160 --> 01:00:06,780 Just nagu me tegime korstna. >> Kasvatab suurus? >> Kasvatab suurus. 760 01:00:06,780 --> 01:00:13,830 Poom. Ja siis, kuna starter koodi just tagasi vale vaikimisi 761 01:00:13,830 --> 01:00:27,460 me tahame muuta seda tõeseks, kui kõik läheb läbi ja kõik läheb hästi. 762 01:00:27,460 --> 01:00:33,050 Hea küll. See on palju informatsiooni osas. 763 01:00:33,050 --> 01:00:39,480 Me pole päris üle. Me tahame rääkida tõesti kiiresti umbes üksikult seotud nimekirju. 764 01:00:39,480 --> 01:00:44,010 Ma panen selle üles, et saaksime minna tagasi hiljem. 765 01:00:44,010 --> 01:00:50,850 Aga lähme tagasi meie esitus vaid paar rohkem slaide. 766 01:00:50,850 --> 01:00:53,790 Nii Lisa järjekorda on TODO, nüüd olen seda teinud. 767 01:00:53,790 --> 01:00:57,430 >> Nüüd võtame pilk üksikult seotud nimekirju. 768 01:00:57,430 --> 01:01:00,040 Me rääkisime neist natuke rohkem loeng. 769 01:01:00,040 --> 01:01:02,540 Kui paljud kutid nägid demo, kus me pidime inimesi 770 01:01:02,540 --> 01:01:08,220 kohmakalt osutades üksteist ja osaluse numbrid? >> Olin seda. 771 01:01:08,220 --> 01:01:16,620 >> Mida te poisid arvate? Kas see loodetavasti demüstifitseerida neid natuke? 772 01:01:16,620 --> 01:01:25,990 Mis nimekiri, tuleb välja, et me käsitleme seda tüüpi, et me ei kavatse helistada sõlme. 773 01:01:25,990 --> 01:01:32,520 Ning arvestades, järjekorda ja korstnat meil oli structs et me tahaks helistada järjekorda korstnat 774 01:01:32,520 --> 01:01:34,860 meil oli neid uusi järjekorda pinu tüüpe, 775 01:01:34,860 --> 01:01:39,240 Siin nimekirjas on tõesti vaid koosneb hunnik tippe. 776 01:01:39,240 --> 01:01:45,920 Samamoodi, et stringid on lihtsalt hunnik sümboleid kõik rivistatud üksteise kõrval. 777 01:01:45,920 --> 01:01:50,650 Seotud loetelu on vaid sõlme ja teise sõlme ja teise sõlme ja teise sõlme. 778 01:01:50,650 --> 01:01:55,080 Ja mitte oivaline kõik sõlmed kokku ja ladustamiseks neid contiguously 779 01:01:55,080 --> 01:01:58,090 Olgu üksteise kõrval mälus, 780 01:01:58,090 --> 01:02:04,470 võttes selle järgmisele pointer annab meile võimaluse salvestada sõlmede kus iganes, juhuslikult. 781 01:02:04,470 --> 01:02:10,500 Ja siis mingi traat neid kõiki koos juhtida ühest teiseni. 782 01:02:10,500 --> 01:02:15,850 >> Ja mis oli suur eelis, et see oli üle hulga? 783 01:02:15,850 --> 01:02:21,680 Üle ladustamiseks kõik contiguously lihtsalt kinni üksteise kõrval? 784 01:02:21,680 --> 01:02:24,190 Sa mäletad? Jah? >> Dünaamiline mälu eraldamise? 785 01:02:24,190 --> 01:02:27,220 >> Dünaamiline mälu eraldamise siis mis mõttes? 786 01:02:27,220 --> 01:02:31,780 [Student] Sel saate hoida muutes suurem ja te ei pea liikuda kogu oma massiivi? 787 01:02:31,780 --> 01:02:40,940 [Hardison] Täpselt. Nii massiiv, kui sa tahad panna uus element keset seda, 788 01:02:40,940 --> 01:02:45,320 teil on suunata kõik ruumi teha. 789 01:02:45,320 --> 01:02:47,880 Ja nagu me rääkisime järjekorda, 790 01:02:47,880 --> 01:02:50,080 Sellepärast me hoiame, et pea pointer, 791 01:02:50,080 --> 01:02:52,050 nii et me ei ole pidevalt minnes asju. 792 01:02:52,050 --> 01:02:54,520 Sest mis saab kallis, kui sul on suur massiiv 793 01:02:54,520 --> 01:02:57,130 ja teed sageli need juhuslikult sisestamisel. 794 01:02:57,130 --> 01:03:00,820 Arvestades nimekirja, millel on kõik, mida pead tegema, on visata see uus sõlm, 795 01:03:00,820 --> 01:03:06,330 kohandada viiteid, ja sa oled teinud. 796 01:03:06,330 --> 01:03:10,940 Mis imeb selle kohta? 797 01:03:10,940 --> 01:03:16,830 Jättes kõrvale asjaolu, et see ei ole nii lihtne töötada massiiv? Jah? 798 01:03:16,830 --> 01:03:22,980 [Daniel] Noh, ma arvan, et see on palju raskem pääseda konkreetse elemendi seotud nimekirja? 799 01:03:22,980 --> 01:03:30,470 [Hardison] Sa ei saa lihtsalt hüpata suvalise elemendi keset oma seotud nimekirja. 800 01:03:30,470 --> 01:03:33,800 Kuidas sa pead tegema selle asemel? >> Sa pead sammult läbi kogu asi. 801 01:03:33,800 --> 01:03:35,660 [Hardison] Jah. Sa pead minema läbi ühe korraga, ükshaaval. 802 01:03:35,660 --> 01:03:38,480 See on tohutu - see on valu. 803 01:03:38,480 --> 01:03:41,550 Mis muud - seal on teine ​​kokkuvarisemine, et see. 804 01:03:41,550 --> 01:03:45,340 [Basiilik] Sa ei saa minna edasi ja tagasi? Sa pead minema ühes suunas? 805 01:03:45,340 --> 01:03:48,570 [Hardison] Jah. Niisiis, kuidas me lahendame, et mõnikord? 806 01:03:48,570 --> 01:03:53,370 [Basiilik] Topeltränistuv seotud nimekirjad? >> Täpselt. Seal on kahekordselt seotud nimekirju. 807 01:03:53,370 --> 01:03:55,540 On ka - kahju? 808 01:03:55,540 --> 01:03:57,620 >> [Sam] Kas see on sama, kui kasutada pred asi, mis - 809 01:03:57,620 --> 01:04:01,090 Mul tuli just meelde, ei ole see, mida pred asi on? 810 01:04:01,090 --> 01:04:05,850 Kas pole vahel kahekordselt ja üksikult? 811 01:04:05,850 --> 01:04:10,020 [Hardison] Vaatame, mida täpselt ta teeb. 812 01:04:10,020 --> 01:04:15,760 Nii et siin me läheme. Siin on nimekiri kood. 813 01:04:15,760 --> 01:04:25,620 Siin on meil predptr, siin. Kas see, mida sa räägid? 814 01:04:25,620 --> 01:04:30,750 Nii see oli - ta vabastades nimekirja ja ta üritab hoida kursor ta. 815 01:04:30,750 --> 01:04:35,000 See ei ole kahekordselt, üksikult seotud-nimekirju. 816 01:04:35,000 --> 01:04:40,090 Me võime rääkida rohkem sellest hiljem, sest see räägib vabastades nimekirja 817 01:04:40,090 --> 01:04:42,900 ja ma tahan näidata mõned muud asjad kõigepealt. 818 01:04:42,900 --> 01:04:51,480 aga see on lihtsalt - see on meeles väärtus ptr 819 01:04:51,480 --> 01:04:54,170 [Student] Oh, see on eelmistel pointer? >> Jah. 820 01:04:54,170 --> 01:05:04,070 Nii et saame siis juurdekasvu ptr ise enne kui me siis vaba mida predptr on. 821 01:05:04,070 --> 01:05:09,130 Kuna me ei saa tasuta ptr ja siis helistada ptr = ptr kõrval, eks? 822 01:05:09,130 --> 01:05:11,260 See oleks halb. 823 01:05:11,260 --> 01:05:20,940 Nii et vaatame, tagasi see kutt. 824 01:05:20,940 --> 01:05:23,900 >> Teine halb asi nimekirjad on, et arvestades massiivi 825 01:05:23,900 --> 01:05:26,520 me lihtsalt peame kõik elemendid ise laotud üksteise kõrval, 826 01:05:26,520 --> 01:05:29,050 siin on meil ka sisse see pointer. 827 01:05:29,050 --> 01:05:34,060 Nii et seal on veel tüki mälu, et meil oli kasutada 828 01:05:34,060 --> 01:05:37,910 iga element, et me hoidmine meie nimekirjas. 829 01:05:37,910 --> 01:05:40,030 Me saame paindlikkust, kuid see on oma hind. 830 01:05:40,030 --> 01:05:42,230 Kaasas seda ajakulu, 831 01:05:42,230 --> 01:05:45,270 ja see on kaasas selle mälu hind liiga. 832 01:05:45,270 --> 01:05:47,800 Aeg selles mõttes, et meil on nüüd läbima iga element massiivi 833 01:05:47,800 --> 01:05:58,670 leida ükshaaval punktid 10, või et oleks olnud punktidele 10 massiivis. 834 01:05:58,670 --> 01:06:01,230 >> Lihtsalt tõesti kiiresti, kui me skeem välja need nimekirjad, 835 01:06:01,230 --> 01:06:05,980 tavaliselt me ​​kinni hoida eesotsas nimekirja või esimese osuti nimekirja 836 01:06:05,980 --> 01:06:08,010 ja pange tähele, et see on tõsi pointer. 837 01:06:08,010 --> 01:06:11,100 See on lihtsalt 4 baiti. See ei ole tegelik sõlme ise. 838 01:06:11,100 --> 01:06:17,120 Nii et näete, et ei ole int väärtust see ei Järgmise osuti ta. 839 01:06:17,120 --> 01:06:20,790 See on sõna otseses mõttes lihtsalt kursor. 840 01:06:20,790 --> 01:06:23,550 See saab viidata midagi, mis on tegelik tipp struktuure. 841 01:06:23,550 --> 01:06:28,480 [Sam] osuti nimetatakse sõlm? >> See on - ei. See on viit midagi tüüpi sõlme. 842 01:06:28,480 --> 01:06:32,540 See on viit tipu struct. >> Oh, okei. 843 01:06:32,540 --> 01:06:36,870 Diagramm vasakul, kood paremal. 844 01:06:36,870 --> 01:06:42,190 Me ei sea see null, mis on hea viis alustamiseks. 845 01:06:42,190 --> 01:06:49,850 Kui diagramm, sa kas kirjutada see null või paned läbiv joon seda nii. 846 01:06:49,850 --> 01:06:53,910 >> Üks lihtsamaid viise töö nimekirjad, 847 01:06:53,910 --> 01:06:57,430 ja me palume teil nii nimedele ja lisab näha erinevusi nende kahe vahel, 848 01:06:57,430 --> 01:07:01,320 kuid prepending on kindlasti lihtsam. 849 01:07:01,320 --> 01:07:05,790 Kui ülaloleva on see, kus sa - kui nimedele (7) 850 01:07:05,790 --> 01:07:10,050 te lähete ja luua sõlme struct 851 01:07:10,050 --> 01:07:13,870 ja seate esimene käsk, sest nüüd, sest me faili nimele see, 852 01:07:13,870 --> 01:07:17,240 see saab olema alguses nimekirja. 853 01:07:17,240 --> 01:07:22,540 Kui me nimedele (3), mis loob teise sõlme, kuid nüüd 3 tuleb enne 7.. 854 01:07:22,540 --> 01:07:31,130 Nii et me sisuliselt surudes asju peale meie nimekirjas. 855 01:07:31,130 --> 01:07:34,720 Nüüd te näete, et nimedele, mõnikord inimesed kutsuvad seda lükkama, 856 01:07:34,720 --> 01:07:39,600 sest sa oled surudes uus element peale oma nimekirja. 857 01:07:39,600 --> 01:07:43,270 Samuti on lihtne kustutada esiotsas nimekirja. 858 01:07:43,270 --> 01:07:45,650 Nii et inimesed sageli helistada, et pop. 859 01:07:45,650 --> 01:07:52,200 Ja sel moel saab jäljendada virna kasutades seotud loetelu. 860 01:07:52,200 --> 01:07:57,880 Ups. Vabandust, nüüd oleme sattumist append. Nii et siin me faili nimele (7), nüüd nimedele (3). 861 01:07:57,880 --> 01:08:02,600 Kui me faili nimele midagi muud peale selle nimekirja, kui me faili nimele (4) 862 01:08:02,600 --> 01:08:06,540 siis oleks meil 4 ja siis 3 ja siis 7. 863 01:08:06,540 --> 01:08:14,220 Siis võiksime pop ja eemaldage 4, eemaldada 3, eemaldage 7. 864 01:08:14,220 --> 01:08:16,500 Sageli intuitiivsem viis mõelda on see, mille lisab. 865 01:08:16,500 --> 01:08:20,310 Nii et ma olen diagrammina, mis see näeks välja koos lisada siin. 866 01:08:20,310 --> 01:08:23,380 Siin lisatud (7) ei paista teistsugune 867 01:08:23,380 --> 01:08:25,160 sest seal on ainult üks element nimekirjas. 868 01:08:25,160 --> 01:08:28,620 Ja kleebi (3) annab selle aasta lõpuks. 869 01:08:28,620 --> 01:08:31,020 Võib-olla näete kohe trikk append 870 01:08:31,020 --> 01:08:36,600 on see, et kuna me ainult teada, kus alguses nimekiri on 871 01:08:36,600 --> 01:08:39,450 lisama loendisse sa pead kõndima kogu aeg nimekirja 872 01:08:39,450 --> 01:08:46,500 saada lõpuks lõpetada, siis ehitada oma sõlme ja kõmakas kõike ette. 873 01:08:46,500 --> 01:08:50,590 Ühenda kõik asjad üles. 874 01:08:50,590 --> 01:08:55,170 Nii nimedele, kui me lihtsalt rebis selle kaudu väga kiiresti, 875 01:08:55,170 --> 01:08:58,170 kui sa ülaloleva loendile, see on üsna lihtne. 876 01:08:58,170 --> 01:09:02,960 >> Sa teed endale sõlme, millega kaasnevad teatav dünaamiline mälu eraldamisel. 877 01:09:02,960 --> 01:09:09,830 Nii et siin me teeme sõlme struct kasutades malloc. 878 01:09:09,830 --> 01:09:14,710 Nii malloc me kasutame, sest et ma kõrvale mälu meiega hiljem 879 01:09:14,710 --> 01:09:20,350 sest me ei taha seda - me tahame seda mälu püsida kaua aega. 880 01:09:20,350 --> 01:09:25,350 Ja me saame kursor ruumi mälu, et me lihtsalt eraldatud. 881 01:09:25,350 --> 01:09:29,260 Me kasutame suurus sõlm, me ei liida valdkondades. 882 01:09:29,260 --> 01:09:31,899 Me ei käsitsi genereerida baitide arv, 883 01:09:31,899 --> 01:09:39,750 selle asemel me kasutame sizeof nii et me teame, me saada vajalikul arvul baiti. 884 01:09:39,750 --> 01:09:43,660 Oleme veendunud, et testida, et meie malloc kõne õnnestunud. 885 01:09:43,660 --> 01:09:47,939 See on midagi, mida sa teha tahad üldiselt. 886 01:09:47,939 --> 01:09:52,590 On kaasaegsete masinatega, otsa mälu ei ole midagi, mida on lihtne 887 01:09:52,590 --> 01:09:56,610 kui sa eraldades tonni kraami ja tegemist tohutu nimekiri, 888 01:09:56,610 --> 01:10:02,220 aga kui sa oled hoone värk, ütleme, nagu iPhone või Android, 889 01:10:02,220 --> 01:10:05,230 sul on piiratud mälu ressursse, eriti kui sa teed midagi intensiivne. 890 01:10:05,230 --> 01:10:08,300 Seega on hea, et saada tegelikkuseks. 891 01:10:08,300 --> 01:10:10,510 >> Pange tähele, et olen kasutanud paar erinevat funktsiooni siin 892 01:10:10,510 --> 01:10:12,880 et sa oled näinud, et on mingi uus. 893 01:10:12,880 --> 01:10:15,870 Nii fprintf on nagu printf 894 01:10:15,870 --> 01:10:21,320 välja arvatud selle esimene argument on oja, millele soovite printida. 895 01:10:21,320 --> 01:10:23,900 Sellisel juhul me tahame printida standard veastring 896 01:10:23,900 --> 01:10:29,410 mis erineb standard outstream. 897 01:10:29,410 --> 01:10:31,620 Vaikimisi näitab üles samas kohas. 898 01:10:31,620 --> 01:10:34,600 Samuti prindib terminali, kuid saab - 899 01:10:34,600 --> 01:10:38,790 nende käskude kasutamise juttu, ümbersuunamise tehnika 900 01:10:38,790 --> 01:10:42,290 oli juttu ka Tommy video probleem komplekt 4, saate suunata see 901 01:10:42,290 --> 01:10:47,900 eri valdkondades; lõpeta, siinsamas, väljapääsud oma programmi. 902 01:10:47,900 --> 01:10:50,440 See on sisuliselt nagu naasnud peamine, 903 01:10:50,440 --> 01:10:53,600 välja arvatud me kasutame väljumise sest siin tagasi ei tee midagi. 904 01:10:53,600 --> 01:10:57,140 Me ei ole peamine, et tagasi ei välju programmist nagu me tahame. 905 01:10:57,140 --> 01:11:03,020 Nii et me kasutame väljumise funktsioon ja annab veakoodi. 906 01:11:03,020 --> 01:11:11,890 Siis siin seadsime uut sõlme väärtuse väljal, selle i valdkonnas olema võrdne i, ja siis me traat see üles. 907 01:11:11,890 --> 01:11:15,530 Oleme loonud uue sõlme järgmisel kursori punkti esimese, 908 01:11:15,530 --> 01:11:20,460 ja siis esimene on nüüd punkt uue sõlme. 909 01:11:20,460 --> 01:11:25,120 Need esimesed read koodi, me tegelikult hoone uus sõlm. 910 01:11:25,120 --> 01:11:27,280 Mitte kaks viimast rida selle funktsiooni, kuid esimene neist. 911 01:11:27,280 --> 01:11:30,290 Võite tegelikult tõmmake sisse funktsiooni sisse abistaja funktsiooni. 912 01:11:30,290 --> 01:11:32,560 See on sageli, mida ma teen on, ma välja tõmmata funktsioon, 913 01:11:32,560 --> 01:11:36,040 Ma kutsun seda midagi ehitada sõlm, 914 01:11:36,040 --> 01:11:40,410 ja mis hoiab nimedele funktsiooni üsna väike, see on lihtsalt 3 rida siis. 915 01:11:40,410 --> 01:11:48,710 Ma helistada minu build sõlme funktsiooni, ja siis ma traat kõik üles. 916 01:11:48,710 --> 01:11:51,970 >> Lõplik asi, mida ma tahan teile näidata, 917 01:11:51,970 --> 01:11:54,030 ja ma lasen sul append ja kõik, mis oma, 918 01:11:54,030 --> 01:11:57,500 on see, kuidas itereerime nimekirja. 919 01:11:57,500 --> 01:12:00,780 Seal on hunnik erinevaid viise itereerime nimekirja. 920 01:12:00,780 --> 01:12:03,140 Sellisel juhul me leiame pikkuse nimekirja. 921 01:12:03,140 --> 01:12:06,570 Nii alustame pikkus = 0. 922 01:12:06,570 --> 01:12:11,580 See on väga sarnane kirjalikult strlen jaoks string. 923 01:12:11,580 --> 01:12:17,780 See on see, mida ma tahan teile näidata, seda silmus siin. 924 01:12:17,780 --> 01:12:23,530 Tundub suht funky, see pole tavaline int i = 0, i 01:12:34,920 Selle asemel on see initsialiseerimisel meie muutuja n olevat loetelu alguses. 926 01:12:34,920 --> 01:12:40,620 Ja siis kui meie iteraatori muutuja ei ole null, me jätkame. 927 01:12:40,620 --> 01:12:46,340 Seda seetõttu, kokkuleppeliselt, lõpuks meie nimekirjas on null. 928 01:12:46,340 --> 01:12:48,770 Ja siis juurdekasvu, mitte tehes + +, 929 01:12:48,770 --> 01:12:57,010 seotud nimekirja ekvivalent + + on n = n-> next. 930 01:12:57,010 --> 01:13:00,410 >> Ma lasen teil täita lüngad siin, sest me aeg otsas. 931 01:13:00,410 --> 01:13:09,300 Kuid pidage seda meeles, kui te töötate oma spellr psets. 932 01:13:09,300 --> 01:13:11,650 Seotud nimekirjades, kui sa rakendamisel hash tabelit, 933 01:13:11,650 --> 01:13:14,010 Kindlasti tulevad väga mugav. 934 01:13:14,010 --> 01:13:21,780 Ja millel see idioom jaoks silmuspõletamise üle asjad teevad elu palju lihtsamaks, loodetavasti. 935 01:13:21,780 --> 01:13:25,910 Kõik küsimused, kiiresti? 936 01:13:25,910 --> 01:13:28,920 [Sam] Kas sa saata täidetud SLL ja ks? 937 01:13:28,920 --> 01:13:38,360 [Hardison] Jah. Ma saadan välja lõpule slaidid ja lõpetatud SLL korstnat ja queue.cs. 938 01:13:38,360 --> 01:13:41,360 [CS50.TV]