1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Nedēļa 6] 2 00:00:02,000 --> 00:00:04,000 [David J. Malan] [Hārvarda] 3 00:00:04,000 --> 00:00:08,000 [Tas ir CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:12,000 >> Tas ir CS50, un tas ir sākums 6 nedēļām, 5 00:00:12,000 --> 00:00:16,000 tāpēc jaunu instrumentu pāris tagad ir pieejami, lai jūs varētu izmantot, 6 00:00:16,000 --> 00:00:19,000 no kuriem pirmais ir sauc CS50 stils. 7 00:00:19,000 --> 00:00:22,000 Izredzes ir, ja jūs esat līdzīgi man, vai kādu no mācību līdzcilvēkiem, 8 00:00:22,000 --> 00:00:26,000 Jūs, iespējams, redzējuši programmu, kuras stils izskatās mazliet kaut kas līdzīgs šim. 9 00:00:26,000 --> 00:00:30,000 Varbūt jūs sākat griešana daži stūri vēlu naktī, vai jūs ar to nodarboties vēlāk, 10 00:00:30,000 --> 00:00:32,000 un tad TF vai CA nāk pār darba laikā. 11 00:00:32,000 --> 00:00:34,000 Tad tas ir grūti, lai mēs lasītu. 12 00:00:34,000 --> 00:00:38,000 Nu, šis kods ir sintaktiski pareizs, un tas būs apkopot, un tas patiešām darbojas. 13 00:00:38,000 --> 00:00:40,000 Bet tas noteikti nav 5 par stilu. 14 00:00:40,000 --> 00:00:45,000 >> Bet tagad, ja mēs iedziļināties šajā direktorijā šeit- 15 00:00:45,000 --> 00:00:48,000 un ievēroju, ka man ir conditions2.c- 16 00:00:48,000 --> 00:00:55,000 un es palaist šo jauno komandu, style50, par šo failu conditions2.c, Enter, 17 00:00:55,000 --> 00:00:57,000 pamanīt, ka tas mani informēja, ka tā ir bijusi stilizēti. 18 00:00:57,000 --> 00:01:00,000 Gedit pamanīja, ka fails ir mainīts uz diska, 19 00:01:00,000 --> 00:01:08,000 un ja es noklikšķiniet papildināšanas, visas jūsu problēmas ir tagad automatizēta. 20 00:01:08,000 --> 00:01:15,000 [Aplausi] 21 00:01:15,000 --> 00:01:17,000 Tas ir viens no lietām, ko mēs darīja šīs nedēļas nogalē. 22 00:01:17,000 --> 00:01:20,000 Apzināties, ka tas ir nepilnīgs, jo tur ir daži kodu 23 00:01:20,000 --> 00:01:23,000 ka tas vienkārši nebūs spējīgs Stylize perfekti, 24 00:01:23,000 --> 00:01:26,000 bet saprotu, tas ir tagad līdzeklis, jūs varat izmantot 25 00:01:26,000 --> 00:01:33,000 ja tikai uzkopt kādu no vairāk errantly novietot cirtaini lencēm un tamlīdzīgi. 26 00:01:33,000 --> 00:01:36,000 >> Bet vairāk pārliecinoši tagad ir CS50 Pārbaudīt. 27 00:01:36,000 --> 00:01:39,000 Ar CS50 pārbaudi, jūs faktiski var veikt tādas pašas pareizības pārbaudes 28 00:01:39,000 --> 00:01:42,000 uz savu kodu, ka mācību stipendiātiem spēj. 29 00:01:42,000 --> 00:01:44,000 Tas ir komandrindas lietderība, kas nāk tagad ierīces 30 00:01:44,000 --> 00:01:46,000 tiklīdz jūs darīt update50 kā vienu 31 00:01:46,000 --> 00:01:49,000 4 PSET specifikācijas, un jūs to izmantot galvenokārt kā šis. 32 00:01:49,000 --> 00:01:51,000 Jūs palaist komandu check50. 33 00:01:51,000 --> 00:01:56,000 Tad jūs iet uz komandrindas argumentu, vai vispār sauc par slēdzi vai karogs. 34 00:01:56,000 --> 00:01:58,000 Vispār, lietas, kas ir defises sauc slēdzis 35 00:01:58,000 --> 00:02:02,000 līdz komandrindas programmu, tā c nosaka 36 00:02:02,000 --> 00:02:04,000 pārbaudēs, kuras vēlaties, lai palaistu. 37 00:02:04,000 --> 00:02:07,000 >> Testi, kas jūs vēlaties, lai palaistu identificē unikāli ar šīs virknes, 38 00:02:07,000 --> 00:02:10,000 2012/pset4/resize. 39 00:02:10,000 --> 00:02:13,000 Citiem vārdiem sakot, tas ir tikai patvaļīgi, bet unikāls virkne 40 00:02:13,000 --> 00:02:18,000 ka mēs izmantojam, lai unikāli identificētu PSET 4 ir pareizības pārbaudes. 41 00:02:18,000 --> 00:02:21,000 Un tad jūs norādāt kosmosa atdalītas failu sarakstu, kas jūs vēlaties, lai augšupielādēt 42 00:02:21,000 --> 00:02:24,000 līdz CS50 Check analīzei. 43 00:02:24,000 --> 00:02:29,000 Piemēram, ja es iet manā risinājums šeit resize.c- 44 00:02:29,000 --> 00:02:31,000 ļaujiet man atvērt lielāku termināla logs- 45 00:02:31,000 --> 00:02:42,000 un es iet uz priekšu un palaist teiksim check50-c 2012/pset4/resize, 46 00:02:42,000 --> 00:02:46,000 un tad es iet uz priekšu un norādīt nosaukumus failiem, 47 00:02:46,000 --> 00:02:49,000 resize.c, un pēc tam hit Enter, tas saspiež, 48 00:02:49,000 --> 00:02:53,000 tā attēli, tā pārbauda, ​​un es vienkārši nav viss ķekars testu. 49 00:02:53,000 --> 00:02:59,000 In sarkanu viens pie augšējā kreisajā saka, ka resize.c un bmp pastāv. 50 00:02:59,000 --> 00:03:01,000 Tas bija tests. Tas bija jautājums, mēs jautāja. 51 00:03:01,000 --> 00:03:04,000 Un tas ir neapmierināti, jo atbilde bija nepatiesa. 52 00:03:04,000 --> 00:03:08,000 Balts teksts zem tā saka paredzams bmp.h pastāvēt, un tas ir vienkārši mana vaina. 53 00:03:08,000 --> 00:03:11,000 Es aizmirsu augšupielādēt to, tāpēc man ir nepieciešams augšupielādēt abus failus, 54 00:03:11,000 --> 00:03:14,000 resize.c un bmp.h. 55 00:03:14,000 --> 00:03:17,000 Bet tagad paziņojums visiem citiem testiem ir dzeltenā krāsā, jo tie ir ne veikt, 56 00:03:17,000 --> 00:03:21,000 un tā smiley sejas ir vertikāls, jo viņš nav ne apmierināts, ne skumji, 57 00:03:21,000 --> 00:03:25,000 bet mums ir labot šo jautājumu ar sarkanu pirms tie pārējie pārbaudes darbosies. 58 00:03:25,000 --> 00:03:27,000 >> Ļaujiet man noteikt šo. 59 00:03:27,000 --> 00:03:30,000 Ļaujiet man tālināt un atkārto to, šoreiz ar bmp.h arī 60 00:03:30,000 --> 00:03:34,000 uz komandrindas, Enter, un tagad, ja viss noritēs labi, 61 00:03:34,000 --> 00:03:38,000 tas notiek, lai pārbaudītu un pēc tam atgriezties rezultāts-turiet savu elpu- 62 00:03:38,000 --> 00:03:42,000 viss zaļš, kas nozīmē, es esmu dara patiešām labi uz 4 PSET līdz šim. 63 00:03:42,000 --> 00:03:44,000 Jūs varat redzēt un secināt no aprakstošu tekstu šeit 64 00:03:44,000 --> 00:03:47,000 ko tieši tas ir mūsu pārbaudīta. 65 00:03:47,000 --> 00:03:49,000 Mēs vispirms testē vēl failus pastāv? 66 00:03:49,000 --> 00:03:51,000 Mēs tad testē dara resize.c apkopotu? 67 00:03:51,000 --> 00:03:58,000 Tad mēs testē tas nav mainītu 1x1 pikseļu BMP, ja n, mainīt izmērus faktors, ir 1. 68 00:03:58,000 --> 00:04:01,000 Tagad, ja jums nav ne jausmas, ko n ir, jūs, kad jūs pikējošais 4 PSET, 69 00:04:01,000 --> 00:04:04,000 bet tas vienkārši ir veselība pārbaudītu, lai pārliecinātos, ka tu esi ne izmērus 70 00:04:04,000 --> 00:04:08,000 attēls vispār, ja izmainīsiet koeficients ir 1. 71 00:04:08,000 --> 00:04:14,000 Ja turpretim, tas maina 1x1 pikseļu uz 1x1 pikseļu BMP uz 2x2 pareizi 72 00:04:14,000 --> 00:04:19,000 ja n ir 2, tad līdzīgi, raktuves veido atbilstoši. 73 00:04:19,000 --> 00:04:22,000 >> Īsāk sakot, tas ir domāts, lai, vienu, veikt šķērsošanas pirkstiem 74 00:04:22,000 --> 00:04:25,000 no vienādojumu labi, pirms jūs iesniedzat savu PSET. 75 00:04:25,000 --> 00:04:28,000 Jūs zināt, tieši to, ko jūsu TF drīz zināt 76 00:04:28,000 --> 00:04:30,000 kad jūs iet par to iesniedzot kādu no šīm problemātiskajām komplekti, 77 00:04:30,000 --> 00:04:34,000 un arī pedagoģiskās motivācija tiešām ir likt 78 00:04:34,000 --> 00:04:37,000 iespēja sev priekšā tā, ka tad, kad jūs zināt a priori 79 00:04:37,000 --> 00:04:39,000 ka tur ir bugs jūsu kodu un testi, kas netiek nodotas, 80 00:04:39,000 --> 00:04:43,000 Jūs varat nodot efektīvāku laika uzreiz atrisināt šīs problēmas 81 00:04:43,000 --> 00:04:45,000 nevis zaudēt punktus, saņemt atgriezenisko saiti no jūsu TF, 82 00:04:45,000 --> 00:04:48,000 un tad iet, "Ahh," kā es ir izpētījuši, ka no. 83 00:04:48,000 --> 00:04:50,000 Tagad vismaz tur instruments, lai palīdzētu jums atrast to. 84 00:04:50,000 --> 00:04:52,000 Tas nav gatavojas norādīt, kur kļūda ir, bet tas jums pateiks 85 00:04:52,000 --> 00:04:54,000 kāda ir simptomātiska no tā. 86 00:04:54,000 --> 00:04:57,000 >> Tagad saprotam testi ne vienmēr ir pilnīgs. 87 00:04:57,000 --> 00:04:59,000 Tieši tāpēc, ka jums ekrāns pilns ar zaļo smiley sejas 88 00:04:59,000 --> 00:05:02,000 nenozīmē, ka jūsu kods ir ideāls, bet tas nozīmē, 89 00:05:02,000 --> 00:05:06,000 ka tā ir nodota dažus testus, ko nosaka spec. 90 00:05:06,000 --> 00:05:08,000 Dažreiz mēs ne atbrīvot pārbaudes. 91 00:05:08,000 --> 00:05:10,000 Piemēram, detektīvromāns, viens no 4 PSET aspektiem, 92 00:05:10,000 --> 00:05:15,000 ir sava veida žēl, ja mēs jums 93 00:05:15,000 --> 00:05:18,000 atbilde par to, kas tas ir, un tur ir vairāki veidi, kā atklāt numurs 94 00:05:18,000 --> 00:05:21,000 , kas personai ir šajā sarkanā troksni. 95 00:05:21,000 --> 00:05:24,000 Spec vienmēr jānorāda nākotnē uz 5 PSET vēlāk 96 00:05:24,000 --> 00:05:26,000 ko pārbauda pastāv jums. 97 00:05:26,000 --> 00:05:28,000 Jūs pamanīsiet, ka tas ir balts URL apakšā. 98 00:05:28,000 --> 00:05:30,000 Tagad, tas ir tikai diagnostikas izeja. 99 00:05:30,000 --> 00:05:33,000 Ja jūs apmeklēt šo URL, jūs saņemsiet visu ķekars traks, mistisks ziņojumus 100 00:05:33,000 --> 00:05:36,000 ka jūs esat laipni aicināti apskatīt, bet tas ir galvenokārt par darbiniekiem 101 00:05:36,000 --> 00:05:41,000 lai mēs varētu diagnosticēt un atkļūdot bugs check50 pati. 102 00:05:41,000 --> 00:05:46,000 >> Bez ADO, pieņemsim pāriet uz kur mēs left off. 103 00:05:46,000 --> 00:05:48,000 CS50 bibliotēka mēs ņēmām par pašsaprotamu dažām nedēļām, 104 00:05:48,000 --> 00:05:52,000 bet tad pagājušajā nedēļā, mēs sākām atplēšot vienu no tā slāņiem. 105 00:05:52,000 --> 00:05:55,000 Mēs sākām liekot malā virkni labu ko vietā? 106 00:05:55,000 --> 00:05:57,000 [Studenti] Char. 107 00:05:57,000 --> 00:05:59,000 Char *, kas ir char * visu šo laiku, 108 00:05:59,000 --> 00:06:03,000 bet tagad mums nav izlikties, ka tā ir faktiskais datu tips virkne. 109 00:06:03,000 --> 00:06:06,000 Drīzāk, tas ir bijis sinonīms veidu par char *, 110 00:06:06,000 --> 00:06:09,000 un virkne ir rakstzīmju secība, 111 00:06:09,000 --> 00:06:14,000 tad kāpēc tas ir jēga, lai pārstāvētu stīgas kā char * s? 112 00:06:14,000 --> 00:06:20,000 Kāda char * pārstāvēt kontekstā šī jēdziena virknes? 113 00:06:20,000 --> 00:06:23,000 Yeah >> [Studentu]. Pirmā zīme. 114 00:06:23,000 --> 00:06:25,000 Labi, pirmais raksturs, bet ne gluži pirmā zīme. 115 00:06:25,000 --> 00:06:27,000 Tas ir-[Studentiem] Adrese. 116 00:06:27,000 --> 00:06:29,000 Labi, adrese pirmās rakstzīmes. 117 00:06:29,000 --> 00:06:33,000 Viss, kas ir nepieciešams, lai pārstāvētu virknes datora atmiņā 118 00:06:33,000 --> 00:06:36,000 ir tikai unikāla adrese jau pirmajā baitā. 119 00:06:36,000 --> 00:06:38,000 Jums pat nav jāzina, cik ilgi tas ir 120 00:06:38,000 --> 00:06:42,000 jo kā jūs varat izdomāt dinamiski? 121 00:06:42,000 --> 00:06:44,000 [Studentu] rindas garums. 122 00:06:44,000 --> 00:06:48,000 Jūs varat zvanīt rindas garums, lieliska, bet kā virknes garums darbu? 123 00:06:48,000 --> 00:06:50,000 Ko tas dod? Yeah. 124 00:06:50,000 --> 00:06:52,000 [Studentu] Turpini, līdz jūs saņemsiet null raksturs. 125 00:06:52,000 --> 00:06:54,000 Jā, tieši tā, tas tikai vairākkārt uzsvērts ar par cilpu, kamēr cilpa, 126 00:06:54,000 --> 00:06:57,000 neatkarīgi no * līdz beigām, un beigas ir pārstāvēta 127 00:06:57,000 --> 00:07:01,000 ar 0 \, tā saukto Nul raksturs, Nul, 128 00:07:01,000 --> 00:07:05,000 nedrīkst jaukt ar null, kas ir rādītājs, 129 00:07:05,000 --> 00:07:07,000 kas nāks klajā sarunā šodien atkal. 130 00:07:07,000 --> 00:07:11,000 >> Mēs nomizoti atpakaļ slāni GetInt, un tad mēs ņēmām apskatīt GetString, 131 00:07:11,000 --> 00:07:14,000 un atcerēties, ka abas šīs funkcijas, vai tiešām, 132 00:07:14,000 --> 00:07:18,000 GetString, bija izmantojot noteiktu funkciju 133 00:07:18,000 --> 00:07:21,000 faktiski parsēt, kas ir, lasīt un analizēt, lietotāja ievadi. 134 00:07:21,000 --> 00:07:25,000 Un kāda bija, ka jaunā funkcija? 135 00:07:25,000 --> 00:07:27,000 Scanf vai sscanf. Tas tiešām nāk daži dažādas garšas. 136 00:07:27,000 --> 00:07:31,000 Ir scanf, tur sscanf, tur fscanf. 137 00:07:31,000 --> 00:07:35,000 Tagad, lai gan, pieņemsim koncentrēties uz viens visvairāk viegli ilustrētas, 138 00:07:35,000 --> 00:07:38,000 un ļaujiet man iet uz priekšu un atvērt arī ierīcē 139 00:07:38,000 --> 00:07:41,000 failu, piemēram, tas, scanf1.c. 140 00:07:41,000 --> 00:07:43,000 Tas ir super vienkārša programma, 141 00:07:43,000 --> 00:07:46,000 bet tas, ko mēs nekad darīts 142 00:07:46,000 --> 00:07:48,000 bez palīdzības no CS50 bibliotēkas. 143 00:07:48,000 --> 00:07:51,000 Tas izpaužas int no lietotāja. Kā tas strādā? 144 00:07:51,000 --> 00:07:53,000 Nu, saskaņā 16 tur, 145 00:07:53,000 --> 00:07:56,000 pamanīt, ka mēs atzīt int sauc x, un šajā brīdī stāsts, 146 00:07:56,000 --> 00:07:58,000 kāda ir vērtība x? 147 00:07:58,000 --> 00:08:00,000 [Dzirdams studentu reaģēšanas] 148 00:08:00,000 --> 00:08:02,000 [Deivids M.] Tiesības, kas zina, kādu atkritumu vērtība potenciāli, tāpēc 17, mēs vienkārši pateikt lietotājam 149 00:08:02,000 --> 00:08:06,000 man numuru, lūdzu, un soli 18 ir, ja tā kļūst interesanti. 150 00:08:06,000 --> 00:08:11,000 Scanf šķiet aizņemties ideju no printf jo tas izmanto šos formāta kodus pēdiņās. 151 00:08:11,000 --> 00:08:13,000 % D protams decimāls skaitlis. 152 00:08:13,000 --> 00:08:21,000 Bet kāpēc man iet uz & X nevis tikai X? 153 00:08:21,000 --> 00:08:24,000 Bijusī ir pareizs. Yeah. 154 00:08:24,000 --> 00:08:26,000 [Dzirdams studentu reaģēšanas] 155 00:08:26,000 --> 00:08:31,000 Tieši tā, ja mērķis šīs programmas, piemēram, funkciju GetInt pati, 156 00:08:31,000 --> 00:08:34,000 ir iegūt int no lietotāja es varētu iet funkcijas 157 00:08:34,000 --> 00:08:38,000 visi mainīgie es gribu, bet, ja man nav nodot tos ar atsauci 158 00:08:38,000 --> 00:08:41,000 vai adreses, vai pēc rādītājs, visi sinonīms šodienas vajadzībām, 159 00:08:41,000 --> 00:08:46,000 tad šī funkcija nav iespējas mainīt saturu šo mainīgo. 160 00:08:46,000 --> 00:08:49,000 Tas iet uz kopiju tāpat kā buggy versija mijmaiņas 161 00:08:49,000 --> 00:08:51,000 ka mēs esam runājuši par pāris reizes tagad. 162 00:08:51,000 --> 00:08:54,000 >> Bet tā vietā, darot & x, es esmu burtiski iet, ko? 163 00:08:54,000 --> 00:08:57,000 [Studentu] adresi. >> Adresi x. 164 00:08:57,000 --> 00:09:01,000 Tas ir tāpat kā zīmēšanas karti par funkciju sauc scanf un šeit saka, 165 00:09:01,000 --> 00:09:04,000 šie ir virzienos uz rieciens atmiņas ar datoru 166 00:09:04,000 --> 00:09:07,000 ka jūs varat iet uzglabāt dažas skaitlim collas 167 00:09:07,000 --> 00:09:10,000 Lai sscanf šim darīt 168 00:09:10,000 --> 00:09:13,000 ko uzņēmējs, kas gabals sintakse tas notiek, lai būtu izmantot 169 00:09:13,000 --> 00:09:19,000 lai gan mēs nevaram redzēt, jo kāds cits rakstīja šo funkciju? 170 00:09:19,000 --> 00:09:21,000 Citiem vārdiem sakot - kas tas ir? 171 00:09:21,000 --> 00:09:23,000 [Studentu] X lasīt. 172 00:09:23,000 --> 00:09:27,000 Tur būs daži lasījumā, bet tikai attiecībā uz x šeit. 173 00:09:27,000 --> 00:09:30,000 Ja scanf tiek nodots adresi x, 174 00:09:30,000 --> 00:09:35,000 sintaktiski, ko operators ir pienākums pastāv kaut kur 175 00:09:35,000 --> 00:09:38,000 iekšpusē scanf īstenošanas lai scanf 176 00:09:38,000 --> 00:09:42,000 faktiski var uzrakstīt numurs 2 uz šo adresi? 177 00:09:42,000 --> 00:09:44,000 Jā, tā *. 178 00:09:44,000 --> 00:09:47,000 Atgādināt, ka * ir mūsu dereference operators, kas būtībā nozīmē iet tur. 179 00:09:47,000 --> 00:09:50,000 >> Kad esat nodota adresi, kā tas ir šajā gadījumā, 180 00:09:50,000 --> 00:09:53,000 scanf ir iespējams, ja mēs tiešām izskatījās apmēram tā pirmkodu- 181 00:09:53,000 --> 00:09:59,000 dara * X vai ekvivalents tiešām iet uz šo adresi un nodot dažas vērtības tur. 182 00:09:59,000 --> 00:10:02,000 Tagad, kā par to, kā scanf izpaužas ievadi no tastatūras, 183 00:10:02,000 --> 00:10:04,000 mēs vicināt savas rokas, kas uz šodienu. 184 00:10:04,000 --> 00:10:07,000 Tikai pieņemt, ka operētājsistēma ļauj sscanf runāt 185 00:10:07,000 --> 00:10:11,000 lietotāja tastatūra, bet šajā brīdī tagad 19 līnija, 186 00:10:11,000 --> 00:10:14,000 kad mēs vienkārši izdrukāt X, tas, šķiet, ir gadījums 187 00:10:14,000 --> 00:10:17,000 ka scanf ir likts int jo x. 188 00:10:17,000 --> 00:10:19,000 Tas ir tieši tā, kā scanf darbojas, un atcerēties pagājušajā nedēļā 189 00:10:19,000 --> 00:10:25,000 tas ir tieši tā, kā GetString un GetInt un citi tās ģimenes funkcijas 190 00:10:25,000 --> 00:10:28,000 visbeidzot strādā, lai gan ar nelielu dispersijas piemēram sscanf, 191 00:10:28,000 --> 00:10:31,000 kas nozīmē skenēt virkni nevis tastatūru. 192 00:10:31,000 --> 00:10:33,000 Bet pieņemsim to apskatīt nelielu dispersijas šo. 193 00:10:33,000 --> 00:10:37,000 Jo scanf2, es tiešām ieskrūvē augšu. 194 00:10:37,000 --> 00:10:42,000 Kas ir nepareizi un es ņemšu paslēpt komentāru, kas izskaidro tik daudz- 195 00:10:42,000 --> 00:10:47,000 Kas ir nepareizi ar šo programmu, 2 versiju? 196 00:10:47,000 --> 00:10:55,000 Esi kā tehniskās iespējas šajā laikā. 197 00:10:55,000 --> 00:10:57,000 Tas izskatās diezgan labi. 198 00:10:57,000 --> 00:11:03,000 Tas ir labi izrobota, bet- 199 00:11:03,000 --> 00:11:07,000 labi, kā par pieņemsim plūmju to uz leju, lai īsāku jautājumiem? 200 00:11:07,000 --> 00:11:17,000 Līnija 16. Kas līnija 16 darām precīzi, bet tehniskā angļu valodā? 201 00:11:17,000 --> 00:11:20,000 Getting mazliet neveikli. Jā, Maikls. 202 00:11:20,000 --> 00:11:25,000 [Studentu] Tas norāda uz pirmo burtu virknes. 203 00:11:25,000 --> 00:11:27,000 >> Labi, tuvu. Ļaujiet man iekniebt, ka mazliet. 204 00:11:27,000 --> 00:11:33,000 Norādot uz pirmo burtu virknes, jūs deklarējat mainīga sauc buferis 205 00:11:33,000 --> 00:11:36,000 kas norāda uz pirmo adresi virknes, 206 00:11:36,000 --> 00:11:39,000 vai drīzāk, kas norādīs tieši uz char. 207 00:11:39,000 --> 00:11:42,000 Pamanāt tas nav reāli norādot visur, jo tur nav piešķires operators. 208 00:11:42,000 --> 00:11:46,000 Nav vienādības zīmi, lai visi mēs darām, ir sadalīt mainīgo saukto bufera. 209 00:11:46,000 --> 00:11:49,000 Tas notiek, ir 32 biti, jo tas ir rādītājs, 210 00:11:49,000 --> 00:11:52,000 un saturu bufera domājams beidzot 211 00:11:52,000 --> 00:11:57,000 ietvers adresi palija, bet tagad, ko tas buferis ir? 212 00:11:57,000 --> 00:11:59,000 Tikai daži viltus, kas zina, kādu atkritumu vērtība, 213 00:11:59,000 --> 00:12:03,000 jo mēs esam nav skaidri inicializēts, tāpēc mums nevajadzētu uzņemties neko. 214 00:12:03,000 --> 00:12:06,000 Labi, tāpēc tagad līnija 17-Kāda Line 17 darīt? 215 00:12:06,000 --> 00:12:08,000 Varbūt, ka būs silts šo augšu. 216 00:12:08,000 --> 00:12:10,000 Tas drukā virkni, labi? 217 00:12:10,000 --> 00:12:12,000 Tas drukā String lūdzu. 218 00:12:12,000 --> 00:12:15,000 >> Līnija 18 ir sava veida pazīstami tagad, ka mēs tikko redzējām nesakritību šis 219 00:12:15,000 --> 00:12:18,000 bet ar citu formātu kodu, tāpēc 18 līnija, 220 00:12:18,000 --> 00:12:23,000 mēs esam spēcīgi scanf šeit ir adrese rieciens atmiņas. 221 00:12:23,000 --> 00:12:27,000 Es gribu, lai jūs gredzens virkni, kas nozīmēja% s, 222 00:12:27,000 --> 00:12:32,000 bet problēma ir tā, ka mēs neesam darījuši pāris lietas šeit. 223 00:12:32,000 --> 00:12:35,000 Kas ir viena no problēmām? 224 00:12:35,000 --> 00:12:38,000 [Studentu] Tas mēģina dereference ar null rādītāju. 225 00:12:38,000 --> 00:12:41,000 Labi, Null vai vienkārši citādi zināma norādes. 226 00:12:41,000 --> 00:12:45,000 Tu esi nododot scanf adresi, bet jūs vienkārši teica pirms brīža 227 00:12:45,000 --> 00:12:49,000 ka adrese ir daži atkritumu vērtība, jo mums nav reāli piešķirtu to neko, 228 00:12:49,000 --> 00:12:53,000 un lai jūs esat stāsta scanf faktiski iet nodot virkni šeit, 229 00:12:53,000 --> 00:12:56,000 bet mēs nezinām, kur šeit vēl ir, 230 00:12:56,000 --> 00:12:59,000 tāpēc mēs esam faktiski nav piešķirti atmiņas buferī. 231 00:12:59,000 --> 00:13:03,000 Turklāt, ko jūs arī nav pat stāstīt scanf? 232 00:13:03,000 --> 00:13:06,000 Pieņemu, ka tas bija rieciens atmiņas, un tas bija nevis atkritumu vērtību, 233 00:13:06,000 --> 00:13:09,000 bet jūs joprojām nav stāsta scanf kaut ko svarīgu. 234 00:13:09,000 --> 00:13:12,000 [Studentu] Ja tas tiešām ir, zīme &. 235 00:13:12,000 --> 00:13:15,000 Zīme &, tāpēc šajā gadījumā, tas ir labi. 236 00:13:15,000 --> 00:13:18,000 Jo buferis jau deklarēta kā rādītājs 237 00:13:18,000 --> 00:13:22,000 ar * gabals sintaksi, mums nav nepieciešams izmantot aizvieto & zīmes 238 00:13:22,000 --> 00:13:25,000 jo tas jau adresi, bet es domāju, ka es dzirdēju to šeit. 239 00:13:25,000 --> 00:13:27,000 [Studentu] Cik liela tā ir? 240 00:13:27,000 --> 00:13:29,000 Labi, mēs esam ne stāsta scanf cik liels tas buferis ir, 241 00:13:29,000 --> 00:13:32,000 kas nozīmē, ka pat tad, ja buferis ir rādītājs, 242 00:13:32,000 --> 00:13:35,000 mēs esam sakot scanf, nodot virkni šeit, 243 00:13:35,000 --> 00:13:38,000 bet šeit varētu būt 2 baiti, tas varētu būt 10 baiti, tas varētu būt megabaitu. 244 00:13:38,000 --> 00:13:41,000 Scanf nav ne jausmas, un tāpēc tas ir rieciens atmiņas 245 00:13:41,000 --> 00:13:43,000 iespējams, tas nav virkne vēl. 246 00:13:43,000 --> 00:13:48,000 Tas ir tikai virkne, kad jūs uzrakstīt rakstzīmes un \ 0 uz šo gabalu no atmiņas. 247 00:13:48,000 --> 00:13:51,000 Tagad tas ir tikai daži rieciens atmiņas. 248 00:13:51,000 --> 00:13:55,000 Scanf nevar zināt, kad apstāties rakstot uz šo adresi. 249 00:13:55,000 --> 00:13:59,000 >> Ja jūs atceraties dažus piemērus pagātnē, kad es nejauši drukāti uz klaviatūras 250 00:13:59,000 --> 00:14:03,000 mēģinot pārplūdes bufera, un mēs runājām piektdien par tieši to. 251 00:14:03,000 --> 00:14:07,000 Ja pretinieks kaut injects savā programmā daudz lielāka vārdu 252 00:14:07,000 --> 00:14:10,000 vai teikumu vai frāzi, tad jums bija gaidījis jūs varat pārsniegts 253 00:14:10,000 --> 00:14:13,000 rieciens atmiņas, kas var būt negatīvas sekas, 254 00:14:13,000 --> 00:14:15,000 piemēram, ņemot visā pati programma. 255 00:14:15,000 --> 00:14:17,000 Mums ir nepieciešams noteikt šo kaut kā. 256 00:14:17,000 --> 00:14:20,000 Ļaujiet man attālināt un iedziļināties šīs programmas 3 versiju. 257 00:14:20,000 --> 00:14:22,000 Tas ir nedaudz labāk. 258 00:14:22,000 --> 00:14:24,000 Šajā versijā, pamanīt atšķirību. 259 00:14:24,000 --> 00:14:27,000 16 līniju, es esmu atkal atzīta par mainīgo sauc buferi, 260 00:14:27,000 --> 00:14:29,000 bet kas tas ir tagad? 261 00:14:29,000 --> 00:14:33,000 Tas masīvs 16 simboli. 262 00:14:33,000 --> 00:14:36,000 Tas ir labi, jo tas nozīmē, ka es tagad var pateikt scanf 263 00:14:36,000 --> 00:14:39,000 šeit ir faktiskais rieciens atmiņas. 264 00:14:39,000 --> 00:14:42,000 Jūs varat gandrīz iedomāties masīvu kā norādes tagad, 265 00:14:42,000 --> 00:14:44,000 pat ja viņi nav faktiski līdzvērtīgs. 266 00:14:44,000 --> 00:14:47,000 Tie būs uzvesties atšķirīgi dažādos kontekstos. 267 00:14:47,000 --> 00:14:50,000 Bet tas noteikti lieta, ka buferis ir atsauces 268 00:14:50,000 --> 00:14:53,000 16 blakusesošiem chars jo tas ko masīvs 269 00:14:53,000 --> 00:14:55,000 un ir bijis dažas nedēļas tagad. 270 00:14:55,000 --> 00:14:59,000 >> Lūk, es saku scanf šeit rieciens atmiņas. 271 00:14:59,000 --> 00:15:01,000 Šoreiz tas ir faktiski rieciens atmiņas, 272 00:15:01,000 --> 00:15:07,000 bet kāpēc šī programma joprojām ir apgūstams? 273 00:15:07,000 --> 00:15:11,000 Kas ir nepareizi vēl? 274 00:15:11,000 --> 00:15:14,000 Man teica man 16 baiti, bet- 275 00:15:14,000 --> 00:15:16,000 [Studentu] Ko darīt, ja tās ierakstīt vairāk kā 16? 276 00:15:16,000 --> 00:15:20,000 Tieši tā, kas notiks, ja lietotājs veidiem 17 rakstzīmēm vai 1700 rakstzīmēm? 277 00:15:20,000 --> 00:15:23,000 Faktiski, pieņemsim redzēt, ja mēs nevaram ceļojums pa šo kļūdu tagad. 278 00:15:23,000 --> 00:15:25,000 Tas ir labāk, bet ne perfekta. 279 00:15:25,000 --> 00:15:28,000 Ļaujiet man iet uz priekšu un palaist padarīt scanf3 apkopot šo programmu. 280 00:15:28,000 --> 00:15:34,000 Ļaujiet man palaist scanf3, Stīgu lūdzu: sveiki, un mēs, šķiet, ir labi. 281 00:15:34,000 --> 00:15:37,000 Ļaujiet man mēģināt nedaudz garāks, sveiki tur. 282 00:15:37,000 --> 00:15:42,000 Labi, pieņemsim do Sveiki Kā jums šodien, Enter. 283 00:15:42,000 --> 00:15:54,000 Getting veida laimīgs šeit, teiksim Sveiki Kā jums. 284 00:15:54,000 --> 00:15:56,000 Damn it. 285 00:15:56,000 --> 00:16:03,000 Labi, tāpēc mēs saņēmām laimīgs. Redzēsim, vai mēs nevaram noteikt šo. 286 00:16:03,000 --> 00:16:06,000 Nē, tas nav gatavojas let me kopēt. 287 00:16:06,000 --> 00:16:09,000 Mēģināsim to atkal. 288 00:16:09,000 --> 00:16:12,000 Visas tiesības, stāvēt. 289 00:16:12,000 --> 00:16:20,000 Redzēsim, cik ilgi es varētu izlikties, lai koncentrētos, kamēr vēl to izdarīt. 290 00:16:20,000 --> 00:16:23,000 Damn it. Tas ir diezgan piemērots, faktiski. 291 00:16:23,000 --> 00:16:26,000 Tur mums iet. 292 00:16:26,000 --> 00:16:30,000 Punkts veikts. 293 00:16:30,000 --> 00:16:34,000 >> Tas, neērts gan tā arī ir, tas ir arī viens no lielu neskaidrību avotu 294 00:16:34,000 --> 00:16:38,000 Rakstot programmas, kas ir bugs, jo tie izpaužas 295 00:16:38,000 --> 00:16:40,000 tikai vienu reizi, bet dažreiz. 296 00:16:40,000 --> 00:16:43,000 Realitāte ir tāda, ka pat tad, ja jūsu kods ir pilnībā bojāta, 297 00:16:43,000 --> 00:16:46,000 tas var būt tikai pilnīgi sadalīti reizi brītiņa 298 00:16:46,000 --> 00:16:49,000 jo dažreiz, būtībā kas notiek ir operētājsistēma ir piešķirti 299 00:16:49,000 --> 00:16:52,000 nedaudz vairāk atmiņas, nekā jums tiešām ir nepieciešams, lai kāda iemesla dēļ, 300 00:16:52,000 --> 00:16:57,000 un tāpēc neviens cits izmanto atmiņu uzreiz pēc Jūsu rieciens 16 zīmēm, 301 00:16:57,000 --> 00:17:01,000 Tātad, ja jūs iet uz 17, 18, 19, neatkarīgi, tas nav tik liels darījumu. 302 00:17:01,000 --> 00:17:04,000 Tagad, dators, pat ja tas nav crash šajā brīdī, 303 00:17:04,000 --> 00:17:09,000 varētu beidzot izmantot baitu numurs 17 vai 18 vai 19 kaut kas cits, 304 00:17:09,000 --> 00:17:14,000 kurā brīdī savus datus, ka jūs likts tur, lai gan pārmērīgi garš, 305 00:17:14,000 --> 00:17:18,000 gatavojas saņemt pārrakstīti potenciāli ar kādu citu funkciju. 306 00:17:18,000 --> 00:17:21,000 Tas nav obligāti gatavojas paliek neskartas, 307 00:17:21,000 --> 00:17:23,000 bet tas ne vienmēr izraisa seg vaina. 308 00:17:23,000 --> 00:17:26,000 Bet šajā gadījumā, es beidzot sniedz pietiekami rakstzīmes 309 00:17:26,000 --> 00:17:29,000 ka es būtībā pārsniedza manu segments atmiņu, un BAM, 310 00:17:29,000 --> 00:17:33,000 operētājsistēma teica: "Atvainojiet, tas nav labi, segmentācija vaina." 311 00:17:33,000 --> 00:17:38,000 >> Un redzēsim tagad, ja kāds paliek šeit manā direktorijā- 312 00:17:38,000 --> 00:17:40,000 pamanīt, ka man ir šī failu šeit, kodols. 313 00:17:40,000 --> 00:17:42,000 Ievērojiet, ka šī ir atkal sauc kodols dump. 314 00:17:42,000 --> 00:17:46,000 Tas ir būtībā fails, kas satur saturu jūsu programmas atmiņā 315 00:17:46,000 --> 00:17:48,000 tajā vietā, kurā tas avarēja, 316 00:17:48,000 --> 00:17:51,000 un tikai mēģināt nedaudz piemēru šeit ļaujiet man iet šeit 317 00:17:51,000 --> 00:17:57,000 un palaist gdb uz scanf3 un tad norādiet trešo argumentu sauc kodols, 318 00:17:57,000 --> 00:18:01,000 un pamanīt šeit, ka ja es sarakstu kodu, 319 00:18:01,000 --> 00:18:06,000 mēs varēsim kā parasti ar gdb sākt staigāt pa šo programmu, 320 00:18:06,000 --> 00:18:10,000 un es varētu palaist to un, tiklīdz es hit-kā ar soli komandu gdb- 321 00:18:10,000 --> 00:18:13,000 tiklīdz es hit potenciāli buggy līniju pēc rakstīt milzīgs virknē, 322 00:18:13,000 --> 00:18:16,000 Es varētu faktiski noteikt to šeit. 323 00:18:16,000 --> 00:18:19,000 Vairāk par šo, lai gan, sadaļā ziņā galveno izgāztuves 324 00:18:19,000 --> 00:18:22,000 un patīk, lai jūs faktiski var pabāzt ap iekšpusē no galvenajiem izgāztuves 325 00:18:22,000 --> 00:18:27,000 un redzēt uz ko līnija programmai neizdevās tevi. 326 00:18:27,000 --> 00:18:32,000 Visus jautājumus, tad par norādes un adreses? 327 00:18:32,000 --> 00:18:36,000 Jo šodien mēs esam gatavojas sākt veikt par pašsaprotamu, ka šīs lietas pastāv 328 00:18:36,000 --> 00:18:40,000 un mēs zinām, tieši to, ko viņi ir. 329 00:18:40,000 --> 00:18:42,000 Jā. 330 00:18:42,000 --> 00:18:46,000 >> [Studentu] kā ir jums nav, lai darītu aizvieto & zīmes blakus daļēji 331 00:18:46,000 --> 00:18:48,000 Labs jautājums. 332 00:18:48,000 --> 00:18:51,000 Kā tas nākas, man nebija likt aizvieto & zīmes blakus uz rakstzīmju masīva kā es darīju agrāk 333 00:18:51,000 --> 00:18:53,000 lielākā daļa no mūsu piemēriem? 334 00:18:53,000 --> 00:18:55,000 Īsā atbilde ir masīvi ir mazliet īpašs. 335 00:18:55,000 --> 00:18:59,000 Jūs varat gandrīz domāt bufera kā faktiski to adresi, 336 00:18:59,000 --> 00:19:03,000 un tas tikai tā notiek, ir gadījums, ka kvadrātiekava notācija 337 00:19:03,000 --> 00:19:06,000 ir ērtība, lai mēs varētu iet uz 0 grupā, kronšteinu 1, 338 00:19:06,000 --> 00:19:10,000 kronšteins 2, bez izmantot * notācija. 339 00:19:10,000 --> 00:19:13,000 Tas ir mazliet no balta meliem, jo ​​masīvi un norādes 340 00:19:13,000 --> 00:19:17,000 ir, faktiski, nedaudz atšķiras, bet tās bieži vien var, bet ne vienmēr var izmantot pārmaiņus. 341 00:19:17,000 --> 00:19:21,000 Īsāk sakot, kad funkcija gaida rādītāju uz rieciens atmiņas, 342 00:19:21,000 --> 00:19:24,000 Jūs varat vai nu nodot to adresi, kas tika atgriezto malloc, 343 00:19:24,000 --> 00:19:29,000 un mēs redzēsim malloc atkal pirms ilgi, vai arī jūs varat nodot to nosaukumu masīva. 344 00:19:29,000 --> 00:19:32,000 Jums nav jādara aizvieto & zīmes ar masīviem, jo ​​tie jau ir 345 00:19:32,000 --> 00:19:34,000 būtībā patīk adreses. 346 00:19:34,000 --> 00:19:36,000 Tas ir viens izņēmums. 347 00:19:36,000 --> 00:19:39,000 Kvadrātiekavās padara to īpašu. 348 00:19:39,000 --> 00:19:41,000 >> Vai jūs varēsiet ievietot aizvieto & zīmes blakus uz bufera? 349 00:19:41,000 --> 00:19:43,000 Ne šajā gadījumā. 350 00:19:43,000 --> 00:19:46,000 Tas nav darbs, jo, atkal, šī stūra lietas 351 00:19:46,000 --> 00:19:49,000 kur masīvi nav gluži reāli adreses. 352 00:19:49,000 --> 00:19:54,000 Bet mēs varbūt nāk atpakaļ, ka pēc neilga laika ar citiem piemēriem. 353 00:19:54,000 --> 00:19:56,000 Mēģināsim atrisināt problēmu šeit. 354 00:19:56,000 --> 00:20:00,000 Mums ir datu struktūra, kas mēs esam, izmantojot kādu laiku sauc par masīvu. 355 00:20:00,000 --> 00:20:02,000 Sakāms, ka tas, ko mēs tikko bija. 356 00:20:02,000 --> 00:20:04,000 Bet masīvi ir daži upsides un downsides. 357 00:20:04,000 --> 00:20:06,000 Masīvi ir jauki, kāpēc? 358 00:20:06,000 --> 00:20:11,000 Kas ir viena lieta, kas jums patīk, cik jums patīk masīvi-par masīvu? 359 00:20:11,000 --> 00:20:13,000 Kas ir ērts par viņiem? Kas pārliecinoši? 360 00:20:13,000 --> 00:20:18,000 Kāpēc mēs ieviest tos pirmajā vietā? 361 00:20:18,000 --> 00:20:20,000 Yeah. 362 00:20:20,000 --> 00:20:27,000 [Studentu] Tās var uzglabāt daudz datu, un jums nav, lai izmantotu visu lieta. 363 00:20:27,000 --> 00:20:29,000 Jūs varat izmantot sadaļu. 364 00:20:29,000 --> 00:20:32,000 Labi, ar masīvu jūs varat uzglabāt daudz datu, 365 00:20:32,000 --> 00:20:35,000 un jums nav obligāti izmantot visu tā, lai jūs varētu overallocate, 366 00:20:35,000 --> 00:20:39,000 kas varētu būt izdevīgi, ja jums nav iepriekš zināt, cik daudz par kaut ko gaidīt. 367 00:20:39,000 --> 00:20:41,000 >> GetString ir perfekts piemērs. 368 00:20:41,000 --> 00:20:44,000 GetString, raksta mums, nav ne jausmas, cik daudz simb gaidīt, 369 00:20:44,000 --> 00:20:48,000 tāpēc, ka mēs varam sadalīt gabalos pieguļošajā atmiņas ir laba. 370 00:20:48,000 --> 00:20:51,000 Masīvi arī atrisināt problēmu mēs redzējām pāris nedēļas atpakaļ tagad 371 00:20:51,000 --> 00:20:54,000 ja jūsu kods sāk pāriet uz kaut ko ļoti slikti izstrādāts. 372 00:20:54,000 --> 00:20:57,000 Atgādināt, ka es izveidojis students struktūru sauc Dāvids, 373 00:20:57,000 --> 00:21:00,000 un tad tas bija patiesībā alternatīva, lai gan, 374 00:21:00,000 --> 00:21:04,000 , kam mainīga sauc vārdu un citu mainīgo sauc, es domāju, māja, 375 00:21:04,000 --> 00:21:08,000 un citu mainīgo sauc ID jo šajā stāstā es gribēja ieviest kaut ko citu 376 00:21:08,000 --> 00:21:11,000 patīk Rob programmā, tā tad es nolēmu gaidīt minūti, 377 00:21:11,000 --> 00:21:13,000 Man vajag, lai pārdēvētu šīs mainīgos. 378 00:21:13,000 --> 00:21:16,000 Sauksim raktuves NAME1, ID1, house1. 379 00:21:16,000 --> 00:21:20,000 Sauksim Rob s name2, house2, ID2. 380 00:21:20,000 --> 00:21:22,000 Bet tad pagaidiet minūti, ko par Tommy? 381 00:21:22,000 --> 00:21:24,000 Tad mums bija vēl trīs mainīgos. 382 00:21:24,000 --> 00:21:27,000 Mēs iepazīstināja kāds cits, četras reizes pa mainīgajiem. 383 00:21:27,000 --> 00:21:30,000 Pasaule sāka iegūt netīrs ļoti ātri, 384 00:21:30,000 --> 00:21:33,000 tāpēc mēs ieviesām structs, un kas ir pārliecinoši par struct? 385 00:21:33,000 --> 00:21:39,000 Kāda C struct jums darīt? 386 00:21:39,000 --> 00:21:42,000 Tas ir patiešām neērti šodien. 387 00:21:42,000 --> 00:21:44,000 Kas >> [dzirdams studentu reaģēšanas]? 388 00:21:44,000 --> 00:21:47,000 Jā, īpaši, typedef ļauj izveidot jaunu datu tipu, 389 00:21:47,000 --> 00:21:51,000 un struktūrai, struktūrai atslēgvārds, ļauj rezumēju 390 00:21:51,000 --> 00:21:54,000 konceptuāli saistītos tiesību datu kopā 391 00:21:54,000 --> 00:21:56,000 un pēc tam viņiem piezvanīt kaut kā students. 392 00:21:56,000 --> 00:21:58,000 >> Tas bija labi, jo tagad mēs varam modelēt 393 00:21:58,000 --> 00:22:03,000 daudz veida konceptuāli atbilstīgs jēdziens skolēns ir mainīgs 394 00:22:03,000 --> 00:22:07,000 nevis patvaļīgi kam viens virknes, viens ID, un tā tālāk. 395 00:22:07,000 --> 00:22:10,000 Masīvi ir jauki, jo tie ļauj mums sākt sakopšanu mūsu kodu. 396 00:22:10,000 --> 00:22:13,000 Bet kāda ir negatīvie tagad no masīva? 397 00:22:13,000 --> 00:22:15,000 Ko jūs varat to darīt? Yeah. 398 00:22:15,000 --> 00:22:17,000 [Studentu] Jums ir jāzina, cik liela tā ir. 399 00:22:17,000 --> 00:22:19,000 Jums ir jāzina, cik liela tā ir, tāpēc tas ir sava veida sāpes. 400 00:22:19,000 --> 00:22:21,000 Tiem no jums ar iepriekšēju programmēšanas pieredzes zinu, ka ir daudz valodu, 401 00:22:21,000 --> 00:22:24,000 piemēram, Java, jūs varat lūgt rieciens atmiņas, kas īpaši masīvs, 402 00:22:24,000 --> 00:22:28,000 cik liels ir jums, ar garumu, īpašuma, tā sakot, un tas ir tiešām ērti. 403 00:22:28,000 --> 00:22:32,000 C, jūs nevarat pat zvanīt strlen par vispārēju masīvs 404 00:22:32,000 --> 00:22:35,000 jo strlen, jo vārds nozīmē, ir tikai stīgas, 405 00:22:35,000 --> 00:22:39,000 un jūs varat izrēķināt garumu virknes, jo par šo cilvēku konvencijas 406 00:22:39,000 --> 00:22:43,000 Kam \ 0, bet masīvs, vairāk vispārīgi, ir tikai rieciens atmiņas. 407 00:22:43,000 --> 00:22:46,000 Ja tas ir masīvs Ints, tur nav būs kādu īpašo raksturu 408 00:22:46,000 --> 00:22:48,000 gada beigās tevi gaida. 409 00:22:48,000 --> 00:22:50,000 Jums ir jāatceras garumu masīva. 410 00:22:50,000 --> 00:22:54,000 Vēl no masīva negatīvie audzēti tās galvu GetString sevi. 411 00:22:54,000 --> 00:22:59,000 Kas vēl no masīva negatīvie? 412 00:22:59,000 --> 00:23:01,000 Sir, tikai tu un es šodien. 413 00:23:01,000 --> 00:23:04,000 [Dzirdams studentu reaģēšanas] >> Tas, ko? 414 00:23:04,000 --> 00:23:06,000 Tas ir atzīts par kaudze. 415 00:23:06,000 --> 00:23:09,000 Labi, paziņoja uz skursteņa. Kāpēc ne jums patīk, ka? 416 00:23:09,000 --> 00:23:13,000 [Studentu], jo tā izpaužas atkārtoti. 417 00:23:13,000 --> 00:23:15,000 Tas izpaužas atkārtoti. 418 00:23:15,000 --> 00:23:18,000 Labi, ja jums izmantot masīvu piešķirt atmiņu, 419 00:23:18,000 --> 00:23:21,000 Jūs nevarat, piemēram, atgriezties, jo tas ir uz skursteņa. 420 00:23:21,000 --> 00:23:23,000 Labi, ka ir trūkums. 421 00:23:23,000 --> 00:23:25,000 Un kā par vienu citu ar masīvu? 422 00:23:25,000 --> 00:23:28,000 Kad jūs piešķirt to, jūs esat veida ieskrūvē, ja jums nepieciešams vairāk vietas 423 00:23:28,000 --> 00:23:30,000 nekā masīvs ir. 424 00:23:30,000 --> 00:23:34,000 >> Tad mēs ieviesām, atceros, malloc, kas deva mums iespēju dinamiski piešķirt atmiņu. 425 00:23:34,000 --> 00:23:37,000 Bet ja mēs centāmies citu pasauli pavisam? 426 00:23:37,000 --> 00:23:40,000 Ko darīt, ja mēs vēlējāmies, lai atrisinātu pāris šīm problēmām 427 00:23:40,000 --> 00:23:45,000 tāpēc mēs tā vietā, mana spalva ir aizmiguši šeit- 428 00:23:45,000 --> 00:23:51,000 Ko darīt, ja mēs tā vietā vēlējāmies būtībā radīt pasauli, kas vairs kā šī? 429 00:23:51,000 --> 00:23:56,000 Tas ir masīvs, un, protams, šāda veida pasliktinās, tiklīdz mēs hit beigām masīva, 430 00:23:56,000 --> 00:24:00,000 un es tagad vairs nav vietas citam skaitlim vai citu raksturu. 431 00:24:00,000 --> 00:24:03,000 Ko darīt, ja mēs veida preemptively saka labi, kāpēc nav mēs atpūsties 432 00:24:03,000 --> 00:24:07,000 Šī prasība, ka visiem šiem atmiņu gabalos būt saistītai atpakaļ atpakaļ, 433 00:24:07,000 --> 00:24:10,000 un kāpēc ne, ja man vajag int vai char, 434 00:24:10,000 --> 00:24:12,000 tikai dod man vietu kādā no tām? 435 00:24:12,000 --> 00:24:14,000 Un, kad man vajag otru, dod man citu vietu, 436 00:24:14,000 --> 00:24:16,000 un, kad man ir nepieciešams cits, dod man citu vietu. 437 00:24:16,000 --> 00:24:19,000 No kura priekšrocība ir tāda, ka, ja kāds cits 438 00:24:19,000 --> 00:24:21,000 ņem atmiņas nekā šeit, nav liels darījumu. 439 00:24:21,000 --> 00:24:25,000 Es ņemšu šo papildu rieciens atmiņas šeit un tad tas viens. 440 00:24:25,000 --> 00:24:28,000 >> Tagad, vienīgais loma šeit ir tas, ka šis gandrīz jūtas kā man ir 441 00:24:28,000 --> 00:24:30,000 viss ķekars dažādiem mainīgajiem. 442 00:24:30,000 --> 00:24:33,000 Tas jūtas kā piecu dažādu mainīgajiem potenciāli. 443 00:24:33,000 --> 00:24:36,000 Bet ja mēs nozagt ideju no stīgām 444 00:24:36,000 --> 00:24:41,000 kad mēs kaut kā sasaistīt šīs lietas kopā konceptuāli, un kas notiks, ja es to izdarīja? 445 00:24:41,000 --> 00:24:44,000 Tas ir mans ļoti slikti sagatavots bulta. 446 00:24:44,000 --> 00:24:46,000 Bet pieņemsim, ka katrs no šiem atmiņas gabalos 447 00:24:46,000 --> 00:24:52,000 norādīja uz otru, un tas puisis, kurš nav brālis viņa tiesības, 448 00:24:52,000 --> 00:24:54,000 nav šādu bultiņas. 449 00:24:54,000 --> 00:24:56,000 Tas ir fakts, ko sauc saistīts saraksts. 450 00:24:56,000 --> 00:25:00,000 Tas ir jauns datu struktūra, kas ļauj mums piešķirt rieciens atmiņas, 451 00:25:00,000 --> 00:25:03,000 tad otru, tad otru, tad vēl, jebkurā laikā mēs vēlamies 452 00:25:03,000 --> 00:25:07,000 programmas laikā, un mēs atceramies, ka viņi visi kaut kā saistīta 453 00:25:07,000 --> 00:25:11,000 ko burtiski Virknējuma tos kopā, un mēs to izdarījām, piktogrammām šeit ar bultiņu. 454 00:25:11,000 --> 00:25:15,000 Bet kods, kāda būtu mehānisms, caur kuru jūs varētu kaut savienot, 455 00:25:15,000 --> 00:25:20,000 gandrīz kā Scratch, viens gabals uz citu gabalu? 456 00:25:20,000 --> 00:25:22,000 Mēs varētu izmantot rādītāju, labi? 457 00:25:22,000 --> 00:25:25,000 Jo tiešām bulta, kas notiek no kreisās augšējās laukumā, 458 00:25:25,000 --> 00:25:31,000 tas puisis šeit uz šo vienu, varētu būt iekšā šajā laukumā 459 00:25:31,000 --> 00:25:34,000 ne tikai daži Ints, ne tikai daži palija, bet ko tad, ja es tiešām piešķirti 460 00:25:34,000 --> 00:25:37,000 nedaudz papildu vietu tā, ka tagad, 461 00:25:37,000 --> 00:25:41,000 katru manu gabalu no atmiņas, lai gan tas maksās mani, 462 00:25:41,000 --> 00:25:45,000 Tagad izskatās nedaudz vairāk taisnstūra kur viens no atmiņas gabalos 463 00:25:45,000 --> 00:25:47,000 tiek izmantots vairākos, tāpat skaita 1, 464 00:25:47,000 --> 00:25:50,000 un tad, ja tas puisis saglabā numuru 2, 465 00:25:50,000 --> 00:25:52,000 šo citu rieciens atmiņas tiek izmantots bulta, 466 00:25:52,000 --> 00:25:54,000 vai vairāk konkrētāk, rādītājs. 467 00:25:54,000 --> 00:25:59,000 Un pieņemsim, ka es glabāt numuru 3 vairāk nekā šeit, bet es izmantoju šo norādīt uz šo puisis, 468 00:25:59,000 --> 00:26:02,000 un tagad tas puisis, pieņemsim es tikai gribu trīs šādas gabalos atmiņas. 469 00:26:02,000 --> 00:26:05,000 Es izdarīt līnija caur ka, norādot null. 470 00:26:05,000 --> 00:26:07,000 Nav papildu raksturs. 471 00:26:07,000 --> 00:26:10,000 >> Patiešām, tas ir, kā mēs varam iet par īstenojot 472 00:26:10,000 --> 00:26:12,000 kaut kas sauc saistīts saraksts. 473 00:26:12,000 --> 00:26:18,000 Saistīts saraksts ir jauna datu struktūra, un tā ir pakāpiens uz 474 00:26:18,000 --> 00:26:21,000 daudz mīļotājs datu struktūras, kas sāk risināt problēmas 475 00:26:21,000 --> 00:26:23,000 gar Facebook-veida problēmas līnijas un Google tipa problēmas 476 00:26:23,000 --> 00:26:26,000 kur jums ir milzīgs datu kopas, un tas vairs griež to 477 00:26:26,000 --> 00:26:29,000 uzglabāt visu contiguously un izmantot kaut ko līdzīgu lineāru meklēšanā 478 00:26:29,000 --> 00:26:31,000 vai pat kaut kā bināro meklēšanu. 479 00:26:31,000 --> 00:26:33,000 Jūs vēlaties vēl labāk darbotos reizes. 480 00:26:33,000 --> 00:26:37,000 Patiesībā, viens no Svētā Grails mēs runājam par vēlāk šajā nedēļā vai nākamās 481 00:26:37,000 --> 00:26:41,000 ir algoritms, kura darbības laiks ir nemainīgs. 482 00:26:41,000 --> 00:26:44,000 Citiem vārdiem sakot, tas vienmēr ir tāds pats laiku neatkarīgi 483 00:26:44,000 --> 00:26:47,000 cik liels ieguldījums ir, un tas tiešām būtu pārliecinoši, 484 00:26:47,000 --> 00:26:49,000 pat vairāk nekā kaut logaritmiskā. 485 00:26:49,000 --> 00:26:51,000 Kas tas ir uz ekrāna šeit? 486 00:26:51,000 --> 00:26:55,000 Katrs no taisnstūru ir tieši tas, ko es tikko vērsa ar rokām. 487 00:26:55,000 --> 00:26:59,000 Bet lieta visu ceļu pa kreisi ir īpašs mainīgs. 488 00:26:59,000 --> 00:27:02,000 Tas būs viens rādītājs, jo viens gotcha 489 00:27:02,000 --> 00:27:04,000 ar saistītu sarakstu, jo šīs lietas sauc, 490 00:27:04,000 --> 00:27:09,000 ir tas, ka jums ir pakārt uz vienu galu saistīts saraksts. 491 00:27:09,000 --> 00:27:13,000 >> Tāpat kā ar auklu, jums ir jāzina adresi pirmā char. 492 00:27:13,000 --> 00:27:15,000 Pats darījums saistītajiem sarakstiem. 493 00:27:15,000 --> 00:27:19,000 Jums ir jāzina adresi pirmo rieciens atmiņas 494 00:27:19,000 --> 00:27:25,000 jo no turienes, jūs varat sasniegt jebkuru citu. 495 00:27:25,000 --> 00:27:27,000 Negatīvie. 496 00:27:27,000 --> 00:27:30,000 Kādu cenu mēs maksāt par šo daudzpusību, kam dinamiski 497 00:27:30,000 --> 00:27:34,000 prāvs datu struktūra, kas, ja mēs kādreiz vajag vairāk atmiņas, labi, 498 00:27:34,000 --> 00:27:37,000 vienkārši piešķirt vēl vienu gabalu un izdarīt rādītāju no 499 00:27:37,000 --> 00:27:39,000 vecās uz jauno asti saraksta? 500 00:27:39,000 --> 00:27:41,000 Yeah. 501 00:27:41,000 --> 00:27:43,000 [Studentu] Tas aizņem apmēram divreiz tik daudz vietas. 502 00:27:43,000 --> 00:27:45,000 Tas aizņem divreiz vairāk vietas, tā ka noteikti negatīvie, un mēs esam redzējuši šo 503 00:27:45,000 --> 00:27:48,000 tradeoff pirms starp laiku un telpu un elastību 504 00:27:48,000 --> 00:27:51,000 kur līdz šim, mums nav 32 bitu par katru no šiem skaitļiem. 505 00:27:51,000 --> 00:27:57,000 Mums tiešām ir nepieciešams 64, 32, skaitu un 32 rādītāja. 506 00:27:57,000 --> 00:27:59,000 Bet hey, man ir 2 gigabaiti RAM. 507 00:27:59,000 --> 00:28:02,000 Pievienojot vēl 32 bitus šeit un šeit nevar teikt, ka liels ir galā. 508 00:28:02,000 --> 00:28:05,000 Bet lielu datu kopu, tas noteikti piebilst, līdz burtiski divreiz tik daudz. 509 00:28:05,000 --> 00:28:09,000 Kas cits negatīvie tagad, vai ko pilnmetrāžas mēs padoties, 510 00:28:09,000 --> 00:28:12,000 ja mēs pārstāvam sarakstus lietas ar saistītajā sarakstā, nevis masīvs? 511 00:28:12,000 --> 00:28:14,000 [Studentu] Jūs nevarat traversa to atpakaļ. 512 00:28:14,000 --> 00:28:16,000 Jūs nevarat traversa to atpakaļ, lai jūs esat veida ieskrūvē ja jūs ejot 513 00:28:16,000 --> 00:28:19,000 no kreisās uz labo, izmantojot par cilpu vai kamēr cilpa 514 00:28:19,000 --> 00:28:21,000 un tad tu saproti, "Ak, es gribu iet atpakaļ uz saraksta sākumā." 515 00:28:21,000 --> 00:28:26,000 Jūs nevarat, jo šīs norādes tikai aiziet no kreisās uz labo pusi, kā bultas norāda. 516 00:28:26,000 --> 00:28:29,000 >> Tagad jūs varētu atcerēties sākumu sarakstā ar citu mainīgo, 517 00:28:29,000 --> 00:28:31,000 bet tas sarežģītības paturēt prātā. 518 00:28:31,000 --> 00:28:35,000 Masīvs, cik tālu jūs dotos, jūs vienmēr varat darīt mīnus, mīnus, mīnus mīnus 519 00:28:35,000 --> 00:28:37,000 un doties atpakaļ, no kurienes jums nāca. 520 00:28:37,000 --> 00:28:40,000 Kas cits negatīvie šeit? Yeah. 521 00:28:40,000 --> 00:28:43,000 [Dzirdams students jautājums] 522 00:28:43,000 --> 00:28:47,000 Jūs varētu, lai jūs esat tiešām tikko piedāvāja datu struktūru sauc divkārt saistīts saraksts, 523 00:28:47,000 --> 00:28:50,000 un, protams, jūs varētu pievienot citu rādītāju uz katru no šiem taisnstūriem 524 00:28:50,000 --> 00:28:53,000 kas iet pretējā virzienā, otrādi no kuriem 525 00:28:53,000 --> 00:28:55,000 Tagad jūs varat traversa un atpakaļ, 526 00:28:55,000 --> 00:28:59,000 kas negatīvie tagad jūs izmantojat trīs reizes tik daudz atmiņas, kā mēs izmantot, lai 527 00:28:59,000 --> 00:29:04,000 un arī pievienojot sarežģītību ziņā kodu jums ir rakstīt, lai saņemtu to labi. 528 00:29:04,000 --> 00:29:08,000 Bet tie visi ir varbūt ļoti saprātīgas kompromisi, ja maiņa ir svarīgāka. 529 00:29:08,000 --> 00:29:10,000 Yeah. 530 00:29:10,000 --> 00:29:12,000 [Studentu] Jūs arī nevar būt 2D saistīts saraksts. 531 00:29:12,000 --> 00:29:16,000 Labi, jūs nevarat patiešām ir 2D saistīts saraksts. 532 00:29:16,000 --> 00:29:18,000 Jūs varētu. Tas ne tuvu nav tik viegli, kā masīvs. 533 00:29:18,000 --> 00:29:21,000 Piemēram masīvu, jūs atklātu kronšteinu, slēgta Bracket, atklātu Bracket, slēgta bracket, 534 00:29:21,000 --> 00:29:23,000 un jūs saņemsiet dažas 2-dimensiju struktūru. 535 00:29:23,000 --> 00:29:26,000 Jūs varētu īstenot 2-dimensiju saistīts saraksts 536 00:29:26,000 --> 00:29:29,000 ja jūs add-kā jūs ierosināts-1/3 rādītāju uz katru no šīm lietām, 537 00:29:29,000 --> 00:29:34,000 un, ja jūs domājat par citu sarakstu nāk pie jums 3D stils 538 00:29:34,000 --> 00:29:40,000 no ekrāna uz mums visiem, kas ir tikai vēl viens ķēdes kaut kāda. 539 00:29:40,000 --> 00:29:45,000 Mēs varētu darīt, bet tas nav tik vienkārši, kā rakstīt atklātu kronšteinu, kvadrātiekavas. Yeah. 540 00:29:45,000 --> 00:29:48,000 [Dzirdams students jautājums] 541 00:29:48,000 --> 00:29:50,000 Labi, tāpēc tas ir reāls futbolists. 542 00:29:50,000 --> 00:29:54,000 >> Šie algoritmi, ka mēs esam pined nekā, piemēram, ak, bināro meklēšanu, 543 00:29:54,000 --> 00:29:57,000 Jūs varat meklēt masīvs numurus uz kuģa 544 00:29:57,000 --> 00:30:01,000 vai telefona grāmatu tik daudz ātrāk, ja jūs izmantojat skaldi un valdi 545 00:30:01,000 --> 00:30:05,000 un bināro meklēšanas algoritmu, bet binārā meklēšana nepieciešami divi pieņēmumi. 546 00:30:05,000 --> 00:30:09,000 Viens, ka dati tika sakārtoti. 547 00:30:09,000 --> 00:30:11,000 Tagad mēs varam iespējams saglabāt šo sakārtoti, 548 00:30:11,000 --> 00:30:14,000 tāpēc varbūt tas nav bažas, bet binārā meklēt arī pieņemts 549 00:30:14,000 --> 00:30:18,000 ka jums bija brīva piekļuve numuru sarakstā, 550 00:30:18,000 --> 00:30:21,000 un masīvs ļauj jums ir brīva piekļuve, un pēc izlases piekļuvi, 551 00:30:21,000 --> 00:30:24,000 Es domāju, ja jūs esat dota masīvs, cik daudz laika tas tevi 552 00:30:24,000 --> 00:30:26,000 nokļūt līdz 0 kronšteinu? 553 00:30:26,000 --> 00:30:29,000 Viena operācija, jūs vienkārši izmantot [0] un tu esi tieši tur. 554 00:30:29,000 --> 00:30:33,000 Cik soļus tas veic, lai iegūtu 10 vietu? 555 00:30:33,000 --> 00:30:36,000 Viens solis, jūs vienkārši doties uz [10], un tu esi tur. 556 00:30:36,000 --> 00:30:40,000 Turpretī, kā Jūs saņemsiet uz 10 skaitlim, kas saistītā sarakstā? 557 00:30:40,000 --> 00:30:42,000 Jums ir jāsāk sākumā, jo jūs esat tikai atcerēties 558 00:30:42,000 --> 00:30:45,000 par saistītu saraksta sākums, tāpat kā virknē tiek atceras 559 00:30:45,000 --> 00:30:48,000 ar adresi savu pirmo char, un atrast, ka 10. int 560 00:30:48,000 --> 00:30:53,000 vai 10. raksturs virknē, jums ir meklēt visu nopelt lieta. 561 00:30:53,000 --> 00:30:55,000 >> Atgādināsim, ka mēs esam ne atrisināt visas mūsu problēmas. 562 00:30:55,000 --> 00:31:00,000 Mēs ieviest jaunas, bet tas tiešām atkarīgs no tā, ko jūs mēģināt, lai dizains. 563 00:31:00,000 --> 00:31:04,000 Runājot par īstenošanas, mēs varam aizņemties ideju no šī studentu struktūras. 564 00:31:04,000 --> 00:31:07,000 Sintakse ir ļoti līdzīga, izņemot tagad, ideja ir mazliet vairāk abstrakts 565 00:31:07,000 --> 00:31:09,000 kā māja un nosaukums un ID. 566 00:31:09,000 --> 00:31:13,000 Bet es ierosinu, ka mēs varētu būt datu struktūra C 567 00:31:13,000 --> 00:31:17,000 ka sauc mezglā, jo pēdējais vārds slaidā liecina, 568 00:31:17,000 --> 00:31:21,000 iekšpusē mezglā, un mezgls ir tikai vispārējs konteiners datorzinātnēs. 569 00:31:21,000 --> 00:31:25,000 Tas parasti sagatavots kā aplis vai kvadrātveida vai taisnstūra kā mēs esam darījuši. 570 00:31:25,000 --> 00:31:27,000 Un šajā datu struktūru, mums ir int, N, 571 00:31:27,000 --> 00:31:29,000 tā ka skaitlis es gribu saglabāt. 572 00:31:29,000 --> 00:31:36,000 Bet kas tas ir otrā rinda, struct mezglā * nākamais? 573 00:31:36,000 --> 00:31:40,000 Kāpēc tas ir pareizi, vai kāda loma šī lieta spēlē, 574 00:31:40,000 --> 00:31:42,000 pat ja tas ir mazliet mistisks pēc pirmā acu uzmetiena? 575 00:31:42,000 --> 00:31:44,000 Yeah. 576 00:31:44,000 --> 00:31:46,000 [Dzirdams studentu reaģēšanas] 577 00:31:46,000 --> 00:31:50,000 Tieši tā, tāpēc * veida laupījuma, ka tas ir rādītājs kaut kāda. 578 00:31:50,000 --> 00:31:53,000 Šīs rādītāja nosaukums ir patvaļīgi nākamais, 579 00:31:53,000 --> 00:32:00,000 bet mēs varētu būt sauc tā neko mēs vēlamies, bet ko šis rādītājs norāda uz? 580 00:32:00,000 --> 00:32:03,000 [Studentu] Vēl mezglā >> Tieši tā,. Tas norāda uz citu šādu mezglu. 581 00:32:03,000 --> 00:32:05,000 >> Tagad tas ir sava veida zinātkāri no C 582 00:32:05,000 --> 00:32:09,000 Atgādināt, ka C ir nolasīt ar kompilatoru augšas uz leju, no kreisās uz labo, 583 00:32:09,000 --> 00:32:13,000 kas nozīmē, ja-tas ir nedaudz atšķiras no tā, ko mēs darījām ar studentu. 584 00:32:13,000 --> 00:32:16,000 Kad mēs noteikti students, mēs faktiski nav laidis vārdu tur. 585 00:32:16,000 --> 00:32:18,000 Tas vienkārši teica typedef. 586 00:32:18,000 --> 00:32:20,000 Tad mums bija int id, String nosaukums, stīgu māja, 587 00:32:20,000 --> 00:32:23,000 un tad studente apakšā struct. 588 00:32:23,000 --> 00:32:26,000 Šī deklarācija ir nedaudz atšķirīgs, jo, 589 00:32:26,000 --> 00:32:28,000 atkal, C kompilators ir mazliet muļķīgi. 590 00:32:28,000 --> 00:32:30,000 Tas ir tikai gatavojas lasīt augšas uz apakšu, 591 00:32:30,000 --> 00:32:33,000 tādēļ, ja tas sasniedz 2 līnija šeit 592 00:32:33,000 --> 00:32:37,000 kur blakus ir deklarēta un tā redz, ak, šeit mainīgo sauc nākamo. 593 00:32:37,000 --> 00:32:39,000 Tas ir rādītājs, lai struct mezglā. 594 00:32:39,000 --> 00:32:42,000 Kompilators gatavojas saprast, kas ir struct mezglā? 595 00:32:42,000 --> 00:32:44,000 Es nekad neesmu dzirdējis par šo lietu pirms, 596 00:32:44,000 --> 00:32:47,000 jo vārds mezglu citādi nevarētu parādīties 597 00:32:47,000 --> 00:32:49,000 līdz apakšā, tāpēc tas ir atlaišana. 598 00:32:49,000 --> 00:32:53,000 Jums ir ko teikt struct mezglā šeit, kuru pēc tam var saīsināt vēlāk 599 00:32:53,000 --> 00:32:56,000 pateicoties typedef noteikti šeit, bet tas ir tāpēc, 600 00:32:56,000 --> 00:33:02,000 mēs atsaucoties struktūru pati iekšpusē struktūru. 601 00:33:02,000 --> 00:33:05,000 Tas ir viens gotcha tur. 602 00:33:05,000 --> 00:33:07,000 >> Dažas interesantas problēmas gatavojas rasties. 603 00:33:07,000 --> 00:33:09,000 Mēs esam ieguvuši sarakstu numurus. Kā mēs ievietot to? 604 00:33:09,000 --> 00:33:11,000 Kā mēs meklēt to? Kā mēs izdzēst no tā? 605 00:33:11,000 --> 00:33:13,000 Sevišķi tagad, ka mums ir pārvaldīt visus šos norādes. 606 00:33:13,000 --> 00:33:15,000 Tu doma norādes bija sava veida prāta saliekuma 607 00:33:15,000 --> 00:33:17,000 kad jums bija viens no tiem vienkārši mēģina lasīt int uz to. 608 00:33:17,000 --> 00:33:20,000 Tagad mums ir manipulēt visu sarakstu vērts. 609 00:33:20,000 --> 00:33:22,000 Kāpēc ne mēs mūsu 5 minūšu pārtraukumu šeit, un tad mēs panāktu 610 00:33:22,000 --> 00:33:34,000 daži pat uz skatuves ļaudīm darīt tieši to. 611 00:33:34,000 --> 00:33:36,000 >> C ir daudz jautrības, kad tas ir rīkojusies out. 612 00:33:36,000 --> 00:33:39,000 Kas būtu burtiski gribētu būt pirmais? 613 00:33:39,000 --> 00:33:41,000 Labi, nāk uz augšu. Tu esi pirmais. 614 00:33:41,000 --> 00:33:44,000 Kurš gribētu būt 9? Labi, 9. 615 00:33:44,000 --> 00:33:46,000 Kā par 9? 17? 616 00:33:46,000 --> 00:33:51,000 Maz kliķe šeit. 22 un 26 Šajā priekšējā rindā. 617 00:33:51,000 --> 00:33:53,000 Un tad kā par kādu tur tiek atgādināts. 618 00:33:53,000 --> 00:33:57,000 Jums ir 34. Labi, 34, nākt uz augšu. 619 00:33:57,000 --> 00:33:59,000 Pirmais ir tur. Labi, visi četri no jums, puiši. 620 00:33:59,000 --> 00:34:01,000 Un kurš gan mēs teikt par 9? 621 00:34:01,000 --> 00:34:04,000 Kurš ir mūsu 9? 622 00:34:04,000 --> 00:34:07,000 Kurš patiešām grib būt 9? Labi, nāc, būs 9. 623 00:34:07,000 --> 00:34:10,000 Šeit mēs iet. 624 00:34:10,000 --> 00:34:13,000 34, mēs sasniegtu jums tur. 625 00:34:13,000 --> 00:34:17,000 Pirmā daļa ir padarīt sevi izskatās, ka. 626 00:34:17,000 --> 00:34:21,000 26, 22, 17, labi. 627 00:34:21,000 --> 00:34:25,000 Ja jūs varat stāvēt off uz pusi, jo mēs ejam uz malloc jums brīdi. 628 00:34:25,000 --> 00:34:29,000 >> Labi, labi. 629 00:34:29,000 --> 00:34:32,000 Labi, teicami, tāpēc pieņemsim uzdot pāris jautājumus šeit. 630 00:34:32,000 --> 00:34:34,000 Un tiešām, kāda ir jūsu vārds? >> Anita. 631 00:34:34,000 --> 00:34:37,000 Anita, labi, nāk vairāk nekā šeit. 632 00:34:37,000 --> 00:34:41,000 Anita gatavojas palīdzēt mums veida atrisināt vienu diezgan vienkāršu jautājumu, pirmkārt, 633 00:34:41,000 --> 00:34:44,000 kas ir, kā jūs atrast, vai vērtība ir sarakstā? 634 00:34:44,000 --> 00:34:48,000 Tagad, ievērosiet, ka, pirmkārt, šeit pārstāv Lucas, 635 00:34:48,000 --> 00:34:52,000 ir nedaudz atšķirīgs, un tāpēc viņa papīra gabals ir apzināti sāniem 636 00:34:52,000 --> 00:34:55,000 jo tas nav gluži tik garš, un nav aizņem tik daudz biti, 637 00:34:55,000 --> 00:34:58,000 pat ja tehniski viņš ir tāds pats papīra izmēru tikai pagriezt. 638 00:34:58,000 --> 00:35:01,000 Bet viņš ir mazliet atšķirīgs, jo viņš ir tikai 32 biti rādītājs, 639 00:35:01,000 --> 00:35:05,000 un visi šie puiši ir 64 biti, no kuriem puse ir skaits, no kuriem puse ir rādītājs. 640 00:35:05,000 --> 00:35:08,000 Bet rādītājs nav attēlots, tādēļ, ja jūs puiši varētu nedaudz neveikli 641 00:35:08,000 --> 00:35:12,000 izmantot savu kreiso roku norādīt uz personu, blakus jums. 642 00:35:12,000 --> 00:35:14,000 Un tu esi skaits 34. Kāds ir Jūsu vārds? 643 00:35:14,000 --> 00:35:16,000 Ari. 644 00:35:16,000 --> 00:35:19,000 Ari, tāpēc patiesībā, tur papīru labajā rokā, un kreisās rokas iet taisni uz leju. 645 00:35:19,000 --> 00:35:21,000 Jūs pārstāvat null pa kreisi. 646 00:35:21,000 --> 00:35:24,000 >> Tagad mūsu cilvēku aina ir ļoti konsekventa. 647 00:35:24,000 --> 00:35:26,000 Tas ir tiešām kā norādes strādā. 648 00:35:26,000 --> 00:35:29,000 Un, ja jūs varat scrunch mazliet šo ceļu, lai es neesmu jūsu veidā. 649 00:35:29,000 --> 00:35:34,000 Anita šeit, atrast man numuru 22, 650 00:35:34,000 --> 00:35:40,000 bet uzņemties ierobežojumu ne cilvēki, turot papīra gabaliem, 651 00:35:40,000 --> 00:35:43,000 bet tas ir saraksts, un jums ir tikai Lucas sākt ar 652 00:35:43,000 --> 00:35:46,000 jo viņš ir burtiski pirmais rādītājs. 653 00:35:46,000 --> 00:35:51,000 Pieņemsim, ka jūs pats esat rādītājs, un tāpēc jums arī ir iespēja norādīt uz kaut ko. 654 00:35:51,000 --> 00:35:56,000 Kāpēc nav sākat norādot tieši to Lucas ir pavērsts? 655 00:35:56,000 --> 00:35:58,000 Labi, un ļaujiet man ieviest šo out nekā šeit. 656 00:35:58,000 --> 00:36:04,000 Tikai dēļ diskusiju, ļaujiet man uzvilkt tukšu lapu šeit. 657 00:36:04,000 --> 00:36:06,000 Kā jūs izskaidrot savu vārdu? >> Anita. 658 00:36:06,000 --> 00:36:08,000 Labi, Anita. 659 00:36:08,000 --> 00:36:18,000 Teiksim mezglā * Anita = Lucas. 660 00:36:18,000 --> 00:36:22,000 Nu, mums nevajadzētu zvanīt jums Lucas. Mums vajadzētu zvanīt vispirms. 661 00:36:22,000 --> 00:36:25,000 Kāpēc tas ir faktiski atbilst realitātei šeit? 662 00:36:25,000 --> 00:36:27,000 Viens, vispirms jau eksistē. 663 00:36:27,000 --> 00:36:30,000 Pirmais ir piešķirti domājams kaut kur šeit. 664 00:36:30,000 --> 00:36:35,000 Mezglā * pirmkārt, un tas ir bijis piešķirts sarakstu kaut. 665 00:36:35,000 --> 00:36:37,000 Es nezinu, kā tas notika. Tas notika pirms klases sākās. 666 00:36:37,000 --> 00:36:40,000 Šis saistīts saraksts cilvēkam ir izveidota. 667 00:36:40,000 --> 00:36:44,000 Un tagad šajā brīdī stāsts-tas viss notiek Facebook acīmredzot vēlāk- 668 00:36:44,000 --> 00:36:49,000 šajā brīdī stāsts, Anita ir inicializēts ir vienāda ar pirmo, 669 00:36:49,000 --> 00:36:51,000 kas nenozīmē, ka Anita norāda uz Lucas. 670 00:36:51,000 --> 00:36:53,000 Drīzāk, viņa norāda uz to, ko viņš norāda uz 671 00:36:53,000 --> 00:36:57,000 jo pati adrese, kas ir iekšā, Lucas ir 32 bitu - 1, 2, 3 - 672 00:36:57,000 --> 00:37:01,000 Tagad arī iekšpusē Anita 32 bitiem - 1, 2, 3. 673 00:37:01,000 --> 00:37:05,000 >> Tagad atrast 22. Kā jūs iet par to izdarīt? 674 00:37:05,000 --> 00:37:07,000 Ko tas nozīmē? >> Point whatever. 675 00:37:07,000 --> 00:37:11,000 Norādīt uz whatever, tā iet uz priekšu un rīkoties to, kā vislabāk iespējams šeit. 676 00:37:11,000 --> 00:37:15,000 Labi, labi, un tagad jūs norādot uz-kāda ir jūsu vārds ar 22? 677 00:37:15,000 --> 00:37:18,000 Ramons. >> Ramons, tāpēc Ramons ir saimniecības up 22. 678 00:37:18,000 --> 00:37:20,000 Tagad esat veikuši pārbaudi. 679 00:37:20,000 --> 00:37:24,000 Vai Ramon == 22, un, ja tā, piemēram, mēs varam atgriezties taisnība. 680 00:37:24,000 --> 00:37:26,000 Ļaujiet man-kamēr šie puiši stāvēt šeit nedaudz neveikli- 681 00:37:26,000 --> 00:37:32,000 ļaujiet man kaut ko darīt ātri kā bool atrast. 682 00:37:32,000 --> 00:37:37,000 Es iešu uz priekšu un teikt (mezglā * saraksta, int n). 683 00:37:37,000 --> 00:37:39,000 Es būšu labi atpakaļ ar jums, puiši. Man vienkārši ir uzrakstīt kādu kodu. 684 00:37:39,000 --> 00:37:45,000 Un tagad es esmu gatavojas iet uz priekšu un darīt šo, mezglā * Anita = sarakstu. 685 00:37:45,000 --> 00:37:51,000 Un es esmu gatavojas iet uz priekšu un saka, kamēr (Anita! = NULL). 686 00:37:51,000 --> 00:37:57,000 >> Metafora šeit kļūst mazliet izstiepts, bet, kamēr (Anita! = NULL), ko es vēlos darīt? 687 00:37:57,000 --> 00:38:03,000 Man vajag kaut kādā veidā salīdzināt 688 00:38:03,000 --> 00:38:05,000 skaitlis, kas Anita tiek pavērsts. 689 00:38:05,000 --> 00:38:08,000 Agrāk, kad mums bija būvēm, kas mezglu, 690 00:38:08,000 --> 00:38:11,000 mēs izmantojām dot apzīmējumu, un mēs teiktu kaut ko līdzīgu 691 00:38:11,000 --> 00:38:15,000 anita.n, bet problēma ir tā, ka Anita nav struktūrai par sevi. 692 00:38:15,000 --> 00:38:17,000 Kas viņa ir? 693 00:38:17,000 --> 00:38:21,000 Viņa rādītājs, tik tiešām, ja mēs vēlamies izmantot šo dot apzīmējumu- 694 00:38:21,000 --> 00:38:23,000 un tas ir gatavojas meklēt apzināti mazliet mistisks- 695 00:38:23,000 --> 00:38:28,000 mums ir jādara kaut kas līdzīgs doties uz kāda Anita kreiso roku tiek pavērsts 696 00:38:28,000 --> 00:38:31,000 un pēc tam iegūt lauku sauc n. 697 00:38:31,000 --> 00:38:35,000 Anita ir rādītājs, bet to, kas ir * Anita? 698 00:38:35,000 --> 00:38:38,000 Ko jūs atradīsiet, kad jūs iet uz to, Anita ir pavērsts? 699 00:38:38,000 --> 00:38:42,000 Struktūrai, mezglu, un mezglu, atsaukšana, ir lauku sauc n 700 00:38:42,000 --> 00:38:47,000 jo tā ir, atceros, šie 2 lauki, blakus un n, 701 00:38:47,000 --> 00:38:50,000 ka mēs redzējām pirms brīža tieši šeit. 702 00:38:50,000 --> 00:38:53,000 >> Lai tiešām atdarināt šo kodu, 703 00:38:53,000 --> 00:39:02,000 mēs varētu darīt un teikt, ja ((* Anita). n == n), n ka es esmu meklē. 704 00:39:02,000 --> 00:39:04,000 Ievērojiet, ka funkcija tika nodota skaita man rūp. 705 00:39:04,000 --> 00:39:10,000 Tad es varētu iet uz priekšu un darīt kaut ko līdzīgu pretī patiesu. 706 00:39:10,000 --> 00:39:12,000 Cits, ja tas nav gadījums, ko es vēlos darīt? 707 00:39:12,000 --> 00:39:19,000 Kā es varu tulkot ar kodu, ko Anita darīja intuitīvi ejot pa sarakstu? 708 00:39:19,000 --> 00:39:26,000 Ko man darīt šeit, lai modelētu Anita veikt minēto pasākumu pa kreisi, šo soli pa kreisi? 709 00:39:26,000 --> 00:39:28,000 [Dzirdams studentu reaģēšanas] >> Kas tas ir? 710 00:39:28,000 --> 00:39:30,000 [Dzirdams studentu reaģēšanas] 711 00:39:30,000 --> 00:39:34,000 Labi, nav slikta ideja, bet agrāk, kad mēs esam izdarījuši, mēs esam darījuši Anita + + 712 00:39:34,000 --> 00:39:37,000 jo tas pievieno numuru 1 līdz Anita, 713 00:39:37,000 --> 00:39:40,000 kas parasti norāda uz nākamo personu, piemēram, Ramon, 714 00:39:40,000 --> 00:39:44,000 vai personai blakus viņam, vai viņam blakus cilvēks uz leju līniju. 715 00:39:44,000 --> 00:39:49,000 Bet tas nav gluži labi, šeit, jo to, ko dara šī lieta izskatās atmiņā? 716 00:39:49,000 --> 00:39:54,000 Nav tas. Mums ir atslēgt to. 717 00:39:54,000 --> 00:40:00,000 Tas izskatās šādi atmiņā, un, lai gan es esmu sastādīts 1 un 2 un 3 tuvu viena otrai, 718 00:40:00,000 --> 00:40:03,000 ja mēs patiešām modelētu šo-Vai jūs guys, bet vēl norādot uz tiem pašiem cilvēkiem, 719 00:40:03,000 --> 00:40:07,000 var kādu no jums veikt izlases soli atpakaļ, daži no jums nejauši solis uz priekšu? 720 00:40:07,000 --> 00:40:10,000 >> Tas haoss joprojām saistīts saraksts, 721 00:40:10,000 --> 00:40:13,000 bet šie puiši varētu būt jebkur atmiņā, 722 00:40:13,000 --> 00:40:15,000 tāpēc Anita + + nav dodas uz darbu, kāpēc? 723 00:40:15,000 --> 00:40:19,000 Kas ir pie vietas Anita + +? 724 00:40:19,000 --> 00:40:21,000 Kas zina. 725 00:40:21,000 --> 00:40:24,000 Tas ir dažas citas vērtības, kas tikai tā notiek, ir izvirzīti 726 00:40:24,000 --> 00:40:28,000 Starp visiem šiem nejaušības mezgliem, jo ​​mēs esam ne izmantojot masīvu. 727 00:40:28,000 --> 00:40:30,000 Mēs, kas katru no šiem mezgliem individuāli. 728 00:40:30,000 --> 00:40:32,000 Labi, ja jūs guys var tīrīt sevi atpakaļ uz augšu. 729 00:40:32,000 --> 00:40:37,000 Ļaujiet man ieteikt, ka nevis anita + +, tā vietā mēs darām Anita izpaužas- 730 00:40:37,000 --> 00:40:42,000 labi, kāpēc nav mēs ejam, lai neatkarīgi Anita tiek pavērsts un pēc tam darīt. tālāk? 731 00:40:42,000 --> 00:40:45,000 Citiem vārdiem sakot, mēs ejam uz Ramon, kurš saimniecībā to 22, 732 00:40:45,000 --> 00:40:51,000 un tad nākamais ir. it kā Anita būtu kopējot savu kreiso roku rādītāju. 733 00:40:51,000 --> 00:40:54,000 Bet viņa negāja tālāk nekā Ramon jo mēs atradām 22. 734 00:40:54,000 --> 00:40:56,000 Bet tas būtu ideja. Tagad tas ir dievs-šausmīgs haoss. 735 00:40:56,000 --> 00:40:59,000 Godīgi, neviens nekad atcerēties šo sintaksi, un tā par laimi, 736 00:40:59,000 --> 00:41:04,000 tas tiešām maz apzinātas-ak, tu faktiski nav redzēt to, ko es uzrakstīju. 737 00:41:04,000 --> 00:41:08,000 Tas būtu vairāk pārliecinoša, ja jūs varētu. Voila! 738 00:41:08,000 --> 00:41:10,000 >> Aiz ainas, man bija problēmas risināšanu šo ceļu. 739 00:41:10,000 --> 00:41:14,000 Anita, spert šo soli pa kreisi, 740 00:41:14,000 --> 00:41:18,000 pirmkārt, mēs iet uz adresi, Anita ir pavērsts 741 00:41:18,000 --> 00:41:23,000 un kur viņa atradīs ne tikai N, ko mēs tikko pārbaudīta tikai salīdzināšanas, 742 00:41:23,000 --> 00:41:25,000 bet jūs atradīsiet arī nākamais - šajā gadījumā, 743 00:41:25,000 --> 00:41:28,000 Ramón kreisā roka norādot uz nākamo mezglu sarakstā. 744 00:41:28,000 --> 00:41:32,000 Bet tas ir dievs-šausmīgs haoss, uz kuru es atsaucos iepriekš, 745 00:41:32,000 --> 00:41:34,000 bet izrādās C ļauj mums vienkāršot šo. 746 00:41:34,000 --> 00:41:40,000 Nevis rakstiski (* Anita), mēs varam vietā vienkārši uzrakstīt Anita-> N, 747 00:41:40,000 --> 00:41:45,000 un tas ir tieši tas pats funkcionāli, bet tas ir daudz vairāk intuitīvi, 748 00:41:45,000 --> 00:41:48,000 un tas ir daudz vairāk saskan ar attēlu, ka mēs esam bijuši zīmēšanas 749 00:41:48,000 --> 00:41:50,000 visu šo laiku, izmantojot bultiņām. 750 00:41:50,000 --> 00:41:57,000 >> Visbeidzot, ko mums vajag darīt beigās šo programmu? 751 00:41:57,000 --> 00:42:00,000 Ir viens līnija kodu atlikuši. 752 00:42:00,000 --> 00:42:02,000 Atgriešanās ko? 753 00:42:02,000 --> 00:42:05,000 Nepatiesi, jo, ja mēs ar visu kamēr cilpa 754 00:42:05,000 --> 00:42:10,000 un Anita ir, faktiski, nulle, tas nozīmē, ka viņa gāja visu ceļu līdz beigām saraksta 755 00:42:10,000 --> 00:42:12,000 kur viņa bija pavērsts-Kāds ir Jūsu vārds atkal? 756 00:42:12,000 --> 00:42:15,000 ARI. >> Ari kreisā roka, kas ir nulle. 757 00:42:15,000 --> 00:42:18,000 Anita tagad nulle, un es saprotu, tu esi vienkārši stāv šeit neveikli aizmirstība 758 00:42:18,000 --> 00:42:21,000 jo es esmu off uz monologs šeit, 759 00:42:21,000 --> 00:42:23,000 bet mēs iesaistīt jūs atkal tikai brīdi. 760 00:42:23,000 --> 00:42:27,000 Anita ir spēkā tajā brīdī stāsts, tāpēc kamēr cilpa izbeidz, 761 00:42:27,000 --> 00:42:30,000 un mums ir jāatgriežas nepatiess, jo, ja viņa ieguva visu ceļu uz Ari s null pointers 762 00:42:30,000 --> 00:42:34,000 tad tur bija neviens numurs, ka viņa meklēja sarakstā. 763 00:42:34,000 --> 00:42:39,000 Mēs varam iztīrīt šo pārāk, bet tas ir diezgan laba īstenošana tad 764 00:42:39,000 --> 00:42:43,000 par šķērsošana funkciju, atrast funkciju saistītajā sarakstā. 765 00:42:43,000 --> 00:42:48,000 Tas joprojām lineāra meklēšanu, bet tas nav tik vienkārši, kā + + rādītājs 766 00:42:48,000 --> 00:42:52,000 vai + + es mainīga, jo tagad mēs nevaram uzminēt 767 00:42:52,000 --> 00:42:54,000 kur katrs no šiem mezgliem ir atmiņā. 768 00:42:54,000 --> 00:42:57,000 Mums ir burtiski sekot taka rīvmaizes vai, precīzāk, 769 00:42:57,000 --> 00:43:00,000 norādes, lai nokļūtu no viena mezgla uz otru. 770 00:43:00,000 --> 00:43:02,000 >> Tagad pamēģināsim kādu citu. Anita, jūs vēlaties atgriezties šeit? 771 00:43:02,000 --> 00:43:06,000 Kāpēc ne mēs ejam uz priekšu un piešķir vienu citu personu no auditorijas? 772 00:43:06,000 --> 00:43:08,000 Malloc-kāda ir jūsu vārds? >> Rebecca. 773 00:43:08,000 --> 00:43:10,000 Rebecca. Rebeka ir malloced no auditorijas, 774 00:43:10,000 --> 00:43:13,000 un viņa tagad ir uzglabātu numuru 55. 775 00:43:13,000 --> 00:43:17,000 Un pie rokas mērķis tagad ir Anita ievietot 776 00:43:17,000 --> 00:43:22,000 Rebecca uz saistīts saraksts šeit tās atbilstošā vietā. 777 00:43:22,000 --> 00:43:24,000 Nāc uz vairāk nekā šeit uz brīdi. 778 00:43:24,000 --> 00:43:28,000 Man ir jādara kaut kas līdzīgs šim. 779 00:43:28,000 --> 00:43:32,000 Man ir darīts mezglā *. Un kāda ir jūsu vārds atkal? 780 00:43:32,000 --> 00:43:34,000 Rebecca. >> Rebeka, labi. 781 00:43:34,000 --> 00:43:41,000 Rebecca izpaužas malloc (sizeof (mezgls)). 782 00:43:41,000 --> 00:43:44,000 Tāpat kā mums ir piešķirti lietas, piemēram, studentiem un plauktiņš pagātnē, 783 00:43:44,000 --> 00:43:46,000 mums ir nepieciešams lielumu mezglā, tāpēc tagad Rebecca 784 00:43:46,000 --> 00:43:49,000 ir vērsta uz to, ko? 785 00:43:49,000 --> 00:43:52,000 Rebeka ir divi lauki iekšpusē viņas, no kuriem viens ir 55. 786 00:43:52,000 --> 00:43:55,000 Darīsim ko, Rebecca-> = 55. 787 00:43:55,000 --> 00:44:00,000 Bet tad Rebecca-> nākamā būtu līdzīgu tiesības tagad, viņas roka ir sava veida, kas zina? 788 00:44:00,000 --> 00:44:03,000 Tas norādot uz kādu atkritumu vērtībā, tad kāpēc ne labs pasākums 789 00:44:03,000 --> 00:44:07,000 mēs vismaz izdarīt tā, ka kreisā roka ir tagad pie viņas sāniem. 790 00:44:07,000 --> 00:44:09,000 Tagad Anita, ņemt to no šeit. 791 00:44:09,000 --> 00:44:11,000 Jums ir Rebeka, kuriem ir piešķirtas. 792 00:44:11,000 --> 00:44:20,000 Iet uz priekšu un atrast, kur mums vajadzētu likt Rebecca. 793 00:44:20,000 --> 00:44:25,000 Labi, ļoti labi. 794 00:44:25,000 --> 00:44:28,000 Labi, labi, un tagad mums nepieciešams, lai jūs sniegtu mazliet virzienā, 795 00:44:28,000 --> 00:44:30,000 lai jūs esat sasniedzis Ari. 796 00:44:30,000 --> 00:44:33,000 Viņa kreisā roka ir nulle, bet Rebeka nepārprotami pieder labi, 797 00:44:33,000 --> 00:44:36,000 tā kā mēs ir mainīt šo saistīts saraksts 798 00:44:36,000 --> 00:44:38,000 Lai ievietotu Rebecca atbilstošajā vietā? 799 00:44:38,000 --> 00:44:42,000 Ja jūs varētu burtiski pārvietot cilvēku kreisās rokas ap kā nepieciešams, 800 00:44:42,000 --> 00:44:48,000 mēs noteikt problēmu, ka veidā. 801 00:44:48,000 --> 00:44:52,000 Labi, labi, un tikmēr, Rebecca kreisā roka ir tagad viņai blakus. 802 00:44:52,000 --> 00:44:54,000 >> Tas bija pārāk viegli. 803 00:44:54,000 --> 00:44:57,000 Pamēģināsim sadalot-we're gandrīz izdarīts, 20. 804 00:44:57,000 --> 00:44:59,000 Labi, nāk uz augšu. 805 00:44:59,000 --> 00:45:04,000 20 ir piešķirts, tāpēc ļaujiet man iet uz priekšu un saka atkal šeit 806 00:45:04,000 --> 00:45:07,000 mēs esam tikai izdarīt mezglā * Saad. 807 00:45:07,000 --> 00:45:11,000 Mums ir malloc (sizeof (mezgls)). 808 00:45:11,000 --> 00:45:16,000 Mēs pēc tam darīt to pašu precīzu sintaksi, kā mēs darījām iepriekš par 20, 809 00:45:16,000 --> 00:45:20,000 un es darīšu nākamo = null, un tagad tas ir līdz Anita 810 00:45:20,000 --> 00:45:23,000 ievietot jūs vērā saistītā sarakstā, ja jūs varētu spēlēt ka tieši tādu pašu lomu. 811 00:45:23,000 --> 00:45:30,000 Izpildīt. 812 00:45:30,000 --> 00:45:32,000 Labi, labi. 813 00:45:32,000 --> 00:45:38,000 Tagad domāju, ka uzmanīgi, pirms sākat pārvietojas kreisās rokas apkārt. 814 00:45:38,000 --> 00:45:46,000 Jūs līdz šim ieguvuši visvairāk neērts loma šodien. 815 00:45:46,000 --> 00:45:59,000 Kura rokas jāpārvieto vispirms? 816 00:45:59,000 --> 00:46:02,000 Labi, pagaidiet, es esmu dzirdes daži nē s. 817 00:46:02,000 --> 00:46:07,000 Ja daži ļaudīm būtu pieklājīgi gribētu, lai palīdzētu risināt ar neērtu situāciju šeit. 818 00:46:07,000 --> 00:46:11,000 Kuras kreisā roka būtu jāatjaunina 1. varbūt? Yeah. 819 00:46:11,000 --> 00:46:13,000 [Studentu] Saad s. 820 00:46:13,000 --> 00:46:15,000 Labi, Saad s, kāpēc, lai gan? 821 00:46:15,000 --> 00:46:17,000 [Dzirdams studentu reaģēšanas] 822 00:46:17,000 --> 00:46:19,000 Labi, jo, ja mēs virzāmies-Kāds ir Jūsu vārds? >> Māršala. 823 00:46:19,000 --> 00:46:22,000 Marshall, ja mēs pārvietot savu roku pirmajā leju uz null, 824 00:46:22,000 --> 00:46:25,000 Tagad mēs esam burtiski bāreņiem četri cilvēki šajā sarakstā 825 00:46:25,000 --> 00:46:29,000 jo viņš bija vienīgais, norādot uz Ramon un visiem pa kreisi, 826 00:46:29,000 --> 00:46:31,000 tāpēc atjauninot šo rādītāju pirmais bija slikti. 827 00:46:31,000 --> 00:46:33,000 Pieņemsim atsaukt to. 828 00:46:33,000 --> 00:46:37,000 Labi, un tagad iet uz priekšu un pārvietot atbilstošu kreiso roku norādot uz Ramon. 829 00:46:37,000 --> 00:46:39,000 Tas jūtas mazliet lieks. 830 00:46:39,000 --> 00:46:41,000 Tagad tur ir divi cilvēki, kas norāda uz Ramon, bet tas ir jauki 831 00:46:41,000 --> 00:46:43,000 jo tagad kā vēl mēs atjaunināt sarakstu? 832 00:46:43,000 --> 00:46:48,000 Kāds cits puses ir, lai pārvietotos? 833 00:46:48,000 --> 00:46:53,000 Teicami, tagad mēs esam zaudējuši jebkādu atmiņu? 834 00:46:53,000 --> 00:46:57,000 Nē, tik labi, pieņemsim redzēt, ja mēs nevaram lauzt to vēl vienu reizi. 835 00:46:57,000 --> 00:47:00,000 >> Mallocing pēdējo reizi, skaits 5. 836 00:47:00,000 --> 00:47:04,000 Viss, kas muguras veidā, nāk uz leju. 837 00:47:04,000 --> 00:47:08,000 Tas ir ļoti aizraujoši. 838 00:47:08,000 --> 00:47:15,000 [Aplausi] 839 00:47:15,000 --> 00:47:17,000 Kāds ir Jūsu vārds? >> Rons. 840 00:47:17,000 --> 00:47:19,000 Ron, labi, jūs malloced kā 5 numuru. 841 00:47:19,000 --> 00:47:23,000 Mēs esam tikko izpildīts kods, kas ir gandrīz identisks šos 842 00:47:23,000 --> 00:47:26,000 tikai ar citu nosaukumu. 843 00:47:26,000 --> 00:47:28,000 Teicami. 844 00:47:28,000 --> 00:47:38,000 Tagad, Anita, veiksmi ievietojot skaits 5 uz sarakstu tagad. 845 00:47:38,000 --> 00:47:43,000 Labi, un? 846 00:47:43,000 --> 00:47:47,000 Teicami, tāpēc tas ir patiešām trešais no trim kopējām lietām. 847 00:47:47,000 --> 00:47:49,000 Mums vispirms bija kāds beigās, Rebecca. 848 00:47:49,000 --> 00:47:51,000 Tad mums bija kāds vidū. 849 00:47:51,000 --> 00:47:53,000 Tagad mums ir kāds sākumā, un šajā piemērā, 850 00:47:53,000 --> 00:47:56,000 Mums tagad bija aktualizēt Lucas pirmo reizi 851 00:47:56,000 --> 00:48:00,000 jo pirmais elements sarakstā šobrīd ir norādīt uz jaunu mezglu, 852 00:48:00,000 --> 00:48:03,000 kas, savukārt, ir vērsta uz mezglu skaits 9. 853 00:48:03,000 --> 00:48:06,000 >> Tas bija ļoti neveikli demonstrācija, es esmu pārliecināts, 854 00:48:06,000 --> 00:48:08,000 tāpēc liela kārtu aplausi šie puiši, ja jūs varētu. 855 00:48:08,000 --> 00:48:11,000 Labi darīts. 856 00:48:11,000 --> 00:48:17,000 Tas arī viss. Jūs varat saglabāt savu gabalu no papīra, kā maz atmiņas. 857 00:48:17,000 --> 00:48:22,000 Izrādās, ka to izdarīt kodu 858 00:48:22,000 --> 00:48:26,000 nav gluži tik vienkārši, kā tikai pārvietojas rokas ap 859 00:48:26,000 --> 00:48:28,000 un norādot norādes pie dažādām lietām. 860 00:48:28,000 --> 00:48:31,000 Bet saprast, ka tad, kad runa ir laiks, lai īstenotu kaut ko līdzīgu 861 00:48:31,000 --> 00:48:34,000 saistīts saraksts vai tā variants, ja jums koncentrēties uz patiešām 862 00:48:34,000 --> 00:48:38,000 šīs pamata pamati, uz kumosa lieluma problēmas, man ir izdomāt, 863 00:48:38,000 --> 00:48:43,000 tas ir tas roku vai šo roku, saprotam, ka to, kas ir citādi diezgan sarežģīta programma 864 00:48:43,000 --> 00:48:47,000 var, faktiski, ir jāsamazina līdz vienkāršiem celtniecības bloki, kā šis. 865 00:48:47,000 --> 00:48:51,000 >> Paņemsim lietas sarežģītākas virzienā joprojām. 866 00:48:51,000 --> 00:48:53,000 Mums tagad ir jēdziens par saistīts sarakstu. 867 00:48:53,000 --> 00:48:57,000 Mums ir arī-pateicoties ierosinājumam muguras tur-divkārt saistīts saraksts, 868 00:48:57,000 --> 00:49:01,000 kas izskatās gandrīz tāds pats, bet tagad mums ir divas norādes iekšpusē struct 869 00:49:01,000 --> 00:49:05,000 nevis viens, un mēs varētu droši saucam šos norādes iepriekšējo un nākamo 870 00:49:05,000 --> 00:49:08,000 vai pa kreisi vai pa labi, bet mēs, patiesībā, vajag divus no tiem. 871 00:49:08,000 --> 00:49:10,000 Kods būtu nedaudz vairāk jāiesaistās. 872 00:49:10,000 --> 00:49:12,000 Anita būtu jādara vairāk, šeit uz skatuves. 873 00:49:12,000 --> 00:49:15,000 Bet mēs, protams, var īstenot šāda veida struktūru. 874 00:49:15,000 --> 00:49:19,000 Runājot par darba laiku, lai gan, kāda būtu darbības laiks 875 00:49:19,000 --> 00:49:24,000 Anita atrodot skaits n ir saistīts saraksts tagad? 876 00:49:24,000 --> 00:49:27,000 Joprojām liela O no n, tāpēc nav labāks par lineāro meklēšanu. 877 00:49:27,000 --> 00:49:29,000 Mēs nevaram darīt bināro meklēšanu, lai gan, atkal. 878 00:49:29,000 --> 00:49:34,000 Kāpēc bija gadījums? Jūs nevarat lēkt apkārt. 879 00:49:34,000 --> 00:49:36,000 Pat ja mēs acīmredzot redzēt visus cilvēkus uz skatuves, 880 00:49:36,000 --> 00:49:39,000 un Anita varēja eyeballed to un sacīja: "Te ir saraksta vidū," 881 00:49:39,000 --> 00:49:42,000 viņa nezināja, ka viņa būtu datorprogramma 882 00:49:42,000 --> 00:49:47,000 jo vienīgais, ko viņa bija slēdzeni uz sākumā scenārija 883 00:49:47,000 --> 00:49:50,000 bija Lucas, kurš bija pirmais rādītājs. 884 00:49:50,000 --> 00:49:53,000 Viņa būtu obligāti jāievēro šīs saites, 885 00:49:53,000 --> 00:49:56,000 skaitot savu ceļu līdz viņa atrada aptuveni vidū, 886 00:49:56,000 --> 00:49:58,000 un pat tad, viņa nav gatavojas zināt, kad viņa sasniedza vidū 887 00:49:58,000 --> 00:50:01,000 ja vien viņa iet visu ceļu līdz beigām, lai noskaidrotu, cik daudz tur ir, 888 00:50:01,000 --> 00:50:05,000 tad Backtracks, un tas arī būtu grūti, ja vien jums bija 889 00:50:05,000 --> 00:50:07,000 divkārt saistīts saraksts kaut kāda. 890 00:50:07,000 --> 00:50:10,000 >> Risināšanā dažas problēmas šodien, bet ieviešot citus. 891 00:50:10,000 --> 00:50:12,000 Kas par citu datu struktūra pavisam? 892 00:50:12,000 --> 00:50:15,000 Tas ir fotogrāfija no šajā Mather House paplātes, 893 00:50:15,000 --> 00:50:19,000 un šajā gadījumā mums ir datu struktūra, mēs esam arī sava veida jau runā. 894 00:50:19,000 --> 00:50:22,000 Mēs runājām par kaudze kontekstā atmiņu, 895 00:50:22,000 --> 00:50:26,000 un tas ir sava veida apzināti nosaukta tāpēc kaudzīte atmiņas nosacījumiem 896 00:50:26,000 --> 00:50:31,000 ir faktiski datu struktūra, kas ir vairāk un vairāk sīkumi kārtojumu uz augšu no tā. 897 00:50:31,000 --> 00:50:35,000 Bet interesanta lieta par steku, kā tas ir patiesībā, 898 00:50:35,000 --> 00:50:38,000 ir, ka tas ir īpašs datu struktūras. 899 00:50:38,000 --> 00:50:42,000 Tas ir datu struktūra, kurā pirmais elements 900 00:50:42,000 --> 00:50:46,000 ir pēdējais elements out. 901 00:50:46,000 --> 00:50:50,000 Ja jums ir pirmās paplāte tiks likts uz steku, 902 00:50:50,000 --> 00:50:53,000 Jūs esat būs diemžēl pēdējo paplāte jāizņem kaudze, 903 00:50:53,000 --> 00:50:55,000 un tas nav vienmēr ir laba lieta. 904 00:50:55,000 --> 00:50:58,000 Un otrādi, jūs varat domāt par to otrādi, 905 00:50:58,000 --> 00:51:02,000 pēdējais, kas ir pirmā no. 906 00:51:02,000 --> 00:51:05,000 >> Tagad, vai kāds scenāriji nāk prātā kur ar steku 907 00:51:05,000 --> 00:51:08,000 datu struktūra, kurā jums ir, ka īpašums 908 00:51:08,000 --> 00:51:13,000 no pēdējā, pirmais ārā, ir faktiski pārliecinoši? 909 00:51:13,000 --> 00:51:16,000 Ir tas, ka laba lieta? Ir tā, ka slikti? 910 00:51:16,000 --> 00:51:19,000 Tas noteikti slikti, ja paplātes nav visi vienādi 911 00:51:19,000 --> 00:51:21,000 un viņi visi bija īpašas dažādas krāsas vai plauktiņš, 912 00:51:21,000 --> 00:51:24,000 un krāsu vēlaties ir visu ceļu apakšā. 913 00:51:24,000 --> 00:51:26,000 Protams, jūs nevarat saņemt, ka bez lielas piepūles. 914 00:51:26,000 --> 00:51:28,000 Jums ir jāsāk no augšas un darbu savu ceļu uz leju. 915 00:51:28,000 --> 00:51:31,000 Tāpat, ja jūs būtu viens no šiem fanu zēni 916 00:51:31,000 --> 00:51:34,000 kurš gaida visu nakti mēģina iegūt iPhone un līniju līdz 917 00:51:34,000 --> 00:51:36,000 vietā kā šī? 918 00:51:36,000 --> 00:51:40,000 Vai tas nebūtu jauki, ja Apple veikalu 919 00:51:40,000 --> 00:51:42,000 bija kaudze datu struktūra? 920 00:51:42,000 --> 00:51:44,000 Yay? Nē? 921 00:51:44,000 --> 00:51:47,000 Tas ir tikai labi cilvēki, kas parādās pēdējā iespējamā brīdī 922 00:51:47,000 --> 00:51:50,000 un pēc tam saņemt noplūktas off rindā. 923 00:51:50,000 --> 00:51:52,000 Un patiesībā, tas, ka man bija tik vēlme teikt rindā 924 00:51:52,000 --> 00:51:56,000 ir faktiski saskan ar to, ko mēs varētu nosaukt šo veida datu struktūru, 925 00:51:56,000 --> 00:51:59,000 viens patiesībā kur lai tas jautājums, 926 00:51:59,000 --> 00:52:02,000 un jūs vēlaties viens no pirmajiem būt pirmais ārā 927 00:52:02,000 --> 00:52:04,000 ja vien tādēļ, lai cilvēka godīgumu. 928 00:52:04,000 --> 00:52:07,000 Mēs parasti saucam ka rinda datu struktūra. 929 00:52:07,000 --> 00:52:11,000 >> Izrādās ne tikai saistībā sarakstos, mēs varam sākt izmantot šīs pašas idejas 930 00:52:11,000 --> 00:52:15,000 un sākt jaunu un atšķirīgu veidu problēmu risinājumus. 931 00:52:15,000 --> 00:52:19,000 Piemēram, gadījumā, skursteņus, mēs varētu pārstāvēt kaudze 932 00:52:19,000 --> 00:52:22,000 izmantojot datu struktūru, piemēram, tas, es ierosinu. 933 00:52:22,000 --> 00:52:26,000 Šajā gadījumā, es esmu paziņoja struct, un es esmu teica iekšā par šo struktūru 934 00:52:26,000 --> 00:52:30,000 ir skaitļu masīvs, un tad mainīgo sauc lielumu, 935 00:52:30,000 --> 00:52:33,000 un es esmu dodas uz zvanu šī lieta kaudze. 936 00:52:33,000 --> 00:52:35,000 Tagad, kāpēc tas faktiski strādā? 937 00:52:35,000 --> 00:52:43,000 Attiecībā uz skursteņus, es varētu izdarīt to efektīvi uz ekrāna kā masīva. 938 00:52:43,000 --> 00:52:47,000 Te ir mana kaudze. Tie ir mani numuri. 939 00:52:47,000 --> 00:52:50,000 Un mēs izdarīt tos kā šis, tas, tas, tas, tas. 940 00:52:50,000 --> 00:52:53,000 Un tad man ir daži citi dati locekli šeit, 941 00:52:53,000 --> 00:52:58,000 ko sauc izmēra, tāpēc tas ir izmērs, un tas ir skaitļi, 942 00:52:58,000 --> 00:53:02,000 un kolektīvi, viss iPad šeit pārstāv vienu steka struktūru. 943 00:53:02,000 --> 00:53:07,000 Tagad, pēc noklusējuma, izmērs ir iespējams got būt inicializēts līdz 0, 944 00:53:07,000 --> 00:53:11,000 un kas ir iekšā no masīva skaitļu sākotnēji 945 00:53:11,000 --> 00:53:14,000 kad es pirmo reizi piešķir masīvs? 946 00:53:14,000 --> 00:53:16,000 Atkritumu. Kas to lai zina? Un tas nav tiešām jautājums. 947 00:53:16,000 --> 00:53:20,000 Tas nav svarīgi, ja tas ir 1, 2, 3, 4, 5, pilnīgi nejauši 948 00:53:20,000 --> 00:53:25,000 pēc neveiksmes glabājas manā struktūrā, jo tik ilgi, kamēr es zinu, ka no lieluma kaudze 949 00:53:25,000 --> 00:53:29,000 ir 0, tad es zinu programmatiski, nav apskatīt kādu no masīva elementiem. 950 00:53:29,000 --> 00:53:31,000 Tas nav svarīgi, kas ir tur. 951 00:53:31,000 --> 00:53:34,000 Vai nav skatīties uz tiem, kā tas būtu saistība ar izmēru no 0. 952 00:53:34,000 --> 00:53:38,000 >> Bet pieņemsim, ka tagad es iet uz priekšu un ievietot kaut uz skursteņa. 953 00:53:38,000 --> 00:53:42,000 Es gribu ievietot numuru 5, tāpēc man skaits 5 šeit, 954 00:53:42,000 --> 00:53:45,000 un tad ko es varu nolikt šeit? 955 00:53:45,000 --> 00:53:48,000 Tagad es tiešām likts uz leju 1 uz izmēru, 956 00:53:48,000 --> 00:53:50,000 un tagad kaudze ir 1 izmēru. 957 00:53:50,000 --> 00:53:53,000 Ko darīt, ja es iet uz priekšu un ievietojiet numuru, teiksim, 7 nākamais? 958 00:53:53,000 --> 00:53:57,000 Šis tad izpaužas atjaunošana līdz 2, un tad mēs darīsim 9, 959 00:53:57,000 --> 00:54:02,000 un tad tas izpaužas atjaunošana līdz 3. 960 00:54:02,000 --> 00:54:05,000 Bet interesanta iezīme tagad šī kaudze ir, ka 961 00:54:05,000 --> 00:54:09,000 Es esmu vajadzēja noņemt kurš no šiem elementiem, ja es gribu, lai pop 962 00:54:09,000 --> 00:54:12,000 kaut nost no skursteņa, tā teikt? 963 00:54:12,000 --> 00:54:14,000 9 būs pirmā lieta iet. 964 00:54:14,000 --> 00:54:18,000 Kā būtu aina mainīties, ja es gribu, lai pop elementu pie skursteņa, 965 00:54:18,000 --> 00:54:20,000 Daudz kā paplāti Mather? 966 00:54:20,000 --> 00:54:22,000 Yeah >> [Studentu] Iestatīt izmēru līdz 2.. 967 00:54:22,000 --> 00:54:27,000 Tieši tā, visi man ir iestatīts izmēru uz 2, un ko man darīt ar masīva? 968 00:54:27,000 --> 00:54:29,000 Man nav darīt jebko. 969 00:54:29,000 --> 00:54:32,000 Es varētu, tikai lai anālais, ielieciet 0 tur vai -1 vai kaut ko, lai apzīmētu 970 00:54:32,000 --> 00:54:34,000 ka tas nav legit vērtība, bet tas nav svarīgi, jo 971 00:54:34,000 --> 00:54:37,000 Es varu ierakstīt ārpus masīva pati cik ilgi tas ir 972 00:54:37,000 --> 00:54:41,000 tāpēc, ka es zinu tikai apskatīt pirmo divu elementu šajā masīvā. 973 00:54:41,000 --> 00:54:47,000 Tagad, ja es eju un pievieno numuru 8, lai šī masīva, kā tas attēls mainās nākamo? 974 00:54:47,000 --> 00:54:50,000 Tas kļūst 8, un tas kļūst 3. 975 00:54:50,000 --> 00:54:52,000 Es esmu griešana dažas stūriem šeit. 976 00:54:52,000 --> 00:54:56,000 Tagad mums ir 5, 7, 8, un mēs esam atpakaļ uz izmēru gada 3. 977 00:54:56,000 --> 00:54:58,000 Tas ir diezgan vienkārši īstenot, 978 00:54:58,000 --> 00:55:06,000 bet, kad mēs gatavojamies nožēlojam šo dizaina lēmumu? 979 00:55:06,000 --> 00:55:09,000 Kad, lietas sāk iet ļoti, ļoti nepareizi? Yeah. 980 00:55:09,000 --> 00:55:11,000 [Dzirdams studentu reaģēšanas] 981 00:55:11,000 --> 00:55:13,000 Ja jūs vēlaties doties atpakaļ un iegūt pirmo elementu jūs likts collas 982 00:55:13,000 --> 00:55:18,000 >> Izrādās šeit pat kaudze ir masīvs zem motora pārsega, 983 00:55:18,000 --> 00:55:21,000 šie datu struktūras mēs esam sākuši runāt par ir arī parasti sauc par 984 00:55:21,000 --> 00:55:25,000 abstraktas datu struktūras, kurā kā viņi īsteno 985 00:55:25,000 --> 00:55:27,000 ir pilnīgi papildus punktu. 986 00:55:27,000 --> 00:55:31,000 Datu struktūra, piemēram, kaudze ir paredzēts pievienot atbalstu 987 00:55:31,000 --> 00:55:35,000 darbības, piemēram, push, kas nospiež ar paplāti uz steku, 988 00:55:35,000 --> 00:55:39,000 un pop, kas noņem elements no skursteņiem, un tas arī viss. 989 00:55:39,000 --> 00:55:43,000 Ja tu būtu, lai lejupielādētu kāds cits kods, kas jau īstenoti 990 00:55:43,000 --> 00:55:46,000 Šī lieta, ko sauc kaudze, kas personai būtu rakstīts 991 00:55:46,000 --> 00:55:49,000 tikai divas funkcijas, lai jūs, push un pop, kuru vienīgais mērķis dzīvē 992 00:55:49,000 --> 00:55:51,000 būtu darīt tieši to. 993 00:55:51,000 --> 00:55:54,000 Jūs vai viņam vai viņai kas īsteno šo programmu 994 00:55:54,000 --> 00:55:58,000 būtu bijis pilnīgi viens, lai izlemtu, kā īstenot 995 00:55:58,000 --> 00:56:00,000 semantiku stumšana un popping zem pārsega 996 00:56:00,000 --> 00:56:03,000 vai funkcionalitāti stumšanas un popping. 997 00:56:03,000 --> 00:56:07,000 Un man ir devuši nedaudz tuvredzīgs lēmums šeit 998 00:56:07,000 --> 00:56:10,000 īstenojot savu kaudze ar šo vienkāršo datu struktūru kāpēc? 999 00:56:10,000 --> 00:56:12,000 Kad šo datu struktūru pārtraukums? 1000 00:56:12,000 --> 00:56:18,000 Kurā brīdī man atgriezties kļūda, kad lietotājs pieprasa push, piemēram? 1001 00:56:18,000 --> 00:56:20,000 [Studentu] Ja tur nav vairāk vietas. 1002 00:56:20,000 --> 00:56:23,000 Tieši tā, ja tur nav vairāk vietas, ja es esmu pārsniedzis jaudu, 1003 00:56:23,000 --> 00:56:27,000 kas ir visi vāciņi, jo tas liecina, ka tas ir sava veida pasaules nemainīgs. 1004 00:56:27,000 --> 00:56:30,000 Nu, tad es esmu tikai gatavojas teikt, "Atvainojiet, es nevaru push citu vērtību 1005 00:56:30,000 --> 00:56:32,000 uz skursteņa, "līdzīgi kā Mather. 1006 00:56:32,000 --> 00:56:36,000 >> Kādā brīdī, viņi gatavojas hit top daļu no šī mazā kabinetā. 1007 00:56:36,000 --> 00:56:39,000 Tur nav vairāk vietas vai jaudas kaudze, kurā brīdī tur ir dažas kļūdas veida. 1008 00:56:39,000 --> 00:56:42,000 Viņiem ir likts elementu kaut kur citur, paplātes kaut kur citur, 1009 00:56:42,000 --> 00:56:44,000 vai nekur vispār. 1010 00:56:44,000 --> 00:56:47,000 Tagad, ar rindā, mēs varētu īstenot to nedaudz savādāk. 1011 00:56:47,000 --> 00:56:50,000 Rinda ir nedaudz atšķirīga, ka zem motora pārsega, to var īstenot 1012 00:56:50,000 --> 00:56:54,000 kā masīvu, bet kāpēc, šajā gadījumā, es esmu ierosinot 1013 00:56:54,000 --> 00:56:59,000 lai arī ir galvas elements, kas veido galvu no saraksta, 1014 00:56:59,000 --> 00:57:06,000 priekšējā saraksta, pirmais cilvēks rindā pie Apple veikala, papildus izmēru? 1015 00:57:06,000 --> 00:57:14,000 Kāpēc man ir nepieciešams papildu gabals datu šeit? 1016 00:57:14,000 --> 00:57:16,000 Domāju, ka atpakaļ uz kādi skaitļi ir 1017 00:57:16,000 --> 00:57:18,000 ja es esmu sagatavots to šādi. 1018 00:57:18,000 --> 00:57:21,000 Pieņemu, ka tas ir tagad rinda nevis kaudze, 1019 00:57:21,000 --> 00:57:24,000 ir-tāpat kā Apple veikals-rindā atšķirība ir taisnīga. 1020 00:57:24,000 --> 00:57:27,000 Pirmais cilvēks rindā sākumā saraksta, šajā gadījumā 5 numurs, 1021 00:57:27,000 --> 00:57:30,000 viņš vai viņa būs let uz veikalu vispirms. 1022 00:57:30,000 --> 00:57:32,000 Darīsim to. 1023 00:57:32,000 --> 00:57:35,000 Pieņemsim, ka tas ir valsts mana rindā šajā brīdī, un tagad Apple veikalu 1024 00:57:35,000 --> 00:57:39,000 atver un pirmais cilvēks, skaits 5, vada iekšā veikalā. 1025 00:57:39,000 --> 00:57:43,000 Kā mainīt priekšstatu, ka šobrīd man ir de-rindā pirmā persona 1026 00:57:43,000 --> 00:57:47,000 priekšā līnijas? 1027 00:57:47,000 --> 00:57:50,000 Kas ir, ka >> [Studentu]? Maiņa rindā. 1028 00:57:50,000 --> 00:57:52,000 Mainīt galvu, tāpēc 5 pazūd. 1029 00:57:52,000 --> 00:57:56,000 Patiesībā, tas ir, it kā-kā vislabāk to darīt? 1030 00:57:56,000 --> 00:58:00,000 Patiesībā, tas ir, it kā tas puisis pazūd. 1031 00:58:00,000 --> 00:58:03,000 Kas būtu skaits 7 darīt faktisko veikalā? 1032 00:58:03,000 --> 00:58:05,000 Viņi veikt lielu soli uz priekšu. 1033 00:58:05,000 --> 00:58:08,000 >> Bet tas, ko mēs esam ieradušies novērtēt, kad runa ir masīvi 1034 00:58:08,000 --> 00:58:10,000 un pārvietojas lietas apkārt? 1035 00:58:10,000 --> 00:58:12,000 Tas ir sava veida atkritumu savu laiku, vai ne? 1036 00:58:12,000 --> 00:58:16,000 Kāpēc jums ir jābūt tik anālais, lai būtu pirmā persona 1037 00:58:16,000 --> 00:58:21,000 sākumā līnijas pie fiziski sākuma rieciens atmiņas? 1038 00:58:21,000 --> 00:58:23,000 Tas ir pilnīgi nevajadzīga. Kāpēc? 1039 00:58:23,000 --> 00:58:26,000 Kas varētu Es tikai atceros, nevis >> [dzirdams studentu reaģēšanas]? 1040 00:58:26,000 --> 00:58:30,000 Tieši tā, es varētu tikai atcerēties šo papildu datu loceklis galvu 1041 00:58:30,000 --> 00:58:34,000 ka tagad saraksta galva vairs 0, kas tas bija pirms brīža. 1042 00:58:34,000 --> 00:58:39,000 Tagad tas patiesībā numurs 1. Tādā veidā, man nedaudz optimizāciju. 1043 00:58:39,000 --> 00:58:44,000 Tikai tāpēc, ka es esmu de-rindā kāds no rindā sākumā līnijas pie Apple veikala 1044 00:58:44,000 --> 00:58:47,000 nenozīmē ikvienam ir novirzīt, kas atsaukšana ir lineāra operācija. 1045 00:58:47,000 --> 00:58:50,000 Es varu vietā pavadīt pastāvīgu laiku tikai 1046 00:58:50,000 --> 00:58:53,000 un sasniegt tad daudz ātrāku reakciju. 1047 00:58:53,000 --> 00:58:56,000 Bet cenu es esmu maksājot ir ko iegūtu, ka papildu sniegumu 1048 00:58:56,000 --> 00:58:58,000 un kam nav novirzīt visiem? 1049 00:58:58,000 --> 00:59:01,000 Yeah >> [dzirdams studentu reaģēšanas]. 1050 00:59:01,000 --> 00:59:04,000 Var pievienot vairāk cilvēku, labi, ka problēma ir perpendikulāras 1051 00:59:04,000 --> 00:59:07,000 ar to, ka mēs esam ne novirzot cilvēku apkārt. 1052 00:59:07,000 --> 00:59:11,000 Tas joprojām masīvs, tāpēc, vai mēs novirzīt ikvienam, vai ne- 1053 00:59:11,000 --> 00:59:13,000 Ak, es saprotu, ko tu domā, labi. 1054 00:59:13,000 --> 00:59:16,000 Patiesībā, es piekrītu, ko jūs sakāt, ka tas ir gandrīz, it kā 1055 00:59:16,000 --> 00:59:19,000 mēs tagad nekad gatavojas izmantot uzsākšanu šī masīva vairs 1056 00:59:19,000 --> 00:59:22,000 jo, ja es noņemt 5, tad es noņemt 7. 1057 00:59:22,000 --> 00:59:24,000 Bet es tikai nodot cilvēkus uz labo pusi. 1058 00:59:24,000 --> 00:59:28,000 >> Tā uzskata, piemēram, es esmu izšķērdēt telpu, un beidzot mana rinda sadalās neko, 1059 00:59:28,000 --> 00:59:31,000 lai mēs varētu vienkārši ir cilvēki wraparound, 1060 00:59:31,000 --> 00:59:35,000 un mēs varētu domāt par šo masīva tiešām kā sava veida apļveida struktūru, 1061 00:59:35,000 --> 00:59:38,000 bet mēs izmantojam kāda operatoru C darīt, ka veida wraparound? 1062 00:59:38,000 --> 00:59:40,000 [Dzirdams studentu reaģēšanas] >> modulo operators. 1063 00:59:40,000 --> 00:59:43,000 Tas būtu mazliet kaitinošas ir domāt jūs darīt wraparound, 1064 00:59:43,000 --> 00:59:46,000 bet mēs varētu darīt to, un mēs varētu sākt liekot cilvēkus, ko izmanto, lai būtu priekšā no līnijas, 1065 00:59:46,000 --> 00:59:52,000 bet mēs tikai atcerieties šo galvu mainīgo kurš faktiskā vadītāja līnijas patiesībā ir. 1066 00:59:52,000 --> 00:59:57,000 Ko darīt, ja tā vietā, mūsu mērķis visbeidzot, lai gan, 1067 00:59:57,000 --> 01:00:00,000 bija meklēt numurus, kā mēs to darījām šeit uz skatuves ar Anita, 1068 01:00:00,000 --> 01:00:02,000 bet mēs patiešām vēlamies labāko no visām šīm pasaulēm? 1069 01:00:02,000 --> 01:00:05,000 Mēs vēlamies izsmalcinātāka nekā masīvs ļauj 1070 01:00:05,000 --> 01:00:09,000 jo mēs vēlamies spēja dinamiski augt datu struktūru. 1071 01:00:09,000 --> 01:00:12,000 Bet mēs negribam, lai būtu spiesta kaut kas mums norādīja 1072 01:00:12,000 --> 01:00:15,000 Pirmajā lekcijā nebija optimāls algoritms, 1073 01:00:15,000 --> 01:00:17,000 ka lineārās meklēšanu. 1074 01:00:17,000 --> 01:00:21,000 Izrādās, ka jūs varat, faktiski, panāktu 1075 01:00:21,000 --> 01:00:24,000 vai vismaz tuvu pastāvīgu laiku, kad kāds, piemēram, Anita, 1076 01:00:24,000 --> 01:00:27,000 ja viņa konfigurē savu datu struktūru nevar būt saistīts saraksts, 1077 01:00:27,000 --> 01:00:30,000 nebūt kaudze, nevis būt rinda, varētu, faktiski, 1078 01:00:30,000 --> 01:00:33,000 nākt klajā ar datu struktūru, kas ļauj viņai meklēt lietas, 1079 01:00:33,000 --> 01:00:37,000 pat vārdiem, ne tikai cipari, ko mēs sauksim pastāvīgu laiku. 1080 01:00:37,000 --> 01:00:40,000 >> Un patiesībā, raugoties nākotnē, viens no šīs klases psets gandrīz vienmēr 1081 01:00:40,000 --> 01:00:43,000 ieviešana Pareizrakstība, kuru 1082 01:00:43,000 --> 01:00:46,000 mēs jums atkal dažas 150,000 angļu vārdiem un mērķis ir 1083 01:00:46,000 --> 01:00:51,000 slodze tiem atmiņā un ātri jāspēj atbildēt uz jautājumiem par formu 1084 01:00:51,000 --> 01:00:54,000 ir šis vārds uzrakstīts pareizi? 1085 01:00:54,000 --> 01:00:58,000 Un tas tiešām sūkāt ja Jums bija atkārtot, izmantojot visus 150,000 vārdiem atbildēt, ka. 1086 01:00:58,000 --> 01:01:02,000 Bet, patiesībā, mēs redzam, ka mēs varam darīt to ļoti, ļoti ātri laikā. 1087 01:01:02,000 --> 01:01:06,000 Un tas notiek, lai iesaistītu īstenošanas kaut ko sauc hash tabulu, 1088 01:01:06,000 --> 01:01:09,000 un pat ja pirmajā mirklī šo lietu sauc hash tabulu gatavojas 1089 01:01:09,000 --> 01:01:12,000 ļaujiet mums sasniegt šos super ātrās reaģēšanas laiks, 1090 01:01:12,000 --> 01:01:18,000 izrādās, ka tur ir patiesībā problēma. 1091 01:01:18,000 --> 01:01:23,000 Kad runa ir laiks, lai īstenotu šo lietu sauc, atkal, es esmu darot to vēlreiz. 1092 01:01:23,000 --> 01:01:25,000 Es esmu tikai viens šeit. 1093 01:01:25,000 --> 01:01:28,000 Kad runa ir laiks, lai īstenotu šo lietu sauc hash tabulu, 1094 01:01:28,000 --> 01:01:30,000 mēs esam nāksies pieņemt lēmumu. 1095 01:01:30,000 --> 01:01:32,000 Cik liels tas lieta tiešām ir? 1096 01:01:32,000 --> 01:01:36,000 Un, kad mēs sākam ievietojot skaitļus šajā hash tabulā, 1097 01:01:36,000 --> 01:01:38,000 Kā mēs glabāt tos tādā veidā 1098 01:01:38,000 --> 01:01:42,000 ka mēs varam saņemt tos atpakaļ, kā ātri, kā mēs saņēmām tos? 1099 01:01:42,000 --> 01:01:45,000 Bet mēs redzēsim pirms ilgi, ka šis jautājums 1100 01:01:45,000 --> 01:01:48,000 Kad visi dzimšanas diena ir savā klasē būs diezgan piederīgs. 1101 01:01:48,000 --> 01:01:51,000 Izrādās, ka šajā telpā, mēs esam ieguvuši dažus simtus cilvēku, 1102 01:01:51,000 --> 01:01:56,000 tāpēc izredzes, ka divi no mums ir pati dzimšanas diena ir iespējams, ir diezgan augsts. 1103 01:01:56,000 --> 01:01:58,000 Ko darīt, ja tur bija tikai 40 no mums šajā telpā? 1104 01:01:58,000 --> 01:02:02,000 Kādas ir par diviem cilvēkiem, kuriem ir vienāds dzimšanas izredzes? 1105 01:02:02,000 --> 01:02:04,000 [Studenti] Vairāk nekā 50%. 1106 01:02:04,000 --> 01:02:06,000 Jā, vairāk nekā 50%. Patiesībā, es pat cēla diagrammu. 1107 01:02:06,000 --> 01:02:08,000 Izrādās-un tas ir tiešām tikai ložņāt preview 1108 01:02:08,000 --> 01:02:12,000 ja tur ir tikai 58 no mums šajā telpā, varbūtība gada 2 no mums 1109 01:02:12,000 --> 01:02:16,000 ar tādu pašu dzimšanas diena ir ļoti augsts, gandrīz 100%, 1110 01:02:16,000 --> 01:02:20,000 un kas notiek, lai radītu veselu ķekars sāp par mums trešdien. 1111 01:02:20,000 --> 01:02:24,000 >> Ar to teica, pieņemsim atliek šeit. Mēs redzēt jūs trešdien. 1112 01:02:24,000 --> 01:02:28,000 [Aplausi] 1113 01:02:28,000 --> 01:02:30,000 [CS50.TV]