1 00:00:00,000 --> 00:00:00,500 2 00:00:00,500 --> 00:00:11,137 [MUZIKO Ludante] 3 00:00:11,137 --> 00:00:12,220 DAVID J. Malan: Bone. 4 00:00:12,220 --> 00:00:13,950 Jen CS50. 5 00:00:13,950 --> 00:00:18,560 Jen semajno kvin daŭrigis, kaj ni havas bonajn novaĵojn kaj iuj malbonaj novaĵoj. 6 00:00:18,560 --> 00:00:21,140 Tiel bona novaĵo estas ke CS50 ĵetas ĉi vendredo. 7 00:00:21,140 --> 00:00:24,430 Se vi ŝatus aliĝi nin estrus al la kutima URL tie. 8 00:00:24,430 --> 00:00:28,670 Eĉ pli bona novaĵo, ne lekcio tiu venanta lundo la 13a. 9 00:00:28,670 --> 00:00:31,970 Iomete malpli bona novaĵo, kvizo nulo estas proksima merkredo. 10 00:00:31,970 --> 00:00:33,840 Pliaj detaloj povas esti troviĝas ĉe ĉi tiu URL tie. 11 00:00:33,840 --> 00:00:36,340 Kaj super la venonta paro tagoj ni estos plenigita de spacoj 12 00:00:36,340 --> 00:00:39,234 koncerne al la salonojn ke ni estos rezervitaj. 13 00:00:39,234 --> 00:00:41,400 Bona novaĵo estas ke ekzistas timige esti supozita monda recenzo 14 00:00:41,400 --> 00:00:43,570 kunsido ĉi venanta Lundo vespere. 15 00:00:43,570 --> 00:00:46,270 Sekvu la kurso retejo por ubicación kaj detaloj. 16 00:00:46,270 --> 00:00:49,290 Sekcioj, kvankam ĝi estas ferio, ankaŭ renkonti tiel. 17 00:00:49,290 --> 00:00:50,490 18 00:00:50,490 --> 00:00:52,940 Bona novaĵo, prelegi proksiman vendredon. 19 00:00:52,940 --> 00:00:56,220 Do tio estas tradicio ni havi, kiel por la Syllabus. 20 00:00:56,220 --> 00:00:58,100 Just-- gxi tuj estos mirinda. 21 00:00:58,100 --> 00:01:02,510 Vi vidos tion kiel konstanta tempo datumstrukturoj 22 00:01:02,510 --> 00:01:04,730 kaj hash tabloj kaj arboj kaj provas. 23 00:01:04,730 --> 00:01:07,150 Kaj ni parolos pri naskiĝtago problemojn. 24 00:01:07,150 --> 00:01:09,440 Tuta aro de aĵoj atendas venontan vendredon. 25 00:01:09,440 --> 00:01:11,212 26 00:01:11,212 --> 00:01:12,200 OK. 27 00:01:12,200 --> 00:01:13,190 Cxiuokaze. 28 00:01:13,190 --> 00:01:17,080 >> Do memoru, ke ni estis centrante sur tiu bildo de kio estas 29 00:01:17,080 --> 00:01:18,980 ene de nia komputilo memoro. 30 00:01:18,980 --> 00:01:22,875 Do memoro aŭ RAM estas kie programoj ekzisti dum vi kuras ilin. 31 00:01:22,875 --> 00:01:25,215 Se vi duoble alklaku la ikono kuri iuj programo 32 00:01:25,215 --> 00:01:27,520 aŭ duoble alklaku la Icon malfermi iun dosieron, 33 00:01:27,520 --> 00:01:30,430 ĝi estas ŝarĝita de via fiksita forpeli aŭ solida stato drive 34 00:01:30,430 --> 00:01:34,190 en RAM, Random Access Memory, kie vivas ĝis la potenco pafas, 35 00:01:34,190 --> 00:01:36,700 la tekkomputilo kovrilon fermas, aŭ vi forlasis la programon. 36 00:01:36,700 --> 00:01:38,960 >> Nun ke memoro, de kion vi probable havos 37 00:01:38,960 --> 00:01:41,950 1 gigabajto tiuj tagoj, 2 gigabajtoj, aŭ eĉ multe pli, 38 00:01:41,950 --> 00:01:44,420 Ĝenerale elspezata por donita programo 39 00:01:44,420 --> 00:01:47,170 en tiu speco de rektangula koncepta modelo 40 00:01:47,170 --> 00:01:50,860 per kiu ni havas la stako ĉe la malsupro kaj estas multaj aliaj aĵoj en la supro. 41 00:01:50,860 --> 00:01:53,140 La afero ĉe la plejsupro ni vidis en tiu bildo 42 00:01:53,140 --> 00:01:55,670 antaŭe sed neniam parolis pri estas la tn teksto segmento. 43 00:01:55,670 --> 00:01:58,419 Teksto segmento estas nur ornama metodo diri la nuloj kaj ke 44 00:01:58,419 --> 00:02:01,150 formi vian realan kompilita programo. 45 00:02:01,150 --> 00:02:03,910 >> Do kiam vi duoble klaki Microsoft Word sur via Mac aŭ PC, 46 00:02:03,910 --> 00:02:08,030 aŭ kiam vi kuros dot slash Mario sur Linuksa komputilo ĉe via fina fenestro, 47 00:02:08,030 --> 00:02:12,460 la nuloj kaj kiuj formas Vorto aŭ Mario stokas temporalmente 48 00:02:12,460 --> 00:02:16,610 en via komputilo RAM en la tn teksto segmento por aparta programo. 49 00:02:16,610 --> 00:02:19,080 Malsupre kiu iras inicializado kaj uninitialized datumoj. 50 00:02:19,080 --> 00:02:22,655 Tiu estas aĵoj kiel tutmonda variabloj, ke ni ne uzas multaj, 51 00:02:22,655 --> 00:02:24,910 sed foje ni havis tutmonda variabloj 52 00:02:24,910 --> 00:02:28,819 aŭ statike difinita kordoj kiuj Estas malfacile kodita vortoj kiel "saluton" 53 00:02:28,819 --> 00:02:31,860 ke ili ne prenas en de la uzanto ke estas malfacile-kodita en via programo. 54 00:02:31,860 --> 00:02:34,230 >> Nun, sube ĉe la malsupro ni havas la tn pilo. 55 00:02:34,230 --> 00:02:37,665 Kaj la pilo, tiel malproksima, ni estis uzante por kiajn celojn? 56 00:02:37,665 --> 00:02:39,706 57 00:02:39,706 --> 00:02:40,997 Kio la stako estis uzata por? 58 00:02:40,997 --> 00:02:41,160 Yeah? 59 00:02:41,160 --> 00:02:42,070 >> Publiko: Funkcioj. 60 00:02:42,070 --> 00:02:43,320 >> DAVID J. Malan: Por funkcioj? 61 00:02:43,320 --> 00:02:44,980 En kiu senco por funkcioj? 62 00:02:44,980 --> 00:02:48,660 >> Publiko: Kiam vi nomas funkcio, la argumentoj estas kopiitaj sur la stako. 63 00:02:48,660 --> 00:02:49,660 >> DAVID J. Malan: Ĝuste. 64 00:02:49,660 --> 00:02:52,650 Kiam vi nomas funkcio, ĝia argumentoj estas kopiitaj sur la stako. 65 00:02:52,650 --> 00:02:56,330 Do ajna X aŭ Y estas aŭ A aŭ de B ke vi pasas en funkcio 66 00:02:56,330 --> 00:02:58,680 estas provizore surmetis la tn stako, 67 00:02:58,680 --> 00:03:02,000 same kiel unu el la Annenberg manĝejo pletoj, kaj ankaŭ tion, 68 00:03:02,000 --> 00:03:03,190 kiel lokaj variabloj. 69 00:03:03,190 --> 00:03:06,290 Se via foo funkcio aŭ via swap funkcio havas lokajn variablojn, 70 00:03:06,290 --> 00:03:08,602 kiel temp, tiuj du finas sur la stako. 71 00:03:08,602 --> 00:03:11,560 Nun, ni ne tro parolas pri ilin, sed ĉi tiuj mediovariabloj 72 00:03:11,560 --> 00:03:15,690 ĉe la malsupro ni vidis faras tempon kiam Mi futzing ĉe la klavaro tago 73 00:03:15,690 --> 00:03:20,050 kaj mi komencis aliri tion kiel argv 100 aŭ argv 1.000, 74 00:03:20,050 --> 00:03:22,320 nur elements-- mi forgesas la numbers-- sed ke 75 00:03:22,320 --> 00:03:24,330 ne supozis esti alirita per mi. 76 00:03:24,330 --> 00:03:26,581 Ni komencas vidante iuj funky simbolojn sur la ekrano. 77 00:03:26,581 --> 00:03:28,330 Tiuj estis tn mediovariabloj 78 00:03:28,330 --> 00:03:32,390 kiel tutmonda agordojn por mia programo aŭ pro mia komputilo, ne 79 00:03:32,390 --> 00:03:37,090 nerilata al la freŝa bug kiu ni diskutis, 80 00:03:37,090 --> 00:03:39,670 Shellshock, tio estis plaguing sufiĉe da komputiloj. 81 00:03:39,670 --> 00:03:42,960 >> Nun fine, en hodiaŭa fokuso ni finfine estos sur la monteto. 82 00:03:42,960 --> 00:03:44,864 Tio estas alia bloko de memoro. 83 00:03:44,864 --> 00:03:47,030 Kaj funde ĉiuj ĉi memoro estas la samaj aĵoj. 84 00:03:47,030 --> 00:03:48,040 Ĝi estas la sama aparataro. 85 00:03:48,040 --> 00:03:49,956 Ni estas nur ia trakti malsamajn vinberarojn 86 00:03:49,956 --> 00:03:51,460 de bajtoj por malsamaj celoj. 87 00:03:51,460 --> 00:03:56,540 La havaĵo estas ankaŭ tuj estos kie variabloj kaj memoro kiun vi petos 88 00:03:56,540 --> 00:03:58,810 de la operaciumo estas provizore stokas. 89 00:03:58,810 --> 00:04:01,890 >> Sed estas tipo de problemo ĉi tie, kiel la bildo implicas. 90 00:04:01,890 --> 00:04:05,261 Ni ia havas du ŝipoj pri karamboli. 91 00:04:05,261 --> 00:04:08,010 Ĉar kiel vi uzas pli kaj pli de la stako, kaj kiel ni vidas hodiaŭ 92 00:04:08,010 --> 00:04:11,800 antaŭen, kiel vi uzas pli kaj pli de la amason, verŝajne malbonaj aferoj povus okazi. 93 00:04:11,800 --> 00:04:15,054 Kaj efektive, ni povas indukti ke intence aŭ senintence. 94 00:04:15,054 --> 00:04:16,970 Do la cliffhanger lasta tempo estis ĉi programo, 95 00:04:16,970 --> 00:04:20,570 kiu ne servas neniun funkcian celo alia ol pruvi 96 00:04:20,570 --> 00:04:24,750 kiel vi kiel malbona ulo povas reale preni avantaĝon de cimoj en ies programo 97 00:04:24,750 --> 00:04:28,460 kaj transpreni programo aŭ eĉ tuta komputila sistemo aŭ servilo. 98 00:04:28,460 --> 00:04:31,660 Do ĝuste rigardo mallonge, vi rimarki ke ĉefa malsupre 99 00:04:31,660 --> 00:04:34,510 prenas en komanda linio argumentoj, kiel po argv. 100 00:04:34,510 --> 00:04:38,480 Kaj ĝi havas alvokon al funkcio f, esence sennoma funkcio nomita 101 00:04:38,480 --> 00:04:40,250 f, kaj ĝin pasante en argv [1]. 102 00:04:40,250 --> 00:04:43,960 >> Do kion ajn vorton la uzanto tajpas en ĉe la prompto post tiu programo nomon 103 00:04:43,960 --> 00:04:49,310 kaj tiam ĉi arbitra funkcio supren supro, f, prenas en ĉeno, AKA char *, 104 00:04:49,310 --> 00:04:51,720 kiel ni komencis diskuti, kaj simple nomas ĝin "trinkejo". 105 00:04:51,720 --> 00:04:53,310 Sed ni povus nomi ĝin nenion. 106 00:04:53,310 --> 00:04:57,470 Kaj tiam ĝi deklaras, enen de f, tabelo de signoj 107 00:04:57,470 --> 00:04:59,930 nomata c-- 12 tiajn karakterojn. 108 00:04:59,930 --> 00:05:03,580 >> Nun, por la rakonto mi estis rakontanta antaŭ momento, kie en memoro 109 00:05:03,580 --> 00:05:06,720 estas c, aŭ estas tiuj 12 signaĵoj tuj finos? 110 00:05:06,720 --> 00:05:07,570 Nur por esti klara. 111 00:05:07,570 --> 00:05:08,070 Yeah? 112 00:05:08,070 --> 00:05:08,590 >> Publiko: Sur la stako. 113 00:05:08,590 --> 00:05:09,420 >> DAVID J. Malan: Sur la stako. 114 00:05:09,420 --> 00:05:10,720 Do c estas loka variablo. 115 00:05:10,720 --> 00:05:14,079 Ni petas 12 signoj aŭ 12 bajtoj. 116 00:05:14,079 --> 00:05:16,120 Tiuj tuj finos sur la tiel-nomata pilo. 117 00:05:16,120 --> 00:05:18,530 Nun fine estas tiu alia funkcio tio estas vere bela utila, 118 00:05:18,530 --> 00:05:20,571 sed ni ne vere uzita gxi mem, strncopy. 119 00:05:20,571 --> 00:05:21,550 120 00:05:21,550 --> 00:05:25,200 Ĝi signifas ĉenon kopion, sed nur n leteroj, n gravuloj. 121 00:05:25,200 --> 00:05:31,990 Do n karakteroj estos kopiita de trinkejo en c. 122 00:05:31,990 --> 00:05:32,980 Kaj kiom? 123 00:05:32,980 --> 00:05:34,110 La longo de trinkejo. 124 00:05:34,110 --> 00:05:36,330 Do alivorte, ke unu linio, strncopy, 125 00:05:36,330 --> 00:05:39,500 tuj kopii efike bari al c. 126 00:05:39,500 --> 00:05:42,340 >> Nun, nur por ia anticipi la moralo de tiu rakonto, 127 00:05:42,340 --> 00:05:44,750 kio estas potenciale problemaj tie? 128 00:05:44,750 --> 00:05:49,710 Eĉ kvankam ni kontrolanta la longo el trinkejo kaj pasante ĝin en strncopy, 129 00:05:49,710 --> 00:05:53,145 kio estas via gut diri vin estas ankoraŭ rompita sur tiun programon? 130 00:05:53,145 --> 00:05:54,410 131 00:05:54,410 --> 00:05:55,220 Yeah? 132 00:05:55,220 --> 00:05:57,491 >> Publiko: Ne inkluzivi spaco por la nula karaktero. 133 00:05:57,491 --> 00:05:59,990 DAVID J. Malan: Ne inkluzivi spaco por la nula karaktero. 134 00:05:59,990 --> 00:06:02,073 Potenciale, kontraste en estinteco praktiko ni faras eĉ 135 00:06:02,073 --> 00:06:04,810 havas tiel kiel plus 1 por akomodi ke nula karaktero. 136 00:06:04,810 --> 00:06:06,649 Sed ĝi estas eĉ pli malbona ol tiu. 137 00:06:06,649 --> 00:06:07,940 Kion alian ni maltrafas fari? 138 00:06:07,940 --> 00:06:08,432 Yeah? 139 00:06:08,432 --> 00:06:09,307 >> Publiko: [inaudible] 140 00:06:09,307 --> 00:06:15,440 141 00:06:15,440 --> 00:06:16,440 DAVID J. Malan: Perfekta. 142 00:06:16,440 --> 00:06:18,490 Ni malfacile kodita 12 belaj arbitre. 143 00:06:18,490 --> 00:06:19,497 144 00:06:19,497 --> 00:06:21,330 Tio estas ne tiom la problemo, sed la fakto 145 00:06:21,330 --> 00:06:25,630 ke ni eĉ ne kontrolanta se la longo de stango estas malpli ol 12, 146 00:06:25,630 --> 00:06:28,530 en kies kazo tuj estos sekure metis ĝin en la memoro 147 00:06:28,530 --> 00:06:30,260 nomata c ke ni asignitaj. 148 00:06:30,260 --> 00:06:32,960 Ja, se stango estas kiel 20 signojn longa, 149 00:06:32,960 --> 00:06:39,010 tiu funkcio aperas esti kopiado 20 karakterojn de drinkejo en c, tiamaniere 150 00:06:39,010 --> 00:06:41,310 preni almenaŭ 8 bajtoj ke ĝi ne devus esti. 151 00:06:41,310 --> 00:06:42,690 Tio estas la implico ĉi tie. 152 00:06:42,690 --> 00:06:44,347 >> Do mallonge, rompita programo. 153 00:06:44,347 --> 00:06:45,180 Ne tia granda interkonsento. 154 00:06:45,180 --> 00:06:46,360 Eble vi ricevas segmentación kulpo. 155 00:06:46,360 --> 00:06:47,651 Ni ĉiuj havis cimoj en programoj. 156 00:06:47,651 --> 00:06:50,196 Ni ĉiuj havu cimoj en programoj nun. 157 00:06:50,196 --> 00:06:51,320 Sed kio estas la implikaĵo? 158 00:06:51,320 --> 00:06:54,390 Nu, jen zomita-en versio ke bildon de mia komputilo memoro. 159 00:06:54,390 --> 00:06:56,230 Tiu estas la fundo de mia pilo. 160 00:06:56,230 --> 00:06:59,644 Kaj efektive, en la tre fundo estas kio estas nomata patro rutinon stako, ornama metodo 161 00:06:59,644 --> 00:07:00,560 diri ke estas ĉefa. 162 00:07:00,560 --> 00:07:03,772 Tiel ke kiu nomis la funkcio f kiu ni parolas. 163 00:07:03,772 --> 00:07:05,230 Do tio estas la fundo de la stako. 164 00:07:05,230 --> 00:07:06,640 Reveno adreso estas io nova. 165 00:07:06,640 --> 00:07:08,810 Ĝi ĉiam estis tie, ĉiam estis en tiu bildo. 166 00:07:08,810 --> 00:07:10,440 Ni simple neniam nomis atenton al ĝi. 167 00:07:10,440 --> 00:07:15,290 Ĉar ĝi rezultas la vojo c laboras estas ke kiam unu funkcio vokas alian, 168 00:07:15,290 --> 00:07:18,780 Ne nur faras la argumentoj por ke funkcio get puŝis sur la stako, 169 00:07:18,780 --> 00:07:22,470 Ne nur faras la funkcion de loka variabloj get puŝis sur la stako, 170 00:07:22,470 --> 00:07:26,820 iu nomita reveno adreso ankaŭ akiras metita sur la stako. 171 00:07:26,820 --> 00:07:33,330 Specife, se ĉefa alvokoj Foo, ĉefaj La propra adreso en memoro, bovo ion, 172 00:07:33,330 --> 00:07:38,240 efike akiras metita sur la pilo tiel ke kiam f estas farita ekzekuti ĝin 173 00:07:38,240 --> 00:07:43,630 scias kie saltas reen al la teksto segmenton por daŭrigi ekzekuti. 174 00:07:43,630 --> 00:07:47,760 >> Do se ni estos tie koncepte, en ĉefa, tiam f atingas vokis. 175 00:07:47,760 --> 00:07:50,200 Kiel f scias kiu mane kontrolo reen? 176 00:07:50,200 --> 00:07:52,020 Nu, tiu malmulte breadcrumb ruĝe tie, 177 00:07:52,020 --> 00:07:54,978 vokis la reveno adreso, ĝi simple ĉekojn kian reveno adreso? 178 00:07:54,978 --> 00:07:57,039 Ho, lasu min saltas reen al ĉefa tie. 179 00:07:57,039 --> 00:07:59,080 Kaj tio iomete de simplificación, 180 00:07:59,080 --> 00:08:00,750 ĉar la nuloj kaj por ĉefaj estas teknike 181 00:08:00,750 --> 00:08:01,967 tien en la tech segmento. 182 00:08:01,967 --> 00:08:03,800 Sed tio estas la ideo. f suficas por scii kio 183 00:08:03,800 --> 00:08:06,680 kie kontrolo finfine superas. 184 00:08:06,680 --> 00:08:09,790 >> Sed la vojo de komputiloj delonge elspezata aferoj 185 00:08:09,790 --> 00:08:12,320 kiel lokaj variabloj kaj argumentoj estas kiel ĉi. 186 00:08:12,320 --> 00:08:17,180 Do, en la supro de ĉi tiu pentraĵo en blua estas la pilo kadro por f, do ĉiuj 187 00:08:17,180 --> 00:08:19,630 el la memoro, ke f specife estas uzanta. 188 00:08:19,630 --> 00:08:22,990 Do laŭe, rimarki ke trinkejo estas en tiu bildo. 189 00:08:22,990 --> 00:08:23,980 Trinkejo estis lia argumento. 190 00:08:23,980 --> 00:08:27,240 Kaj ni asertis ke argumentoj funkcioj get puŝis sur la stako. 191 00:08:27,240 --> 00:08:29,910 Kaj c, kompreneble, estas Ankaŭ en ĉi tiu bildo. 192 00:08:29,910 --> 00:08:33,520 >> Kaj ĝuste pro notacian celoj rimarki supre maldekstra angulo 193 00:08:33,520 --> 00:08:37,020 Estas kio estus c krampo 0 kaj tiam iomete malsupren dekstren 194 00:08:37,020 --> 00:08:38,220 estas c krampo 11. 195 00:08:38,220 --> 00:08:41,240 Do alivorte, vi povas imagi ke estas krado de bitokoj 196 00:08:41,240 --> 00:08:44,380 tie, la unua de kiuj estas supre maldekstre, malsupre de kiuj 197 00:08:44,380 --> 00:08:48,360 Estas la lasta de tiuj 12 bajtoj. 198 00:08:48,360 --> 00:08:49,930 >> Sed nun provu fasti antaŭen. 199 00:08:49,930 --> 00:08:55,580 Kio estas por okazi se ni pasas en string trinkejo kiu estas pli longa ol c? 200 00:08:55,580 --> 00:08:59,130 Kaj ni ne kontrolanta se ĝi estas ja pli longa ol 12. 201 00:08:59,130 --> 00:09:03,146 Kiun parton de ĉi tiu pentraĵo tuj get anstataŭigata per bitokoj 0, 1, 2, 3, 202 00:09:03,146 --> 00:09:07,890 dot dot dot, 11, kaj poste malbona, 12, 13 tra 19? 203 00:09:07,890 --> 00:09:11,820 Kio okazos tie, se konkludi el la ordenamiento 204 00:09:11,820 --> 00:09:14,790 ke c krampo 0 estas ĉe la supro kaj c krampo 11 estas speco de sube 205 00:09:14,790 --> 00:09:15,812 al la dekstra? 206 00:09:15,812 --> 00:09:16,796 Yeah? 207 00:09:16,796 --> 00:09:19,260 >> Publiko: Nu, ĝi okazas reskribi la signo * stangon. 208 00:09:19,260 --> 00:09:22,260 >> DAVID J. Malan: Jes, tio aspektas kiel vi tuj reskribi char * stangon. 209 00:09:22,260 --> 00:09:26,245 Malbono, se vi sendas en vere longa kordo, vi eble eĉ anstataŭigi kio? 210 00:09:26,245 --> 00:09:27,460 211 00:09:27,460 --> 00:09:28,570 La reveno adreso. 212 00:09:28,570 --> 00:09:31,380 Kio denove estas kiel breadcrumb diri la programo kie 213 00:09:31,380 --> 00:09:34,060 iri reen al kiam f estas farita vokite. 214 00:09:34,060 --> 00:09:37,140 >> Do kio maliculojn tipe fari Estas kvazaŭ ili ektrovas programo 215 00:09:37,140 --> 00:09:41,290 ke ili estas scivola ĉu estas explotables, kalesxo tiel 216 00:09:41,290 --> 00:09:43,550 ke li aŭ ŝi povas preni avantaĝon de tiu besteto, 217 00:09:43,550 --> 00:09:45,720 ĝenerale ili ne ricevas ĉi tiu rajto unuafoje. 218 00:09:45,720 --> 00:09:48,590 Ili simple komenci sendi, ekzemple, hazarda kordoj en vian programon, 219 00:09:48,590 --> 00:09:50,260 ĉu ĉe la klavaro, aŭ sincere ili probable 220 00:09:50,260 --> 00:09:52,740 skribi iom programo simple aŭtomate generi kordoj, 221 00:09:52,740 --> 00:09:55,430 kaj komencos batante en via programo per sendo en multaj malsamaj enigoj 222 00:09:55,430 --> 00:09:56,340 ĉe malsamaj longoj. 223 00:09:56,340 --> 00:09:58,990 >> Kiam via programo kraŝoj, tio estas miriga afero. 224 00:09:58,990 --> 00:10:01,020 Ĉar ĝi signifas li aŭ ŝi eltrovis 225 00:10:01,020 --> 00:10:02,660 kio estas verŝajne ja cimon. 226 00:10:02,660 --> 00:10:05,830 Kaj tiam ili povas akiri pli ruza kaj komenci enfokusigante pli mallarĝa 227 00:10:05,830 --> 00:10:07,420 sur kiel eksplodi ke cimoj. 228 00:10:07,420 --> 00:10:11,480 En aparta, kion li aŭ ŝi povus fari estas sendi, en la plej bona kazo, saluton. 229 00:10:11,480 --> 00:10:12,210 Neniu granda interkonsento. 230 00:10:12,210 --> 00:10:14,750 Ĝi estas ĉeno kiu estas sufiĉe mallonga. 231 00:10:14,750 --> 00:10:18,100 Sed kio se li aŭ ŝi sendas, kaj ni ĝeneraligi ĝin, 232 00:10:18,100 --> 00:10:20,890 atako code-- tiom nuloj kaj kiuj faras aferojn 233 00:10:20,890 --> 00:10:25,150 kiel rm-RF, ke forigi ĉiun de la malmola disko aŭ sendu spamon 234 00:10:25,150 --> 00:10:27,000 aŭ iel atakas la maŝino? 235 00:10:27,000 --> 00:10:29,570 >> Do se ĉiu el tiuj literojn A simple reprezentas, 236 00:10:29,570 --> 00:10:32,380 koncepte, atako, atako, atako, atako, iuj malbonaj kodo 237 00:10:32,380 --> 00:10:36,410 ke iu alia skribis, sed se tiu persono estas inteligenta sufiĉa 238 00:10:36,410 --> 00:10:40,790 ne nur inkludas ĉiuj de tiuj rm-RFS, sed ankaŭ 239 00:10:40,790 --> 00:10:46,100 havi sian lastan malmultajn bajtojn esti nombro kiu respondas 240 00:10:46,100 --> 00:10:50,540 al la adreso de liaj aŭ ŝia propra atako kodo 241 00:10:50,540 --> 00:10:53,820 ke li aŭ ŝi pasis en nur per provizi ĝin ĉe la prompto: 242 00:10:53,820 --> 00:10:58,760 vi povas efike trompi la komputilo en rimarkante kiam f estas farita ekzekuti, 243 00:10:58,760 --> 00:11:02,400 ho, ke estas tempo por mi salti reen al la ruĝa reveno adreso. 244 00:11:02,400 --> 00:11:06,070 Sed ĉar li aŭ ŝi devas iel koincidis ke reveno adreso 245 00:11:06,070 --> 00:11:09,602 per sia propra nombro kaj ili estas inteligenta sufiĉa 246 00:11:09,602 --> 00:11:11,560 esti agordita ke numeron raporti, kiel vi 247 00:11:11,560 --> 00:11:13,740 vidi en la súper supro maldekstra angulo, 248 00:11:13,740 --> 00:11:18,020 la realan adreson en la komputilo memoro de kelkaj el siaj atako kodo, 249 00:11:18,020 --> 00:11:21,740 malbona ulo povas trompi la komputilo en ekzekuti sian propran kodon. 250 00:11:21,740 --> 00:11:23,700 >> Kaj tiu kodo, denove, ĝi povas esti io. 251 00:11:23,700 --> 00:11:26,120 Ĝi estas ĝenerale nomata konko kodo, kiu estas nur 252 00:11:26,120 --> 00:11:29,030 maniero diri ke ĝi estas ne ĝenerale iu tiel simpla kiel rm-RF. 253 00:11:29,030 --> 00:11:32,340 Estas vere iu kiel Bash, aŭ reala programo kiu donas al li 254 00:11:32,340 --> 00:11:37,230 aŭ ŝi programa kontrolon ekzekuti io alia, ke ili volas. 255 00:11:37,230 --> 00:11:40,210 Do mallonge, tiu tuta derivas de la simpla fakto 256 00:11:40,210 --> 00:11:44,490 ke tio cimon implikis ne kontrolanta la limoj de via tabelo. 257 00:11:44,490 --> 00:11:47,250 Kaj ĉar la vojo komputiloj verko estas ke 258 00:11:47,250 --> 00:11:49,430 uzi la stako de efektive, koncepte, 259 00:11:49,430 --> 00:11:54,830 malsupro supren, sed tiam la elementoj vi pelas sur la stako kreskis supre malsupren, 260 00:11:54,830 --> 00:11:56,624 tio estas nekredeble problema. 261 00:11:56,624 --> 00:11:58,290 Nun, estas formoj por labori ĉirkaŭ tiu. 262 00:11:58,290 --> 00:12:00,800 Kaj sincere, ekzistas lingvoj kun kiu labori ĉirkaŭ tiu. 263 00:12:00,800 --> 00:12:03,100 Java estas imunaj, ekzemple, al tiu aparta temo. 264 00:12:03,100 --> 00:12:04,110 Ĉar ili ne donos al vi punteros. 265 00:12:04,110 --> 00:12:05,943 Ili ne donas vin rekta memoro adresoj. 266 00:12:05,943 --> 00:12:08,560 Do per tiu potenco kiun ni havas tuŝi ion en la memoro 267 00:12:08,560 --> 00:12:11,580 Ni volas venas, rekoni, grandaj risko. 268 00:12:11,580 --> 00:12:12,430 >> Do subteni okulon ekstere. 269 00:12:12,430 --> 00:12:14,596 Se, sincere, en la monatoj aŭ jaroj por veni, ĉiutempe 270 00:12:14,596 --> 00:12:17,740 Vi legas pri iuj ekspluatado de programo aŭ servilo, 271 00:12:17,740 --> 00:12:22,370 Se vi iam vidis aludon pri io kiel buffer overflow atakon, 272 00:12:22,370 --> 00:12:25,390 aŭ stack overflow estas alia tipo de atako, simila en spirito, 273 00:12:25,390 --> 00:12:28,770 kiom inspiru la TTT-ejo nomo, se vi konas ĝin, 274 00:12:28,770 --> 00:12:33,170 ĝi estas cxiuj parolas nur disversxigxinta la grandeco de iu gravulo 275 00:12:33,170 --> 00:12:36,200 tabelo aŭ iu tabelo pli ĝenerale. 276 00:12:36,200 --> 00:12:38,822 Demandojn, tiam, sur tiu? 277 00:12:38,822 --> 00:12:39,780 Ne provu ĉi hejme. 278 00:12:39,780 --> 00:12:41,620 279 00:12:41,620 --> 00:12:42,300 >> Bone. 280 00:12:42,300 --> 00:12:47,270 Do malloc tiel multe estis nia nova amiko en kiu povas atribui memoron 281 00:12:47,270 --> 00:12:50,540 ke ni ne nepre scias antaŭeniri ke ni volas do ni ne havas 282 00:12:50,540 --> 00:12:52,920 malmolaj kodon en nian programo nombroj kiel 12. 283 00:12:52,920 --> 00:12:55,550 Iam la uzanto diras ni kiom datumoj li aŭ ŝi volas enigi, 284 00:12:55,550 --> 00:12:58,000 ni povas malloc ke multa memoro. 285 00:12:58,000 --> 00:13:01,484 >> Do malloc rezultas, ke la mezuro ni estis uzante ĝin, 286 00:13:01,484 --> 00:13:03,900 eksplicite lastan fojon, kaj tiam vi uloj estis uzante ĝin 287 00:13:03,900 --> 00:13:08,160 por getstring scii por pluraj semajnoj, ĉiuj malloc memoro 288 00:13:08,160 --> 00:13:09,820 devenas la tn havaĵon. 289 00:13:09,820 --> 00:13:13,852 Kaj tio estas kial getstring, ekzemple, povas atribui memoron dinamike 290 00:13:13,852 --> 00:13:16,060 sen scii kion vi estas tuj tajpi anticipe, 291 00:13:16,060 --> 00:13:21,520 transdonos vin puntero al tiu memoro, kaj tiu memoro estas ankoraŭ via teni, 292 00:13:21,520 --> 00:13:24,080 eĉ post getstring revenas. 293 00:13:24,080 --> 00:13:27,450 Ĉar recall post ĉio, kion la pilo senĉese iras supren kaj malsupren, 294 00:13:27,450 --> 00:13:27,950 supren kaj malsupren. 295 00:13:27,950 --> 00:13:30,230 Kaj post kiam ĝi iras malsupren, tio signifas ajnan memoron 296 00:13:30,230 --> 00:13:33,030 tiu funkcio uzata devus ne estos uzata de iu ajn alia. 297 00:13:33,030 --> 00:13:34,570 Ĝi estas rubo valoroj nun. 298 00:13:34,570 --> 00:13:36,120 >> Sed la havaĵon estas ĉi tie. 299 00:13:36,120 --> 00:13:39,360 Kaj kio estas agrabla pri malloc estas ke kiam malloc atribuas memoro tien, 300 00:13:39,360 --> 00:13:42,070 ĝi ne efikis, por la Plejparte, la stako. 301 00:13:42,070 --> 00:13:46,000 Kaj tial ajna funkcio povas aliri memoro kiu estis malloc'd, 302 00:13:46,000 --> 00:13:49,120 eĉ per funkcio kiel getstring, eĉ post kiam ĝi revenis. 303 00:13:49,120 --> 00:13:51,700 >> Nun, la reo de malloc estas libera. 304 00:13:51,700 --> 00:13:53,900 Kaj efektive, la regulo vin bezonas komenci adoptante 305 00:13:53,900 --> 00:13:58,950 Estas neniu, ia, ia tempo vi uzas malloc Vi devas mem uzi liberan, eventuale, 306 00:13:58,950 --> 00:14:00,280 sur tiu sama montrilo. 307 00:14:00,280 --> 00:14:03,289 Ĉiuj ĉi tiu tempo ni estis skribante kalesxo, kalesxo kodo, por multaj kialoj. 308 00:14:03,289 --> 00:14:05,580 Sed unu el kiuj estis uzanta la CS50 biblioteko, kiu 309 00:14:05,580 --> 00:14:09,010 sin estas intence kalesxo, ĝi filtras la memoro. 310 00:14:09,010 --> 00:14:11,410 Ajna tempo vi nomis getstring super la pasintaj semajnoj 311 00:14:11,410 --> 00:14:13,870 ni demandas la mastruma sistemo, Linukso, por memoro. 312 00:14:13,870 --> 00:14:15,780 Kaj vi neniam iam donis ĝin reen. 313 00:14:15,780 --> 00:14:17,730 Kaj tio ne estas, praktiki, estas bona afero. 314 00:14:17,730 --> 00:14:20,330 >> Kaj Valgrind, unu el la iloj enkondukita en Pset 4 315 00:14:20,330 --> 00:14:22,900 Estas ĉio pri helpas vin nun trovi insektojn kiel tio. 316 00:14:22,900 --> 00:14:27,060 Sed dankeme por Pset 4 Vi ne bezonas uzi la CS50 biblioteko aŭ getstring. 317 00:14:27,060 --> 00:14:31,220 Do cimojn rilataj al memoro estas fine tuj estos via. 318 00:14:31,220 --> 00:14:34,060 >> Do malloc estas pli ol nur konvena por tiu celo. 319 00:14:34,060 --> 00:14:37,420 Ni povas fakte nun solvi fundamente malsamaj problemoj, 320 00:14:37,420 --> 00:14:41,640 kaj fundamente solvi problemojn pli efike kiel por semajno nulo promeson. 321 00:14:41,640 --> 00:14:44,720 Tiel nun tio estas la pli sexy datumstrukturo ni havis. 322 00:14:44,720 --> 00:14:47,804 Kaj per datumstrukturo Mi nur volas diri manieron de koncepti memoro 323 00:14:47,804 --> 00:14:50,720 en maniero kiu iras preter nur diras, tio estas int, tio estas char. 324 00:14:50,720 --> 00:14:52,930 Ni povas komenci cluster aferojn kune. 325 00:14:52,930 --> 00:14:54,460 >> Do tabelo aspektis kiel ĉi. 326 00:14:54,460 --> 00:14:57,270 Kaj kio estis ŝlosila en proksimume tabelo estas kiu donas al vi 327 00:14:57,270 --> 00:14:59,724 back-to-back pecojn de memoro, ĉiu el kiuj 328 00:14:59,724 --> 00:15:02,765 tuj estos la sama tipo, int, int, int, int, aŭ signo, char, char, 329 00:15:02,765 --> 00:15:03,330 char. 330 00:15:03,330 --> 00:15:04,496 Sed estas kelkaj downsides. 331 00:15:04,496 --> 00:15:06,570 Ĉi ekzemple, estas tabelo de amplekso ses. 332 00:15:06,570 --> 00:15:10,650 Supozi vi plenigos ĉi tabelo kun ses nombroj kaj tiam, por kiaj kialoj, 333 00:15:10,650 --> 00:15:13,187 via uzanto volas doni vi sepa nombro. 334 00:15:13,187 --> 00:15:14,020 Kie vi metis ĝin? 335 00:15:14,020 --> 00:15:15,490 336 00:15:15,490 --> 00:15:18,990 >> Kio estas la solvo, se vi havas kreis tabelon sur la stako, 337 00:15:18,990 --> 00:15:22,030 ekzemple, nur per la semajno du notacio ke ni enkondukas, 338 00:15:22,030 --> 00:15:23,730 de kvadrataj krampoj kun numero ene? 339 00:15:23,730 --> 00:15:25,160 340 00:15:25,160 --> 00:15:27,260 Nu, vi havas ses nombroj en tiuj skatoloj. 341 00:15:27,260 --> 00:15:28,530 Kio estus via instinktoj esti? 342 00:15:28,530 --> 00:15:29,973 Kie vi volas meti ĝin? 343 00:15:29,973 --> 00:15:30,860 >> Publiko: [inaudible] 344 00:15:30,860 --> 00:15:31,315 >> DAVID J. Malan: Pardonu? 345 00:15:31,315 --> 00:15:32,380 >> Publiko: Metu ĝin sur la pinto. 346 00:15:32,380 --> 00:15:33,796 >> DAVID J. Malan: Remetu ĝin sur la pinto. 347 00:15:33,796 --> 00:15:35,880 Do ĝuste super la rajto, ekster tiu skatolo. 348 00:15:35,880 --> 00:15:38,710 Kiu estus bela, sed rezultas vi ne povas fari tion. 349 00:15:38,710 --> 00:15:41,350 Ĉar se vi ne petis por tio eron de memoro, 350 00:15:41,350 --> 00:15:44,490 ĝi povus esti por coincidencia ke tiu estas uzata de iu alia variablo 351 00:15:44,490 --> 00:15:45,030 entute. 352 00:15:45,030 --> 00:15:49,210 Pensu reen semajno aŭ tiel kiam ni metis el Zamyla kaj Davin kaj Gabe nomoj 353 00:15:49,210 --> 00:15:49,930 en memoro. 354 00:15:49,930 --> 00:15:51,638 Ili estis laŭvorte malantaŭo al malantaŭo al dorso. 355 00:15:51,638 --> 00:15:53,550 Do ni ne povas nepre esperas ke cxio estas 356 00:15:53,550 --> 00:15:55,800 tien disponeblas por mi uzi. 357 00:15:55,800 --> 00:15:56,990 >> Do kion alian povus fari? 358 00:15:56,990 --> 00:16:00,282 Nu, iam rimarki vin bezonas tabelo de amplekso sep, 359 00:16:00,282 --> 00:16:02,490 Vi povus simple krei tabelo de amplekso sep tiam uzi 360 00:16:02,490 --> 00:16:05,950 a por buklo aŭ dum buklo, kopii ĝin en la nova tabelo, 361 00:16:05,950 --> 00:16:09,680 kaj do iel simple forigi tiu tabelo aŭ simple ĉesi uzi ĝin. 362 00:16:09,680 --> 00:16:12,130 Sed tio ne estas aparte efika. 363 00:16:12,130 --> 00:16:15,340 Mallonge, arrays ne lasu vi dinamike regrandigi. 364 00:16:15,340 --> 00:16:17,900 >> Tiel unuflanke vi ricevas hazarda aliro, kiu estas mirinda. 365 00:16:17,900 --> 00:16:20,108 Ĉar ĝi permesas nin fari tion kiel dividu kaj regu, 366 00:16:20,108 --> 00:16:23,100 duuma serĉo, ĉiuj el kiuj ni parolis sur la ekrano tie. 367 00:16:23,100 --> 00:16:24,950 Sed vi pentri vin en angulon. 368 00:16:24,950 --> 00:16:27,810 Tuj kiam vi batis la finon de via tabelo, 369 00:16:27,810 --> 00:16:29,980 Vi devos fari tre multekosta operacio 370 00:16:29,980 --> 00:16:33,910 aŭ skribi tutan faskon da kodo nun trakti kun tiu problemo. 371 00:16:33,910 --> 00:16:36,680 >> Do kio se anstataŭ ni devis iu nomita lerta, 372 00:16:36,680 --> 00:16:38,820 aŭ ligillisto en aparta? 373 00:16:38,820 --> 00:16:41,930 Kio se anstataŭ devi rektanguloj Reen al malantaŭo al malantaŭo, 374 00:16:41,930 --> 00:16:45,730 ni havos rektanguloj kiuj lasas malmulte iom de menea ĉambron inter ili? 375 00:16:45,730 --> 00:16:49,670 Kaj kvankam mi desegnis tiun bildo aŭ adaptita ĉi bildo 376 00:16:49,670 --> 00:16:54,696 de unu el la tekstoj tie esti reen al malantaŭo al malantaŭo tre bonorda, en realo, 377 00:16:54,696 --> 00:16:56,820 unu el tiuj rektanguloj povus esti ĝis tie en la memoro. 378 00:16:56,820 --> 00:16:58,028 Unu el ili povus esti ĉi tie. 379 00:16:58,028 --> 00:17:00,420 Unu el ili povus esti ĝis tie, tien, kaj tiel plu. 380 00:17:00,420 --> 00:17:02,910 >> Sed kio se ni tiris, en tiu kazo, Sagojn 381 00:17:02,910 --> 00:17:05,650 ke iel ligas tiujn rektanguloj kune? 382 00:17:05,650 --> 00:17:08,170 Ja, ni vidis teknikan personigo de sago. 383 00:17:08,170 --> 00:17:09,839 384 00:17:09,839 --> 00:17:13,710 Kion ni uzis dum la lastaj tagojn kiuj, sub la kapuĉo, 385 00:17:13,710 --> 00:17:15,210 estas reprezentanto de sago? 386 00:17:15,210 --> 00:17:16,290 387 00:17:16,290 --> 00:17:17,349 A montrilo, dekstra? 388 00:17:17,349 --> 00:17:19,780 >> Do kio se, anstataŭ nur stokante la numerojn, 389 00:17:19,780 --> 00:17:23,130 kiel 9, 17, 22, 26, 34, kio se ni stokas ne 390 00:17:23,130 --> 00:17:27,079 nur numero sed puntero apud ĉiu tia nombro? 391 00:17:27,079 --> 00:17:30,690 Tiel ke multe kiel vi ŝpinas a kudrilo tra tuta fasko da ŝtofo, 392 00:17:30,690 --> 00:17:32,950 iel ligante aferoj kune, simile povas 393 00:17:32,950 --> 00:17:35,550 ni kun montriloj, kiel korpigitaj de sagoj tie, 394 00:17:35,550 --> 00:17:38,550 ia teksas kune tiuj individuaj rektanguloj 395 00:17:38,550 --> 00:17:41,780 per efike uzi puntero apud ĉiu numero kiu 396 00:17:41,780 --> 00:17:46,065 antaŭ iu proksima nombro, ke notas al tio, siavice, iuj apud numeron? 397 00:17:46,065 --> 00:17:47,940 Do alivorte, kion se ni vere volas 398 00:17:47,940 --> 00:17:49,820 implementar iu kiel ĉi tiu? 399 00:17:49,820 --> 00:17:53,610 Nu, bedaŭrinde, tiuj rektanguloj, almenaŭ unu per 9, 17, 22, 400 00:17:53,610 --> 00:17:57,040 ks, tiuj ne plu nice kvadratoj kun sola nombroj. 401 00:17:57,040 --> 00:17:59,960 La fundo, rektangulo sub 9, ekzemple, 402 00:17:59,960 --> 00:18:04,330 reprezentas kio devus esti montrilo, 32 bitoj. 403 00:18:04,330 --> 00:18:09,460 Nun, mi ne rimarkis ian datumtipo en C kiu donas ne nur int 404 00:18:09,460 --> 00:18:11,630 sed puntero entute. 405 00:18:11,630 --> 00:18:15,020 >> Do kio estas la solvo, se ni volas elpensi nian propran respondon al tio? 406 00:18:15,020 --> 00:18:15,760 Yeah? 407 00:18:15,760 --> 00:18:16,640 >> Publiko: [inaudible] 408 00:18:16,640 --> 00:18:17,360 >> DAVID J. Malan: Kio estas tio? 409 00:18:17,360 --> 00:18:17,880 >> Publiko: Nova strukturo. 410 00:18:17,880 --> 00:18:19,590 >> DAVID J. Malan: Jes, do kial ni ne kreu novan strukturon, 411 00:18:19,590 --> 00:18:20,920 aŭ en C, struct? 412 00:18:20,920 --> 00:18:25,990 Ni vidis structs antaŭe, se mallonge, kie oni pritraktis studento strukturo 413 00:18:25,990 --> 00:18:27,780 kiel tiu, kiu havis nomon kaj domo. 414 00:18:27,780 --> 00:18:31,980 En Pset 3 Breakout vi uzas tutan faskon da structs-- GRect kaj GOvals 415 00:18:31,980 --> 00:18:34,810 ke Stanford kreis cluster informo kune. 416 00:18:34,810 --> 00:18:38,580 Do kio se ni prenas tiun saman ideon de la ŝlosilvortoj "typedef" kaj "struct" 417 00:18:38,580 --> 00:18:42,890 kaj tiam iuj studento-specifajn aferojn, kaj evolui ĉi en la jenaj: 418 00:18:42,890 --> 00:18:46,210 typedef struct node-- kaj nodo estas nur tre genérico komputiko 419 00:18:46,210 --> 00:18:49,980 termino por io en datumstrukturo, ujo en datumstrukturo. 420 00:18:49,980 --> 00:18:53,900 Nodo mi asertas tuj havos kiel int n, tute simpla, 421 00:18:53,900 --> 00:18:58,810 kaj do iom pli enigme, tiu dua linio, struct nodo * sekva. 422 00:18:58,810 --> 00:19:01,300 Sed en malpli teknika terminoj, kio estas tiu dua linio 423 00:19:01,300 --> 00:19:02,980 de kodo ene la frizita krampoj? 424 00:19:02,980 --> 00:19:03,737 Yeah? 425 00:19:03,737 --> 00:19:04,851 >> Publiko: [inaudible] 426 00:19:04,851 --> 00:19:06,600 DAVID J. Malan: A Pointer al alia nodo. 427 00:19:06,600 --> 00:19:09,910 Do rekoni, sintakso iom kamufla. 428 00:19:09,910 --> 00:19:13,250 Sed se vi legis ĝin laŭvorte, sekvanta estas la nomo de variablo. 429 00:19:13,250 --> 00:19:14,410 Kio estas ĝia datumtipo? 430 00:19:14,410 --> 00:19:18,206 Estas iom parolema, ĉi tiu fojo, sed estas de tipo struct nodo *. 431 00:19:18,206 --> 00:19:22,960 Ajna tempo ni vidis ion stelo, kiu signifas ke estas puntero al tiu datumtipo. 432 00:19:22,960 --> 00:19:26,810 Do sekvanta estas ŝajne puntero al struct nodo. 433 00:19:26,810 --> 00:19:28,310 >> Nun, kio estas struct nodo? 434 00:19:28,310 --> 00:19:31,044 Nu, rimarkos vi vidas tiujn samaj vortoj ĉe supre dekstre. 435 00:19:31,044 --> 00:19:33,960 Kaj efektive, vi ankaŭ vidas la vorton "Nodo" cxi tie malsupre maldekstre. 436 00:19:33,960 --> 00:19:35,640 Kaj tio efektive estas nur oportuneco. 437 00:19:35,640 --> 00:19:39,930 Rimarku, ke en nia studenta difino ekzistas la vorto "studento" nur unufoje. 438 00:19:39,930 --> 00:19:42,510 Kaj tio estas ĉar lernanto objekto ne estis mem-referenca. 439 00:19:42,510 --> 00:19:45,340 Tie estas nenio ene de lernanto kiu bezonas marki al alia lernantino, 440 00:19:45,340 --> 00:19:45,610 persay. 441 00:19:45,610 --> 00:19:47,630 Tio estus ia bizara en la reala mondo. 442 00:19:47,630 --> 00:19:50,880 >> Sed kun nodo en kunligita lerta, ni volas nodo 443 00:19:50,880 --> 00:19:53,970 esti referenca al simila objekto. 444 00:19:53,970 --> 00:19:57,900 Kaj tiel rimarkos la ŝanĝon tie ne nur kio estas interne de la frizita krampoj. 445 00:19:57,900 --> 00:20:00,800 Sed ni aldonu la vorto "nodo" supre tiel kiel 446 00:20:00,800 --> 00:20:02,930 aldoni ĝin al la fundo anstataŭ "studento". 447 00:20:02,930 --> 00:20:06,000 Kaj tio estas nur teknika detalo tiel ke, denove, via datumstrukturo 448 00:20:06,000 --> 00:20:11,380 povas esti mem-referenca, tiel ke nodo povas noti al alia tia nodo. 449 00:20:11,380 --> 00:20:13,840 >> Do kio estas tiu finfine tuj signifos por ni? 450 00:20:13,840 --> 00:20:17,560 Nu, oni, ĉi stuff interne estas la enhavo de niaj nodo. 451 00:20:17,560 --> 00:20:19,360 Tion ĉi tie, supre dekstre, estas ĝuste tiel 452 00:20:19,360 --> 00:20:20,860 ke, denove, ni povas raporti al ni mem. 453 00:20:20,860 --> 00:20:23,401 Kaj tiam la plej ekstera stuff, kvankam nodo estas nova termino, 454 00:20:23,401 --> 00:20:25,500 eble, ĝi estas ankoraŭ la sama kiel studento kaj kion 455 00:20:25,500 --> 00:20:27,520 Estis sub la kastris en SPL. 456 00:20:27,520 --> 00:20:31,095 >> Do se ni nun volis komenci implementando ĉi ligillisto, 457 00:20:31,095 --> 00:20:33,220 kiom eble ni traduki io tiamaniere kodigi? 458 00:20:33,220 --> 00:20:35,350 Nu, ni nur vidas Ekzemplo de programo kiu 459 00:20:35,350 --> 00:20:36,840 fakte uzas ligillisto. 460 00:20:36,840 --> 00:20:40,870 Inter hodiaŭa dissendo kodo estas programo nomata Listo Zero. 461 00:20:40,870 --> 00:20:44,980 Kaj se mi kuros mi kreis la super simpla GUI, grafika interfaco de uzanto, 462 00:20:44,980 --> 00:20:46,460 sed ĝi vere nur printf. 463 00:20:46,460 --> 00:20:50,930 Kaj nun mi donis min kelkaj menuo options-- Delete, Enmeti, Search, 464 00:20:50,930 --> 00:20:51,750 kaj Traverse. 465 00:20:51,750 --> 00:20:52,630 Kaj Quit. 466 00:20:52,630 --> 00:20:55,970 Ĉi tiuj estas nur komuna operacioj datumstrukturo scias kiel ligilo listo. 467 00:20:55,970 --> 00:20:58,409 >> Nun, Forigi tuj forviŝi nombro el la listo. 468 00:20:58,409 --> 00:21:00,200 Enmeti tuj aldonu nombro al la listo. 469 00:21:00,200 --> 00:21:02,181 Serĉu tuj serĉos por nombro en la listo. 470 00:21:02,181 --> 00:21:04,930 Kaj través estas nur ornama metodo diri, trairu la liston 471 00:21:04,930 --> 00:21:06,245 presi ĝin, sed tio estas ĝi. 472 00:21:06,245 --> 00:21:07,720 Ne ŝanĝu ĝin en ajna formo. 473 00:21:07,720 --> 00:21:08,570 >> Do ni provu tion. 474 00:21:08,570 --> 00:21:10,160 Ni iru antaŭen kaj tajpi 2. 475 00:21:10,160 --> 00:21:12,710 Kaj poste mi iros enmeti la numeron, diru 9. 476 00:21:12,710 --> 00:21:13,620 Eniri. 477 00:21:13,620 --> 00:21:17,480 Kaj nun mia programo estas ĝuste programita diri, listo estas nun 9. 478 00:21:17,480 --> 00:21:20,190 Nun, se mi iru antaŭen kaj ĉu Enmetu denove, lasu 479 00:21:20,190 --> 00:21:23,680 min antaŭeniri kaj malzomi kaj tajpu en 17. 480 00:21:23,680 --> 00:21:25,770 Nun mia listo estas 9, tiam 17. 481 00:21:25,770 --> 00:21:27,750 Se mi faras enmeti denove, ni salti unu. 482 00:21:27,750 --> 00:21:32,400 Anstataŭ 22, kiel por la bildo ni estis rigardante tien, mi saltas antaŭen 483 00:21:32,400 --> 00:21:34,630 kaj enmeti 26 proksimaj. 484 00:21:34,630 --> 00:21:36,230 Do mi tuj tajpi 26. 485 00:21:36,230 --> 00:21:37,755 La listo estas kiel mi atendis. 486 00:21:37,755 --> 00:21:40,630 Sed nun, nur por vidi se tiu kodo tuj estos fleksebla, lasu min nun 487 00:21:40,630 --> 00:21:43,520 tipo 22, kiu almenaŭ koncepte, se ni 488 00:21:43,520 --> 00:21:46,520 Subtenante ĉi ordo, kiu estas ja tuj estos alia golo nun, 489 00:21:46,520 --> 00:21:48,690 iru en inter 17 kaj 26. 490 00:21:48,690 --> 00:21:50,270 Do mi batis Enter. 491 00:21:50,270 --> 00:21:51,380 Ja, kiu funkcias. 492 00:21:51,380 --> 00:21:54,950 Kaj nun lasu min enmeti la lasta, por la pentraĵo, 34. 493 00:21:54,950 --> 00:21:55,450 >> Bone. 494 00:21:55,450 --> 00:21:58,980 Do nun lasu min kondiĉas ke Forigi kaj Traverse kaj Serĉo fari, 495 00:21:58,980 --> 00:21:59,760 fakte, labori. 496 00:21:59,760 --> 00:22:04,180 Fakte, se mi kuros Serĉu, ni serĉi la numero 22, Enter. 497 00:22:04,180 --> 00:22:05,010 Ĝi troviĝas 22. 498 00:22:05,010 --> 00:22:07,580 Do kiu estas kion ĉi programo Listo Nulo faras. 499 00:22:07,580 --> 00:22:10,230 >> Sed kio vere tuj sur tiu implementa ĉi? 500 00:22:10,230 --> 00:22:14,530 Nu, unue mi havu, kaj ja Mi havas, dosiero nomata list0.h. 501 00:22:14,530 --> 00:22:16,540 502 00:22:16,540 --> 00:22:20,690 Kaj ie tie estas tiu linio, typedef, struct nodo, 503 00:22:20,690 --> 00:22:24,850 tiam mi havos mian frizita krampoj, int n, kaj tiam struct-- kio estis la difino? 504 00:22:24,850 --> 00:22:26,530 505 00:22:26,530 --> 00:22:28,545 Struct nodo proksima. 506 00:22:28,545 --> 00:22:29,920 507 00:22:29,920 --> 00:22:31,045 Do ni bezonas la stelo. 508 00:22:31,045 --> 00:22:33,420 Nun teknike ni eniras la kutimo desegni ĝin tien. 509 00:22:33,420 --> 00:22:35,670 Vi povus vidi lernolibroj kaj Interreto referencoj fari ĝin tie. 510 00:22:35,670 --> 00:22:36,660 Ĝi estas funkcie ekvivalentaj. 511 00:22:36,660 --> 00:22:37,980 Fakte, ĉi tiu estas iom pli tipa. 512 00:22:37,980 --> 00:22:40,563 Sed Mi estos kohera kun kion ni faris lasta momento kaj faros. 513 00:22:40,563 --> 00:22:42,350 Kaj poste laste, mi tuj faros. 514 00:22:42,350 --> 00:22:45,550 >> Do en kaplinion dosieron ie, en list0.h 515 00:22:45,550 --> 00:22:49,200 hodiaŭ estas ĉi struct difino, kaj eble iuj aliaj aĵoj. 516 00:22:49,200 --> 00:22:52,580 Dume en list0c ekzistas tuj estos kelkon. 517 00:22:52,580 --> 00:22:54,740 Sed ni tuj simple komenci kaj ne fini ĉi. 518 00:22:54,740 --> 00:22:59,690 List0.h dosiero mi volas inkluzivi en mian C dosiero. 519 00:22:59,690 --> 00:23:03,910 Kaj tiam, je iu punkto mi tuj havi int, ĉefa, detruos. 520 00:23:03,910 --> 00:23:06,530 Kaj poste mi iros havi iun por-do estas ĉi tie. 521 00:23:06,530 --> 00:23:10,620 Mi ankaŭ tuj havos prototipo, kiel dezerta, serĉo, int, 522 00:23:10,620 --> 00:23:13,610 n, kies celo en la vivo serĉi elementon. 523 00:23:13,610 --> 00:23:18,310 Kaj poste malsupren tie mi asertas en hodiaŭa kodo, dezerta, serĉo, int, n, 524 00:23:18,310 --> 00:23:21,020 neniu punktokomo sed malfermita krispa krampoj. 525 00:23:21,020 --> 00:23:25,049 Kaj nun mi volas iel serĉo por ero en tiu listo. 526 00:23:25,049 --> 00:23:27,340 Sed ni ne havas sufiĉan informo sur la ekrano ankoraŭ. 527 00:23:27,340 --> 00:23:29,800 Mi ne reale reprezentis la listo mem. 528 00:23:29,800 --> 00:23:33,070 Do unu vojo ni povus implementar ligillisto en programo 529 00:23:33,070 --> 00:23:37,520 Estas mi specon de voli fari ion kiel deklaras ligillisto tien. 530 00:23:37,520 --> 00:23:40,520 Por simpleco, Mi iras fari tiu tutmonda, kvankam ĝenerale oni 531 00:23:40,520 --> 00:23:41,645 ne devus fari ĉi tro multe. 532 00:23:41,645 --> 00:23:43,260 Sed estos simpligi ĉi ekzemplo. 533 00:23:43,260 --> 00:23:45,890 Do mi volas deklari ligillisto tien. 534 00:23:45,890 --> 00:23:47,010 Nun, kio povus tion fari? 535 00:23:47,010 --> 00:23:48,810 536 00:23:48,810 --> 00:23:50,750 >> Jen la bildo de ligillisto. 537 00:23:50,750 --> 00:23:53,030 Kaj mi ne vere konas nuntempe kiel 538 00:23:53,030 --> 00:23:56,710 Mi tuj iros pri reprezenti tantas aĵoj kun nur unu 539 00:23:56,710 --> 00:23:58,040 ŝanĝiĝema en memoro. 540 00:23:58,040 --> 00:23:59,160 Sed pensas reen momente. 541 00:23:59,160 --> 00:24:00,830 Ĉiuj ĉi tiu tempo ni havis kordoj, kiujn oni tiam 542 00:24:00,830 --> 00:24:02,913 rivelis esti arrays de signoj, kiujn ni poste 543 00:24:02,913 --> 00:24:05,740 malkaŝitaj al esti simple puntero al la unua karaktero 544 00:24:05,740 --> 00:24:08,890 en tabelo de signoj ke estas nula finita. 545 00:24:08,890 --> 00:24:13,530 Do per tiu logiko, kaj kun tiu bildo ia semante viaj pensoj, 546 00:24:13,530 --> 00:24:17,964 kion ni bezonas vere skribi en nia kodo por reprezenti ligillisto? 547 00:24:17,964 --> 00:24:21,130 Kiom de tiu informo ni bezonas kapti en C kodo, vi dirus? 548 00:24:21,130 --> 00:24:22,654 549 00:24:22,654 --> 00:24:23,154 Yeah? 550 00:24:23,154 --> 00:24:24,738 >> Publiko: Ni bezonas puntero al nodo. 551 00:24:24,738 --> 00:24:26,237 DAVID J. Malan: A puntero al nodo. 552 00:24:26,237 --> 00:24:29,320 En aparta, kiu nodo farus vian instinktoj estu teni puntero al? 553 00:24:29,320 --> 00:24:30,026 >> Aŭdienco: La unua nodo. 554 00:24:30,026 --> 00:24:31,942 >> DAVID J. Malan: Jes, Probable nur la unua. 555 00:24:31,942 --> 00:24:34,030 Kaj rimarki, la unua nodo estas malsama formo. 556 00:24:34,030 --> 00:24:37,690 Ĝi estas nur duono de la grandeco de la struct, ĉar ĝi estas ja nur puntero. 557 00:24:37,690 --> 00:24:44,650 Do kion vi povas ja fari estas deklari ligillisto esti de tipo nodo *. 558 00:24:44,650 --> 00:24:47,780 Kaj ni simple nomas ĝin unue kaj pravalorizi ĝin nula. 559 00:24:47,780 --> 00:24:49,910 Do nula, denove, estas venanta en la bildo tie. 560 00:24:49,910 --> 00:24:53,620 Ne nur estas nula uzita kiel speciala reveno valoro por aĵoj kiel getstring 561 00:24:53,620 --> 00:24:57,770 kaj malloc, nula ankaŭ la nulo pointer, la manko de puntero, 562 00:24:57,770 --> 00:24:58,430 se vi volas. 563 00:24:58,430 --> 00:25:00,309 Ĝi simple signifas nenion ankoraux tie. 564 00:25:00,309 --> 00:25:02,100 Nun unue mi povus esti vokis ĉi nenion. 565 00:25:02,100 --> 00:25:04,200 Mi povus esti nomis ĝin "listo" aŭ ajna numero de aliaj aĵoj. 566 00:25:04,200 --> 00:25:06,960 Sed mi vokas ŝin "unua" por ke ĝi linioj kun tiu bildo. 567 00:25:06,960 --> 00:25:10,280 Do ĝuste kiel kordo povas esti reprezentita kun la adreso de lia unua bajto, 568 00:25:10,280 --> 00:25:11,280 tiel povas ligillisto. 569 00:25:11,280 --> 00:25:13,480 Kaj ni vidos aliaj datumoj strukturoj esti reprezentita 570 00:25:13,480 --> 00:25:16,700 kun nur unu montrilo, 32-bitoj sago, montrante 571 00:25:16,700 --> 00:25:18,740 je la unua nodo en la strukturo. 572 00:25:18,740 --> 00:25:20,340 >> Sed nun ni anticipas problemo. 573 00:25:20,340 --> 00:25:23,230 Se mi nur memorante en mia programo la adreso 574 00:25:23,230 --> 00:25:27,220 de la unua vertico, la unua rektangulo en tiu datumstrukturo, 575 00:25:27,220 --> 00:25:31,760 kion prefere estu la kazo pri la efektivigo de la resto de mia lerta? 576 00:25:31,760 --> 00:25:35,820 Kio estas ŝlosila detalo kiu okazas certigi ĉi efektive funkcias? 577 00:25:35,820 --> 00:25:39,250 Kaj per "vere funkcias" Mi signifas, multe kiel kordo, 578 00:25:39,250 --> 00:25:42,180 lasas nin iri de la unua karaktero en Davin nomon al la dua, 579 00:25:42,180 --> 00:25:44,755 la tria, la kvara, por la fino, 580 00:25:44,755 --> 00:25:47,880 kiel ni scias, kiam ni fine de ligillisto kiuj aspektas kiel tiu? 581 00:25:47,880 --> 00:25:50,035 582 00:25:50,035 --> 00:25:50,660 Kiam ĝi estas nula. 583 00:25:50,660 --> 00:25:53,640 Kaj mi reprezentis tian kiel kiel elektra inĝeniero heroajxoj, 584 00:25:53,640 --> 00:25:56,420 kun la iom Grounding simbolo de varoj. 585 00:25:56,420 --> 00:25:58,246 Sed tio nur signifas nulan en tiu kazo. 586 00:25:58,246 --> 00:26:00,370 Vi povas desegni ĝin ajna nombro manieroj, sed tiu aŭtoro 587 00:26:00,370 --> 00:26:02,800 okazis uzi tiun simbolon ĉi tie. 588 00:26:02,800 --> 00:26:06,260 >> Tiel longe kiel ni stringing ĉiuj tiuj nodoj kune, 589 00:26:06,260 --> 00:26:08,600 nur memori kie la unua estas, tiom longe 590 00:26:08,600 --> 00:26:11,760 kiel ni metas specialan simbolo la lasta nodo en la listo, 591 00:26:11,760 --> 00:26:15,130 kaj ni uzos nula, ĉar tio kion ni havas disponeblaj al ni, 592 00:26:15,130 --> 00:26:16,480 tiu listo estas kompleta. 593 00:26:16,480 --> 00:26:20,190 Kaj eĉ se mi nur donos vin puntero al la unua elemento, vi, la programisto, 594 00:26:20,190 --> 00:26:22,486 certe povas aliri la resto de ĝi. 595 00:26:22,486 --> 00:26:24,360 Sed ni lasu vian menson vagadi iom, 596 00:26:24,360 --> 00:26:26,140 se ili ne estas jam tute wandered-- kio estas 597 00:26:26,140 --> 00:26:28,723 tuj estos la rula tempo de trovinte ion en tiu listo? 598 00:26:28,723 --> 00:26:30,450 599 00:26:30,450 --> 00:26:33,470 Damn ĝin, ĝi estas granda O de n, kiu ne estas malbona, juste. 600 00:26:33,470 --> 00:26:34,800 Sed estas lineara. 601 00:26:34,800 --> 00:26:37,980 Ni forlasis kio trajto de arrays movante pli 602 00:26:37,980 --> 00:26:43,130 kun tiu bildo de dinamike kunplektitaj aŭ ligita nodoj? 603 00:26:43,130 --> 00:26:44,970 604 00:26:44,970 --> 00:26:46,687 Ni forlasis hazarda aliro. 605 00:26:46,687 --> 00:26:48,770 Tabelo estas bela ĉar matematike ĉio 606 00:26:48,770 --> 00:26:50,340 Estas malantaŭo al malantaŭo al malantaŭo al malantaŭo. 607 00:26:50,340 --> 00:26:52,370 Eĉ kvankam ĉi bildo aspektas bela kaj eĉ 608 00:26:52,370 --> 00:26:55,830 kvankam ĝi aspektas kiel tiuj nodoj Estas bele interspacigitaj, reale 609 00:26:55,830 --> 00:26:56,830 ili povus esti ie. 610 00:26:56,830 --> 00:27:01,590 Ox1, Ox50, Ox123, Ox99, tiuj nodojn povus esti ie. 611 00:27:01,590 --> 00:27:05,960 Ĉar malloc faras atribui memoron el la sxlimo, sed ie en la havaĵo. 612 00:27:05,960 --> 00:27:09,080 Vi ne nepre scias ke ĝi estas tuj revenos al malantaŭo al malantaŭo. 613 00:27:09,080 --> 00:27:12,460 Kaj ĉi tiu portreto en realeco la Ne tuj estos tute tiu bela. 614 00:27:12,460 --> 00:27:16,140 >> Do tuj prenos iom el labori por implementar ĉi tiu funkcio. 615 00:27:16,140 --> 00:27:17,880 Do ni implementar serĉo nun. 616 00:27:17,880 --> 00:27:20,250 Kaj ni vidos specon de saĝa maniero fari tion. 617 00:27:20,250 --> 00:27:24,660 Do se mi serĉo funkcio kaj Mi donis variablo, entjero n 618 00:27:24,660 --> 00:27:28,490 serĉi, mi bezonas scii la nova sintakso por rigardi interne 619 00:27:28,490 --> 00:27:32,400 de strukturo tio indikis, trovi n. 620 00:27:32,400 --> 00:27:33,210 Do ni faros. 621 00:27:33,210 --> 00:27:36,030 >> Do unue mi tuj iros antaŭeniris kaj deklari nodo *. 622 00:27:36,030 --> 00:27:39,400 Kaj mi tuj vokos ŝin pointer, nur konvencio. 623 00:27:39,400 --> 00:27:41,710 Kaj mi tuj pravalorizi ĝin unue. 624 00:27:41,710 --> 00:27:43,770 Kaj nun mi povas fari tion en kelkaj manieroj. 625 00:27:43,770 --> 00:27:45,436 Sed Mi iras preni komunan alproksimiĝon. 626 00:27:45,436 --> 00:27:50,180 Dum puntero estas ne egala al nula, kaj tio validas sintakso. 627 00:27:50,180 --> 00:27:54,550 Kaj ĝi simple signifas fari la sekvan, do longe kiel vi ne indikas nenion. 628 00:27:54,550 --> 00:27:55,800 Kion mi volas fari? 629 00:27:55,800 --> 00:28:01,939 >> Se montrilo dot n, lasu min reveni por ke, equals-- egalas kio? 630 00:28:01,939 --> 00:28:03,105 Kio valoron mi serĉas? 631 00:28:03,105 --> 00:28:04,920 632 00:28:04,920 --> 00:28:06,590 La efektiva n kiu estis pasita en. 633 00:28:06,590 --> 00:28:09,020 Do jen alia trajto de C kaj multaj lingvoj. 634 00:28:09,020 --> 00:28:13,705 Eĉ kvankam la strukturo nomita nodo havas valoro n, totalmente leĝa 635 00:28:13,705 --> 00:28:17,530 ankaŭ havas lokajn argumento aŭ variablon nomis n. 636 00:28:17,530 --> 00:28:20,085 Ĉar eĉ ni, kun homaj okuloj povas distingi 637 00:28:20,085 --> 00:28:22,087 ke tiu n estas supozeble malsama tiu n. 638 00:28:22,087 --> 00:28:23,420 Ĉar la sintakso estas malsama. 639 00:28:23,420 --> 00:28:26,211 Vi havas punkton kaj puntero, dum ĉi tiu ne havas tian aferon. 640 00:28:26,211 --> 00:28:27,290 Do tio estas okej. 641 00:28:27,290 --> 00:28:29,120 Tio estas OK por voki la samaj aferoj. 642 00:28:29,120 --> 00:28:32,380 >> Se mi vin trovos ĉi tion, mi tuj volas fari ion 643 00:28:32,380 --> 00:28:35,000 kiel anonci ke ni trovis n. 644 00:28:35,000 --> 00:28:37,930 Kaj ni lasos tion kiel diri aŭ _pseudocode_ kodon. 645 00:28:37,930 --> 00:28:40,190 Alie, kaj jen la interesa parto, kio 646 00:28:40,190 --> 00:28:47,320 mi volas fari, se la nuna nodo ne enhavanta n ke mi zorgas pri? 647 00:28:47,320 --> 00:28:50,700 Kjel mi atingi la sekva? 648 00:28:50,700 --> 00:28:53,710 Se mia fingro en la momento estas PTR, kaj estas 649 00:28:53,710 --> 00:28:55,920 fingromontrante ajn unue fingromontrante, 650 00:28:55,920 --> 00:28:59,290 kiom mi movi mian fingron al la sekva nodo en kodo? 651 00:28:59,290 --> 00:29:01,915 Nu, kio estas la breadcrumb ni tuj sekvas en ĉi tiu kazo? 652 00:29:01,915 --> 00:29:03,464 653 00:29:03,464 --> 00:29:04,380 Publiko: [inaudible]. 654 00:29:04,380 --> 00:29:05,630 DAVID J. Malan: Jes, tiel proksimaj. 655 00:29:05,630 --> 00:29:06,640 656 00:29:06,640 --> 00:29:09,824 Do se mi reiros al mia kodo tie, ja, mi estas 657 00:29:09,824 --> 00:29:12,990 tuj iros antaŭen kaj diru montrilo, kio estas nur portempa variable-- estas 658 00:29:12,990 --> 00:29:15,320 bizara nomo, PTR, sed estas simple kiel temp-- 659 00:29:15,320 --> 00:29:19,234 Mi tuj starigis montrilo egala al ĉiu montrilo is-- 660 00:29:19,234 --> 00:29:22,150 kaj denove, tiu tuj estos iom kalesxo por moment-- dot proksima. 661 00:29:22,150 --> 00:29:23,551 662 00:29:23,551 --> 00:29:26,550 En aliaj vortoj, mi tuj prenu mian fingro kiu'S fingromontrante tiu nodo 663 00:29:26,550 --> 00:29:31,247 tie kaj mi tuj diros, vi scias kio, rigardu la sekvan kampo 664 00:29:31,247 --> 00:29:33,330 kaj movi vian fingron kion ajn ĝi estas fingromontrante. 665 00:29:33,330 --> 00:29:35,163 Kaj tio tuj ripeti, ripeti, ripeto. 666 00:29:35,163 --> 00:29:37,630 Sed kiam faras mian fingron ĉesi fari ion ajn? 667 00:29:37,630 --> 00:29:40,095 Apenaŭ kion linio de kodo piedbatoj en? 668 00:29:40,095 --> 00:29:40,970 Publiko: [inaudible] 669 00:29:40,970 --> 00:29:43,060 DAVID J. Malan: Se punkto dum puntero estas ne egala al nula. 670 00:29:43,060 --> 00:29:44,900 En iu punkto de mia fingro La tuj estos fingromontrante nula 671 00:29:44,900 --> 00:29:47,070 kaj mi tuj rimarki tio estas la fino de ĉi tiu listo. 672 00:29:47,070 --> 00:29:48,910 Nun, tiu estas iom blanka mensogo por simpleco. 673 00:29:48,910 --> 00:29:51,580 Ĝi rezultas ke eĉ kvankam ni nur lernis ĉi dot skribmaniero 674 00:29:51,580 --> 00:29:55,220 por strukturoj, puntero estas ne struct. 675 00:29:55,220 --> 00:29:56,580 PTR estas kio? 676 00:29:56,580 --> 00:29:58,350 Nur por esti pli nitpicky. 677 00:29:58,350 --> 00:29:59,720 678 00:29:59,720 --> 00:30:01,360 Ĝi estas puntero al nodo. 679 00:30:01,360 --> 00:30:03,120 Ne nodo mem. 680 00:30:03,120 --> 00:30:06,650 Se mi ne havus stelon tie, montrilo absolutely-- estas nodo. 681 00:30:06,650 --> 00:30:08,650 Ĉi tio estas kiel semajno unu deklaro de variablo, 682 00:30:08,650 --> 00:30:10,120 kvankam la vorto "nodo" estas nova. 683 00:30:10,120 --> 00:30:13,860 >> Sed tuj kiam ni enkonduki stelo, estas nun puntero al nodo. 684 00:30:13,860 --> 00:30:17,960 Kaj bedaŭrinde vi ne povas uzi la skalara skribmaniero por puntero. 685 00:30:17,960 --> 00:30:21,070 Vi devas uzi la sagon skribmaniero, kiu, surprize, 686 00:30:21,070 --> 00:30:23,470 Estas la unua fojo ajna peco de sintakso aspektas intuicia. 687 00:30:23,470 --> 00:30:25,245 Ĉi laŭvorte similas sago. 688 00:30:25,245 --> 00:30:26,370 Kaj tio estas bona afero. 689 00:30:26,370 --> 00:30:28,995 Kaj cxi tie laŭvorte aspektas kiel sago. 690 00:30:28,995 --> 00:30:31,870 Do mi kredas ke tio estas la la-- mi ne kredas ke mi tro farante here-- mi 691 00:30:31,870 --> 00:30:34,120 kredas ke tio estas la lasta nova peco de sintakso ni tuj vidos. 692 00:30:34,120 --> 00:30:36,500 Kaj dankeme, estas ja iom pli intuicia. 693 00:30:36,500 --> 00:30:40,090 >> Nun, por tiuj el vi, kiuj eble preferas la malnovan vojon, 694 00:30:40,090 --> 00:30:42,550 vi povas ankoraŭ uzi la skalara skribmaniero. 695 00:30:42,550 --> 00:30:45,380 Sed kiel ĉiu lundo de konversacio, ni unue 696 00:30:45,380 --> 00:30:50,530 bezonas iri tien, iru al tiu alparoli, kaj tiam aliri la kampo. 697 00:30:50,530 --> 00:30:51,897 Do ĉi tiu estas ankaŭ korekta. 698 00:30:51,897 --> 00:30:53,730 Kaj sincere, tiu estas iom pli pedanta. 699 00:30:53,730 --> 00:30:56,530 Vi laŭvorte dirante dereference la puntero kaj iri tie. 700 00:30:56,530 --> 00:30:59,320 Tiam kaptu .n, la kampo nomata n. 701 00:30:59,320 --> 00:31:01,370 Sed sincere, neniu volas tajpi aŭ legi ĉi. 702 00:31:01,370 --> 00:31:03,620 Kaj tial la mondo elpensis la saga skribmaniero, kiu 703 00:31:03,620 --> 00:31:06,980 estas ekvivalentaj, identa, ĝi estas nur sintaksa sukero. 704 00:31:06,980 --> 00:31:10,570 Do fantazio maniero diri ĉi aspektas bona, aŭ aspektas pli simpla. 705 00:31:10,570 --> 00:31:12,296 >> Do nun mi faros unu alia afero. 706 00:31:12,296 --> 00:31:15,420 Mi intencis diri "break" iam mi havas trovis tiel mi ne observos serĉante ĝin. 707 00:31:15,420 --> 00:31:17,620 Sed tio estas la esencon de serĉo funkcio. 708 00:31:17,620 --> 00:31:21,710 Sed estas multe pli facila, en la Fine, ne iru tra la kodon. 709 00:31:21,710 --> 00:31:25,570 Tio vere estas la formala efektivigo de serĉo en la hodiaŭa dissendo kodo. 710 00:31:25,570 --> 00:31:30,530 Mi kuraĝas diri ke insert ne aparte amuza marŝi tra 711 00:31:30,530 --> 00:31:33,180 vide nek estas forviŝi, eĉ kvankam al la fino de la tago 712 00:31:33,180 --> 00:31:35,460 ili bolas malsupren sufiĉe simpla heurísticas. 713 00:31:35,460 --> 00:31:36,330 >> Do ni faros. 714 00:31:36,330 --> 00:31:39,250 Se vi humuro min tien, mi faris alporti faskon de streso pilkojn. 715 00:31:39,250 --> 00:31:40,620 Mi alportis faskon de nombroj. 716 00:31:40,620 --> 00:31:46,562 Kaj ni povus nur kelkaj volontuloj reprezenti la 9, 17, 20, 22, 29, kaj 34? 717 00:31:46,562 --> 00:31:48,270 Do esence ĉiuj kiu estas tie hodiaŭ. 718 00:31:48,270 --> 00:31:50,170 719 00:31:50,170 --> 00:31:52,760 Tio estis unu, du, tri, kvar, kvin, ses homoj. 720 00:31:52,760 --> 00:31:55,740 Kaj mi petis go-- vidu, neniu unu en la dorso levas siajn manojn. 721 00:31:55,740 --> 00:32:01,910 OK, unu, du, tri, kvar, five-- lasu min ŝarĝi balance-- ses. 722 00:32:01,910 --> 00:32:03,051 OK, vi ses veni supren. 723 00:32:03,051 --> 00:32:04,050 Ni bezonos aliaj homoj. 724 00:32:04,050 --> 00:32:05,460 Ni alportis ekstra streso pilkojn. 725 00:32:05,460 --> 00:32:08,200 Kaj se vi povis, por nur momente, linio 726 00:32:08,200 --> 00:32:10,490 vin sur simple ŝatas ĉi foton tie. 727 00:32:10,490 --> 00:32:15,200 728 00:32:15,200 --> 00:32:15,959 >> Bone. 729 00:32:15,959 --> 00:32:17,125 Vidu, kia estas via nomo? 730 00:32:17,125 --> 00:32:17,550 >> Publiko: Andrew. 731 00:32:17,550 --> 00:32:18,800 >> DAVID J. Malan: Andrew, Vi estas nombro 9. 732 00:32:18,800 --> 00:32:19,540 Agrable renkonti vin. 733 00:32:19,540 --> 00:32:20,400 Tie vi iru. 734 00:32:20,400 --> 00:32:21,593 735 00:32:21,593 --> 00:32:22,176 Publiko: Jen. 736 00:32:22,176 --> 00:32:22,662 DAVID J. Malan: Jen. 737 00:32:22,662 --> 00:32:23,162 David. 738 00:32:23,162 --> 00:32:23,765 Numero 17. 739 00:32:23,765 --> 00:32:24,950 740 00:32:24,950 --> 00:32:25,450 Jes? 741 00:32:25,450 --> 00:32:26,400 >> Publiko: Mi Julia. 742 00:32:26,400 --> 00:32:26,980 >> DAVID J. Malan: Julia, Davido. 743 00:32:26,980 --> 00:32:27,545 Numero 20. 744 00:32:27,545 --> 00:32:28,507 745 00:32:28,507 --> 00:32:29,340 Publiko: kristano. 746 00:32:29,340 --> 00:32:30,715 DAVID J. Malan: Christian, David. 747 00:32:30,715 --> 00:32:31,541 Numero 22. 748 00:32:31,541 --> 00:32:32,040 Kaj? 749 00:32:32,040 --> 00:32:32,649 >> Publiko: JP. 750 00:32:32,649 --> 00:32:33,440 DAVID J. Malan: JP. 751 00:32:33,440 --> 00:32:34,880 Numero 29. 752 00:32:34,880 --> 00:32:37,080 Do iru antaŭen kaj akiri in-- Uh oh. 753 00:32:37,080 --> 00:32:38,486 754 00:32:38,486 --> 00:32:38,985 Uh oh. 755 00:32:38,985 --> 00:32:39,650 756 00:32:39,650 --> 00:32:40,150 Standby. 757 00:32:40,150 --> 00:32:41,360 758 00:32:41,360 --> 00:32:42,390 20. 759 00:32:42,390 --> 00:32:43,682 Ĉu iu havas markilon? 760 00:32:43,682 --> 00:32:44,890 Publiko: mi hvas Sharpie. 761 00:32:44,890 --> 00:32:45,660 DAVID J. Malan: Vi ricevis Sharpie? 762 00:32:45,660 --> 00:32:46,159 OK. 763 00:32:46,159 --> 00:32:47,577 764 00:32:47,577 --> 00:32:49,160 Kaj ĉu iu havas pecon de papero? 765 00:32:49,160 --> 00:32:51,562 766 00:32:51,562 --> 00:32:52,270 Konservu la prelego. 767 00:32:52,270 --> 00:32:53,810 768 00:32:53,810 --> 00:32:55,362 Venu. 769 00:32:55,362 --> 00:32:56,320 Publiko: Ni havas ĝin. 770 00:32:56,320 --> 00:32:57,600 DAVID J. Malan: Ni havas ĝin? 771 00:32:57,600 --> 00:32:58,577 Bone, dankon. 772 00:32:58,577 --> 00:33:01,380 773 00:33:01,380 --> 00:33:02,520 Ĉi tie ni iru. 774 00:33:02,520 --> 00:33:03,582 Estis tiu de vi? 775 00:33:03,582 --> 00:33:04,540 Vi nur savis la tagon. 776 00:33:04,540 --> 00:33:05,670 777 00:33:05,670 --> 00:33:07,220 Do 29. 778 00:33:07,220 --> 00:33:10,510 779 00:33:10,510 --> 00:33:11,110 Bone. 780 00:33:11,110 --> 00:33:13,360 781 00:33:13,360 --> 00:33:14,890 Mi malbone skribita 29, sed bone. 782 00:33:14,890 --> 00:33:15,720 Antaŭeniri. 783 00:33:15,720 --> 00:33:18,114 Bone, mi donos al vi via plumo reen momente. 784 00:33:18,114 --> 00:33:19,280 Do ni havas tiujn ulojn tie. 785 00:33:19,280 --> 00:33:20,330 Ni havas unu alia. 786 00:33:20,330 --> 00:33:23,750 Gabe, ĉu vi volas ludi La unua ero tie? 787 00:33:23,750 --> 00:33:25,705 Ni bezonas vin atentigi ĉe tiuj fajnaj homoj. 788 00:33:25,705 --> 00:33:26,930 789 00:33:26,930 --> 00:33:31,030 Do 9, 17, 20, 22, varo de 29, kaj tiam 34. 790 00:33:31,030 --> 00:33:32,160 791 00:33:32,160 --> 00:33:33,325 Ĉu ni perdas iun? 792 00:33:33,325 --> 00:33:33,950 Mi havas 34. 793 00:33:33,950 --> 00:33:36,730 Kie did-- OK, kiu volas esti 34? 794 00:33:36,730 --> 00:33:37,605 OK, venu supren, 34. 795 00:33:37,605 --> 00:33:39,280 796 00:33:39,280 --> 00:33:41,220 Bone, tiu estos bone valoras la klimakso. 797 00:33:41,220 --> 00:33:41,550 Kio estas via nomo? 798 00:33:41,550 --> 00:33:42,040 >> Publiko: Peter. 799 00:33:42,040 --> 00:33:43,456 >> DAVID J. Malan: Petron veni supren. 800 00:33:43,456 --> 00:33:46,810 Bone, do jen oni tuta aro de nodoj. 801 00:33:46,810 --> 00:33:49,060 Ĉiu el vi uloj reprezentas unu el tiuj rektanguloj. 802 00:33:49,060 --> 00:33:51,930 Kaj Gabe, la iomete stranga viro eksteren, reprezentas unue. 803 00:33:51,930 --> 00:33:54,850 Do lia puntero estas iom pli malgranda sur la ekrano ol ĉiuj aliaj. 804 00:33:54,850 --> 00:33:58,120 Kaj en ĉi tiu kazo, ĉiu el via maldekstra manoj tuj aŭ punkto malsupren 805 00:33:58,120 --> 00:34:01,085 tio reprezentas nula, do nur la foresto de puntero, 806 00:34:01,085 --> 00:34:03,210 aŭ tuj esti indikante ĉe nodo apud vi. 807 00:34:03,210 --> 00:34:05,440 >> Do nun, se vi garnas vi ŝatas la foton 808 00:34:05,440 --> 00:34:07,585 tie, iru antaŭen kaj punkto reciproke, kun Gabe 809 00:34:07,585 --> 00:34:11,030 en apartaj pintan ĉe numero 9 reprezenti la listo. 810 00:34:11,030 --> 00:34:14,050 OK, kaj numeron 34, via maldekstra mano devus ĝuste esti indikante la plankon. 811 00:34:14,050 --> 00:34:15,750 >> OK, do tio estas la ligillisto. 812 00:34:15,750 --> 00:34:17,580 Do tio estas la scenaro en demando. 813 00:34:17,580 --> 00:34:20,210 Kaj efektive, tio estas reprezentanto de klaso de problemoj 814 00:34:20,210 --> 00:34:21,929 ke vi eble provu solvi kun kodo. 815 00:34:21,929 --> 00:34:25,020 Vi volas finfine enmeti nova elemento en la listo. 816 00:34:25,020 --> 00:34:27,494 En ĉi tiu kazo, ni tuj provu la enmeto de la nombro 55. 817 00:34:27,494 --> 00:34:28,500 818 00:34:28,500 --> 00:34:30,860 Sed tuj estos malsamaj kazoj por konsideri. 819 00:34:30,860 --> 00:34:34,409 Kaj efektive, tiu tuj estos unu de la granda bildo takeaways tie, estas, 820 00:34:34,409 --> 00:34:35,659 kio estas la malsamaj kazoj. 821 00:34:35,659 --> 00:34:39,120 Kio estas la malsamaj se kondiĉoj aŭ branĉojn ke via programo povus havi? 822 00:34:39,120 --> 00:34:42,024 >> Nu, la nombro kiun vi provas insert, kion ni nun scias ke 55, 823 00:34:42,024 --> 00:34:44,650 sed se vi ne konas anticipe, mi daresay 824 00:34:44,650 --> 00:34:47,840 falas en almenaŭ tri eblaj situacioj. 825 00:34:47,840 --> 00:34:49,717 Kie povus nova ero estos? 826 00:34:49,717 --> 00:34:51,050 Publiko: Kaj la fino aŭ meze. 827 00:34:51,050 --> 00:34:54,150 DAVID J. Malan: Fine, en meze aux komence. 828 00:34:54,150 --> 00:34:56,650 Do mi asertas ke estas almenaŭ tri problemojn ni devas solvi. 829 00:34:56,650 --> 00:34:58,691 Ni elekti kio estas eble eble la plej simpla 830 00:34:58,691 --> 00:35:01,090 , kie la nova elemento apartenas komence. 831 00:35:01,090 --> 00:35:04,040 Do mi tuj devos kodo tute kiel esplori, kion mi ĵus skribis. 832 00:35:04,040 --> 00:35:07,670 Kaj mi tuj devos PTR, kiu Mi reprezentas ĉi tie kun mia fingro, 833 00:35:07,670 --> 00:35:08,370 kiel kutime. 834 00:35:08,370 --> 00:35:12,430 >> Kaj memoru, kio valoro ni pravalorizi PTR al? 835 00:35:12,430 --> 00:35:15,300 Do ni inicializado ĝin Nula komence. 836 00:35:15,300 --> 00:35:16,410 837 00:35:16,410 --> 00:35:19,770 Sed tiam kion ni faros kiam ni interne nia serĉo funkcio? 838 00:35:19,770 --> 00:35:20,940 839 00:35:20,940 --> 00:35:24,870 Ni starigis ĝin egala al la unua, kiu ne signifas tion faris. 840 00:35:24,870 --> 00:35:25,890 841 00:35:25,890 --> 00:35:30,570 Se mi starigis PTR egala al la unua, kio do mia mano vere fingromontrante? 842 00:35:30,570 --> 00:35:31,070 Ĝuste. 843 00:35:31,070 --> 00:35:33,290 Do se Gabe kaj mi iras esti egalaj valoroj tie, 844 00:35:33,290 --> 00:35:34,760 Ni bezonas ambaŭ punkto je numero 9. 845 00:35:34,760 --> 00:35:36,420 >> Do tio estis la komenco de nia historio. 846 00:35:36,420 --> 00:35:38,700 Kaj nun jen estas nur simpla, kvankam la sintakso estas nova. 847 00:35:38,700 --> 00:35:40,580 Koncepte ĉi estas nur lineara serĉo. 848 00:35:40,580 --> 00:35:42,750 Estas 55 egalas 9? 849 00:35:42,750 --> 00:35:45,559 Aŭ pli ĝuste, ni diru malpli ol 9. 850 00:35:45,559 --> 00:35:47,600 Ĉar mi provas elkompreni kie meti 55. 851 00:35:47,600 --> 00:35:51,270 Malpli ol 9, malpli ol 17, malpli ol 20, malpli ol 22, malpli ol 29 852 00:35:51,270 --> 00:35:52,510 malpli ol 34, Ne. 853 00:35:52,510 --> 00:35:55,080 Do nun ni estas en kazo unu el almenaŭ tri. 854 00:35:55,080 --> 00:35:59,910 >> Se mi volas enigi 55 tie, kio linioj de kodo neceso get ekzekutita? 855 00:35:59,910 --> 00:36:01,890 Kiel faras ĉi tiun bildon de homoj bezonas ŝanĝi? 856 00:36:01,890 --> 00:36:03,181 Kion mi faru kun mia maldekstra mano? 857 00:36:03,181 --> 00:36:04,530 858 00:36:04,530 --> 00:36:07,360 Tio devus esti nula komence, ĉar mi estas ĉe la fino de la listo. 859 00:36:07,360 --> 00:36:09,318 Kaj kio devus okazi tie kun Petro, ĉu? 860 00:36:09,318 --> 00:36:10,520 861 00:36:10,520 --> 00:36:12,430 Li evidente tuj atentigi min. 862 00:36:12,430 --> 00:36:15,580 Do mi asertas ke estas almenaŭ du linioj de kodo en la specimeno kodo de hodiaŭ 863 00:36:15,580 --> 00:36:18,570 ke tuj implementar ĉi scenejo de aldoni 55 ĉe la vosto. 864 00:36:18,570 --> 00:36:20,950 Kaj mi povus havi iu hop kaj ĝuste reprezentas 55? 865 00:36:20,950 --> 00:36:22,200 Bone, vi estas la nova 55. 866 00:36:22,200 --> 00:36:23,580 867 00:36:23,580 --> 00:36:27,054 >> Do kion se la sekvanta scenaro venas kune, 868 00:36:27,054 --> 00:36:29,720 kaj ni volas enmeti en la komencante aŭ kapo de tiu listo? 869 00:36:29,720 --> 00:36:31,100 Kaj kio estas via nomo, la numero 55? 870 00:36:31,100 --> 00:36:31,420 >> Publiko: Jack. 871 00:36:31,420 --> 00:36:32,295 >> DAVID J. Malan: Jack? 872 00:36:32,295 --> 00:36:33,585 OK, agrable renkonti vin. 873 00:36:33,585 --> 00:36:34,210 Bonvenon surŝipe. 874 00:36:34,210 --> 00:36:36,640 Do nun ni tuj enigi, diru, la numero 5. 875 00:36:36,640 --> 00:36:39,840 Jen la dua kazo de la tri ni venis supren kun antaŭe. 876 00:36:39,840 --> 00:36:43,050 Do se 5 apartenas al la komenco, ni vidu kiel ni trovos ke ekstere. 877 00:36:43,050 --> 00:36:46,310 Mi pravalorizi mia PTR puntero al numero 9 denove. 878 00:36:46,310 --> 00:36:49,140 Kaj mi komprenis, ho, 5 estas malpli ol 9. 879 00:36:49,140 --> 00:36:50,880 Do ripari ĉi bildon por ni. 880 00:36:50,880 --> 00:36:54,820 Kies manoj, Gabe estas aŭ David or-- kio estas numero 9 estas nomata? 881 00:36:54,820 --> 00:36:55,740 >> Publiko: Jen. 882 00:36:55,740 --> 00:36:58,406 >> DAVID J. Malan: Jen la hands-- kiu el niaj manoj devas ŝanĝi? 883 00:36:58,406 --> 00:36:58,905 884 00:36:58,905 --> 00:37:00,970 OK, do Gabe notas al kio nun? 885 00:37:00,970 --> 00:37:01,640 Ĉe mi. 886 00:37:01,640 --> 00:37:02,750 Mi estas la nova nodo. 887 00:37:02,750 --> 00:37:04,870 Do mi simple speco de movado tie por vidi ĝin vide. 888 00:37:04,870 --> 00:37:06,435 Kaj dume Kion mi notas, ke? 889 00:37:06,435 --> 00:37:07,910 890 00:37:07,910 --> 00:37:09,020 Ankoraŭ kie mi montras. 891 00:37:09,020 --> 00:37:10,000 Do jen ĝi. 892 00:37:10,000 --> 00:37:13,717 Do nur vere unu linion de kodo korektoj tiu aparta temo, ĝi similus. 893 00:37:13,717 --> 00:37:14,800 Bone, do tio estas bona. 894 00:37:14,800 --> 00:37:17,580 Kaj ĉu iu esti lokokupilon por 5? 895 00:37:17,580 --> 00:37:18,080 Venu supren. 896 00:37:18,080 --> 00:37:20,270 897 00:37:20,270 --> 00:37:21,320 Ni ekiru venontfoje. 898 00:37:21,320 --> 00:37:24,280 >> Bone, do now-- kaj kiel flanken, la nomoj 899 00:37:24,280 --> 00:37:28,510 Mi ne farante eksplicita mencio de dekstra Nun pred montrilo, antaŭulo montrilo 900 00:37:28,510 --> 00:37:31,260 kaj novaj montrilo, tio nur la nomoj donitaj 901 00:37:31,260 --> 00:37:35,280 en la specimeno kodon por la punteros aŭ miaj manoj, ke la speco de indikante ĉirkaŭe. 902 00:37:35,280 --> 00:37:36,060 Kio estas via nomo? 903 00:37:36,060 --> 00:37:36,700 >> Publiko: Christine. 904 00:37:36,700 --> 00:37:37,100 >> DAVID J. Malan: Christine. 905 00:37:37,100 --> 00:37:38,090 Bonvenon surŝipe. 906 00:37:38,090 --> 00:37:42,180 Bone, do ni konsideru nun iomete pli ĝena scenaro, 907 00:37:42,180 --> 00:37:46,350 per kiu mi volas enigi iu kiel 26 en tiun. 908 00:37:46,350 --> 00:37:47,090 20? 909 00:37:47,090 --> 00:37:47,590 Kio? 910 00:37:47,590 --> 00:37:50,510 Tiuj are-- bona afero, kiun ni havas ĉi plumo. 911 00:37:50,510 --> 00:37:51,955 Bone, 20. 912 00:37:51,955 --> 00:37:53,640 913 00:37:53,640 --> 00:37:57,570 Se iu povus ricevi alian pecon de papero preta, nur en case-- gxuste. 914 00:37:57,570 --> 00:37:58,370 Ho, interesa. 915 00:37:58,370 --> 00:37:59,760 916 00:37:59,760 --> 00:38:02,390 Nu tio estas ekzemplo de prelego cimon. 917 00:38:02,390 --> 00:38:03,894 OK do kio estas via nomo denove? 918 00:38:03,894 --> 00:38:04,560 Publiko: Julia. 919 00:38:04,560 --> 00:38:07,559 DAVID J. Malan: Julia, vi povas pop eksteren kaj ŝajnigi ke vi neniam? 920 00:38:07,559 --> 00:38:09,040 OK, ĉi tio neniam okazis. 921 00:38:09,040 --> 00:38:09,680 Dankon. 922 00:38:09,680 --> 00:38:12,180 Do supozu ni volas enmeti Julia en ĉi ligillisto. 923 00:38:12,180 --> 00:38:13,780 Ŝi estas la numero 20. 924 00:38:13,780 --> 00:38:15,530 Kaj sendube ŝi tuj aparteni al la 925 00:38:15,530 --> 00:38:17,521 begin-- ne noti al io ankoraŭ. 926 00:38:17,521 --> 00:38:20,020 Do via mano povas ia esti malsupren nula aŭ iu rubo valoro. 927 00:38:20,020 --> 00:38:21,210 Ni diras al la rapidan rakonton. 928 00:38:21,210 --> 00:38:22,980 Mi indik numero 5 tiu tempo. 929 00:38:22,980 --> 00:38:23,880 Tiam mi kontrolu 9. 930 00:38:23,880 --> 00:38:25,130 Tiam mi kontrolu 17. 931 00:38:25,130 --> 00:38:26,247 Tiam mi kontrolu 22. 932 00:38:26,247 --> 00:38:27,650 933 00:38:27,650 --> 00:38:32,485 Kaj mi rimarkas, Ooh, Julia bezonas iri antaux 22. 934 00:38:32,485 --> 00:38:33,580 935 00:38:33,580 --> 00:38:34,660 Do kio devas okazi? 936 00:38:34,660 --> 00:38:35,786 937 00:38:35,786 --> 00:38:36,910 Kies manoj bezonos ŝanĝi? 938 00:38:36,910 --> 00:38:38,360 Julia, Mia or-- kio estas via nomo denove? 939 00:38:38,360 --> 00:38:39,230 >> Publiko: kristano. 940 00:38:39,230 --> 00:38:40,060 >> DAVID J. Malan: kristana aŭ? 941 00:38:40,060 --> 00:38:40,560 >> Publiko: Andy. 942 00:38:40,560 --> 00:38:40,905 >> DAVID J. Malan: Andy. 943 00:38:40,905 --> 00:38:41,654 Kristano aŭ Andy? 944 00:38:41,654 --> 00:38:44,280 945 00:38:44,280 --> 00:38:45,690 Andy bezonas noti al? 946 00:38:45,690 --> 00:38:46,780 947 00:38:46,780 --> 00:38:47,341 Julia. 948 00:38:47,341 --> 00:38:47,840 Bone. 949 00:38:47,840 --> 00:38:48,960 Do Andy, ĉu vi volas noti al Julia? 950 00:38:48,960 --> 00:38:50,120 Sed atendu momenton. 951 00:38:50,120 --> 00:38:53,260 En la rakonto tiel multe, Mi estas la speco de unu 952 00:38:53,260 --> 00:38:56,800 zorge, en la senco ke montrilo estas la afero tio 953 00:38:56,800 --> 00:38:57,850 movante tra la listo. 954 00:38:57,850 --> 00:39:00,800 Ni povus havi nomon por Andy, sed ne estas variablo nomis Andy. 955 00:39:00,800 --> 00:39:04,320 La sola alia variablo ni estas unua, kiu estas reprezentita de Gabe. 956 00:39:04,320 --> 00:39:07,690 >> Do tiu estas efektive kial tiel nun ni ne bezonas tion. 957 00:39:07,690 --> 00:39:10,846 Sed nun la ekrano estas mencii denove pred montrilo. 958 00:39:10,846 --> 00:39:11,970 Do lasu min esti pli eksplicitaj. 959 00:39:11,970 --> 00:39:14,820 Se tiu estas puntero, mi havis pli bonan preni iom pli inteligenta 960 00:39:14,820 --> 00:39:15,950 pri mia ripeto. 961 00:39:15,950 --> 00:39:19,580 Se vi ne atentas miajn irante tra ĉi tie denove, indikante tie, indikante tie. 962 00:39:19,580 --> 00:39:22,500 Sed lasu min havi pred montrilo, antaŭulo montrilo, tio 963 00:39:22,500 --> 00:39:24,740 ia fingromontrante la elemento Mi estis ĉe. 964 00:39:24,740 --> 00:39:27,330 Do kiam mi iros tien, nun mia maldekstra mano ĝisdatigojn. 965 00:39:27,330 --> 00:39:29,370 Kiam mi iras tien mian maldekstran manon ĝisdatigojn. 966 00:39:29,370 --> 00:39:33,090 Kaj nun mi devas ne nur puntero al la elemento kiu iras post Julia, 967 00:39:33,090 --> 00:39:36,300 Mi ankoraŭ havas puntero al Andy, la elemento antaŭe. 968 00:39:36,300 --> 00:39:39,430 Do vi havas aliron, esence, breadcrumbs, se vi volas, 969 00:39:39,430 --> 00:39:41,500 al ĉiu el la kondiĉo punteros. 970 00:39:41,500 --> 00:39:43,710 >> Do se mi indik Andy kaj mi ankaŭ montrante 971 00:39:43,710 --> 00:39:47,105 ĉe kristana, kies manoj nun devus esti rimarkigite aliloke? 972 00:39:47,105 --> 00:39:48,770 973 00:39:48,770 --> 00:39:51,960 Do Andy povas nun notas al Julia. 974 00:39:51,960 --> 00:39:54,460 Julia povas nun notas al kristano. 975 00:39:54,460 --> 00:39:56,950 Ĉar ŝi povas kopii mian dekstra mano la montrilo. 976 00:39:56,950 --> 00:40:00,044 Kaj tio efektive metas vin reen en tiu loko tie. 977 00:40:00,044 --> 00:40:02,460 Do mallonge, kvankam ĉi prenas al ni specon de ĉiam 978 00:40:02,460 --> 00:40:04,510 por vere ĝisdatigi ligillisto, realigi 979 00:40:04,510 --> 00:40:06,580 ke la operacioj estas relative simpla. 980 00:40:06,580 --> 00:40:10,030 Ĝi estas unu, du, tri linioj de kodo finfine. 981 00:40:10,030 --> 00:40:12,780 Sed envolvis ĉirkaŭ tiuj linioj de kodo supozeble 982 00:40:12,780 --> 00:40:16,350 Estas iom da logiko kiun efike demandas la demandon, kie ni estas? 983 00:40:16,350 --> 00:40:18,970 Ĉu ni komence, la mezo, aŭ la fino? 984 00:40:18,970 --> 00:40:21,890 >> Nun, estas certe iu alia operacioj ni povus apliki. 985 00:40:21,890 --> 00:40:24,880 Kaj tiuj bildoj tie apenaŭ bildigas kion ni ĵus faris kun homoj. 986 00:40:24,880 --> 00:40:26,080 Kio pri forigo? 987 00:40:26,080 --> 00:40:30,650 Se mi volas, ekzemple, forigi la numero 34 aŭ 55, 988 00:40:30,650 --> 00:40:34,680 Mi ne havas la saman specon de kodo, sed mi bezonos unu aŭ du paŝojn. 989 00:40:34,680 --> 00:40:36,110 Pro kio novas? 990 00:40:36,110 --> 00:40:40,460 Se mi forigi iu fine, kiel numero 55 kaj tiam 34, 991 00:40:40,460 --> 00:40:42,995 kio ankaŭ devas ŝanĝi kiel tion fari? 992 00:40:42,995 --> 00:40:44,870 Mi devas ne evict-- kio estas via nomo denove? 993 00:40:44,870 --> 00:40:45,380 >> Publiko: Jack. 994 00:40:45,380 --> 00:40:46,255 >> DAVID J. Malan: Jack. 995 00:40:46,255 --> 00:40:49,770 Mi devas ne nur evict-- libera Jack, tiel laŭvorte nomas libera Jack, aŭ almenaŭ 996 00:40:49,770 --> 00:40:53,530 la montrilo tie, sed nun kion bezonas ŝanĝi kun Petro? 997 00:40:53,530 --> 00:40:55,510 Lia mano bona komenci indikante malsupren. 998 00:40:55,510 --> 00:40:59,300 Ĉar kiam mi vokas libera je Joĉjo, se Petro ankoraŭ fingromontrante Joĉjo 999 00:40:59,300 --> 00:41:02,530 kaj mi observu petolanta la listo kaj aliron ĉi puntero, 1000 00:41:02,530 --> 00:41:05,650 tio estas kiam nia malnova amiko segmentación fault povus efektive piedbati en. 1001 00:41:05,650 --> 00:41:07,860 Ĉar ni donis la memoron reen al Jack. 1002 00:41:07,860 --> 00:41:10,760 >> Vi povas resti tie mallerte por nur momento. 1003 00:41:10,760 --> 00:41:13,410 Ĉar ni havas nur paro fina operacioj al konsideri. 1004 00:41:13,410 --> 00:41:15,600 Forigado la kapo de la lerta, aŭ beginning-- kaj ĉi onia 1005 00:41:15,600 --> 00:41:16,349 iom ĝena. 1006 00:41:16,349 --> 00:41:19,640 Ĉar ni devas scii ke Gabe Estas speco de speciala en tiu programo. 1007 00:41:19,640 --> 00:41:21,440 Ĉar efektive li havas sian propran montrilo. 1008 00:41:21,440 --> 00:41:24,860 Li ne nur esti indik, kiel estas preskaŭ ĉiuj aliaj tie. 1009 00:41:24,860 --> 00:41:28,112 >> Do kiam la estro de la listo estas forigita, kies manoj bezonos ŝanĝi nun? 1010 00:41:28,112 --> 00:41:29,070 Kio estas via nomo denove? 1011 00:41:29,070 --> 00:41:29,450 >> Publiko: Christine. 1012 00:41:29,450 --> 00:41:31,408 >> DAVID J. Malan: Min multe ĉe nomoj, ŝajne. 1013 00:41:31,408 --> 00:41:34,011 Do Christine kaj Gabe, kies manoj bezonos ŝanĝi 1014 00:41:34,011 --> 00:41:36,510 kiam oni provas forigi Christine, numero 5, de la bildo? 1015 00:41:36,510 --> 00:41:37,550 1016 00:41:37,550 --> 00:41:38,820 OK, do ni faru Gabe. 1017 00:41:38,820 --> 00:41:40,950 Gabe tuj atentigi, supozeble, en la numero 9. 1018 00:41:40,950 --> 00:41:42,230 1019 00:41:42,230 --> 00:41:44,642 Sed kion proksima devus okazi? 1020 00:41:44,642 --> 00:41:46,600 Publiko: Christine devus nula [inaudible]. 1021 00:41:46,600 --> 00:41:50,244 DAVID J. Malan: Bone, ni devus verŝajne make-- mi aŭdis "nula" ie. 1022 00:41:50,244 --> 00:41:51,410 Publiko: Nulaj kaj libera sxin. 1023 00:41:51,410 --> 00:41:51,855 DAVID J. Malan: NULL kio? 1024 00:41:51,855 --> 00:41:53,074 Publiko: Nulaj kaj libera sxin. 1025 00:41:53,074 --> 00:41:54,490 DAVID J. Malan: Nulaj kaj libera sxin. 1026 00:41:54,490 --> 00:41:55,422 Do tio estas tre facila. 1027 00:41:55,422 --> 00:41:58,380 Kaj ĝi estas perfekta ke vi estas nun speco de starantaj tie ne apartenas. 1028 00:41:58,380 --> 00:42:00,430 Ĉar vi estis disparigita de la listo. 1029 00:42:00,430 --> 00:42:02,820 Vi efektive estis orfinoj el la listo. 1030 00:42:02,820 --> 00:42:07,770 Kaj do ni prefere nomas libera nun Christine doni tiun memoron reen. 1031 00:42:07,770 --> 00:42:10,240 Alie ĉiufoje ni forigi nodon de la listo 1032 00:42:10,240 --> 00:42:14,230 ni povus fari la lerta pli mallonga, sed fakte ne malkreskanta 1033 00:42:14,230 --> 00:42:15,096 la grandeco en memoro. 1034 00:42:15,096 --> 00:42:17,720 Kaj tiel, se ni plenumas aldonante kaj aldono, aldonante tion al la listo, 1035 00:42:17,720 --> 00:42:19,280 mia komputilo povus akiri pli malrapida kaj pli malrapida kaj pli malrapida, 1036 00:42:19,280 --> 00:42:21,740 ĉar mi kurante el memoro, eĉ se mi ne vere 1037 00:42:21,740 --> 00:42:25,580 uzante Christine bitokoj de memoro anymore. 1038 00:42:25,580 --> 00:42:28,500 >> Tiel en la fino estas aliaj scenaroj, de course-- forigo 1039 00:42:28,500 --> 00:42:30,640 en la mezo, forigo fine, kiel ni vidis. 1040 00:42:30,640 --> 00:42:32,348 Sed la plej interesa defio nun estas 1041 00:42:32,348 --> 00:42:34,770 tuj estos konsideri ĝuste kion la rula tempo estas. 1042 00:42:34,770 --> 00:42:36,640 Do ne nur vi povas teni vian pecoj de papero, se, Gabe, 1043 00:42:36,640 --> 00:42:38,640 Vi ne gravas donante ĉiuj streso pilko. 1044 00:42:38,640 --> 00:42:42,100 Dankon tiel al nia ligillisto de volontuloj tie, se vi povus. 1045 00:42:42,100 --> 00:42:45,320 >> [Aplaŭdo] 1046 00:42:45,320 --> 00:42:46,700 >> DAVID J. Malan: Bone. 1047 00:42:46,700 --> 00:42:51,110 Do kelkaj analizaj demandojn tiam, se mi povus. 1048 00:42:51,110 --> 00:42:59,670 Ni vidis ĉi notacio antaŭ, big O kaj omega, superaj baroj 1049 00:42:59,670 --> 00:43:02,520 kaj subaj baroj sur la rula tempo de iuj algoritmo. 1050 00:43:02,520 --> 00:43:04,950 Do ni konsideru nur kelkaj demandoj. 1051 00:43:04,950 --> 00:43:07,090 >> Unu, kaj ni diris antaŭe, kio estas la kurado 1052 00:43:07,090 --> 00:43:10,647 tempo de Serĉi lerta en terminoj de granda a? 1053 00:43:10,647 --> 00:43:13,480 Kio estas supera baro sur la kurado tempo de serĉado ligillisto 1054 00:43:13,480 --> 00:43:16,340 kiel realigitajn de niaj volontuloj tie? 1055 00:43:16,340 --> 00:43:17,820 Estas granda O de n, lineara. 1056 00:43:17,820 --> 00:43:20,630 Ĉar en la plej malbona kazo, la elemento, kiel 55, 1057 00:43:20,630 --> 00:43:23,830 ni povus serĉi povus esti kie Jack, la tutan vojon al la fino. 1058 00:43:23,830 --> 00:43:28,250 Kaj bedaŭrinde, kontraste tabelo Ni ne povas imagi tiun tempon. 1059 00:43:28,250 --> 00:43:31,820 Kvankam ĉiuj niaj homoj estis ordo el malgrandaj elementoj, 5 1060 00:43:31,820 --> 00:43:35,900 la tutan vojon ĝis la pli granda elemento, 55, kiuj estas kutime bona afero. 1061 00:43:35,900 --> 00:43:38,815 Sed kion faras tiu supozo ne plu permesos al ni fari? 1062 00:43:38,815 --> 00:43:39,775 1063 00:43:39,775 --> 00:43:40,650 Publiko: [inaudible] 1064 00:43:40,650 --> 00:43:40,920 DAVID J. Malan: Diru denove? 1065 00:43:40,920 --> 00:43:41,800 Publiko: Hazarda aliro. 1066 00:43:41,800 --> 00:43:43,049 DAVID J. Malan: Hazarda aliro. 1067 00:43:43,049 --> 00:43:46,330 Kaj siavice, kiu signifas, ke ni ne kapablas plu uzi malforta nuloj, intuicio, 1068 00:43:46,330 --> 00:43:49,365 kaj evidenteco de uzanta duuma esplorrigardi kaj dividi kaj venki. 1069 00:43:49,365 --> 00:43:51,240 Ĉar kvankam ni homoj povis evidente 1070 00:43:51,240 --> 00:43:54,610 vidu ke Andy aŭ kristano estis proksimume en la mezo de la lerta, 1071 00:43:54,610 --> 00:43:57,670 Ni nur scias ke kiel komputilo komencis trakuri la elenco 1072 00:43:57,670 --> 00:43:59,029 ekde la komenco. 1073 00:43:59,029 --> 00:44:00,570 Do ni forlasis ke hazarda aliro. 1074 00:44:00,570 --> 00:44:04,380 >> Tiel granda O de n nun estas la supra ligis sur nia serĉo tempo. 1075 00:44:04,380 --> 00:44:07,920 Kio pri omega de nia serĉo? 1076 00:44:07,920 --> 00:44:11,535 Kio estas la suba baro sur serĉado por iu cifero en tiu listo? 1077 00:44:11,535 --> 00:44:12,410 Publiko: [inaudible] 1078 00:44:12,410 --> 00:44:13,040 DAVID J. Malan: Diru denove? 1079 00:44:13,040 --> 00:44:13,420 Publiko: Unu. 1080 00:44:13,420 --> 00:44:13,800 DAVID J. Malan: Unu. 1081 00:44:13,800 --> 00:44:14,760 Do konstanta tempo. 1082 00:44:14,760 --> 00:44:17,020 En la plej bona kazo, Christine estas ĝuste en la komenco de la listo. 1083 00:44:17,020 --> 00:44:19,020 Kaj ni serĉas numero 5, do ni trovis ŝin. 1084 00:44:19,020 --> 00:44:19,787 Do ne estas granda interkonsento. 1085 00:44:19,787 --> 00:44:22,370 Sed ŝi alvenis al esti en la komencante de la listo en ĉi tiu kazo. 1086 00:44:22,370 --> 00:44:23,745 Kio pri iu kiel Forigi? 1087 00:44:23,745 --> 00:44:24,717 1088 00:44:24,717 --> 00:44:26,300 Kio, se vi volas forigi elementon? 1089 00:44:26,300 --> 00:44:29,200 Kio supera baro kaj suba baro sur viŝante ion de kunligita 1090 00:44:29,200 --> 00:44:29,699 listo? 1091 00:44:29,699 --> 00:44:35,195 1092 00:44:35,195 --> 00:44:36,070 Publiko: [inaudible] 1093 00:44:36,070 --> 00:44:36,420 DAVID J. Malan: Diru denove? 1094 00:44:36,420 --> 00:44:37,067 Publiko: n. 1095 00:44:37,067 --> 00:44:38,900 DAVID J. Malan: n estas ja la supera baro. 1096 00:44:38,900 --> 00:44:41,700 Ĉar en la plej malbona kazo ni klopodos forviŝi Jack, kiel ni ĵus faris. 1097 00:44:41,700 --> 00:44:43,050 Li estas la tuta vojo al la fino. 1098 00:44:43,050 --> 00:44:45,419 Nin por ĉiam, aŭ n paŝoj al trovi lin. 1099 00:44:45,419 --> 00:44:46,460 Do tio estas supera baro. 1100 00:44:46,460 --> 00:44:47,430 Tio estas lineara, certas. 1101 00:44:47,430 --> 00:44:50,970 Kaj la plej bona kazo rula tempo, aŭ la subaj baroj en la plej bona kazo 1102 00:44:50,970 --> 00:44:51,975 estus konstanta tempo. 1103 00:44:51,975 --> 00:44:54,600 Ĉar eble ni provu forigi Christine, kaj ni metas bonŝanca 1104 00:44:54,600 --> 00:44:55,558 ŝi komence. 1105 00:44:55,558 --> 00:44:56,350 Nun atendu minuton. 1106 00:44:56,350 --> 00:44:59,370 Gabe estis ankaŭ ĉe la komenco, kaj ni ankaŭ devis ĝisdatigi Gabe. 1107 00:44:59,370 --> 00:45:01,150 Por ke ne estis nur unu paŝo. 1108 00:45:01,150 --> 00:45:04,210 Do ĉu vere konstanto tempo, en la plej bona kazo, 1109 00:45:04,210 --> 00:45:06,345 forigi la plej malgranda ero? 1110 00:45:06,345 --> 00:45:07,360 1111 00:45:07,360 --> 00:45:10,960 Ĝi estas, kvankam ĝi povus esti du, tri, aŭ eĉ 100 linioj de kodo, 1112 00:45:10,960 --> 00:45:14,000 se ĝi estas la sama nombro de linioj, ne en iu ciklo, 1113 00:45:14,000 --> 00:45:16,577 kaj sendepende de la grandeco el la listo, absolute. 1114 00:45:16,577 --> 00:45:18,660 Viŝante la elemento ĉe la komenco de la listo, 1115 00:45:18,660 --> 00:45:21,940 eĉ se ni devas trakti Gabe, ankoraŭ estas konstanta tempo. 1116 00:45:21,940 --> 00:45:24,220 >> Do tio ŝajnas kiel amasa paŝo malantaŭen. 1117 00:45:24,220 --> 00:45:27,000 Kaj kio tempoperdo se, en la semajno kaj semajno 1118 00:45:27,000 --> 00:45:30,250 nulo ni havis ne nur _pseudocode_ kodo sed reala kodo 1119 00:45:30,250 --> 00:45:35,780 implementar iu kiu estas log bazo n, aŭ ensalutu, prefere, de n, bazo 2, 1120 00:45:35,780 --> 00:45:37,150 en terminoj de lia rultempo. 1121 00:45:37,150 --> 00:45:40,710 Do kial la heck estus ni volas komenci uzante iun kiel ligillisto? 1122 00:45:40,710 --> 00:45:41,517 Yeah. 1123 00:45:41,517 --> 00:45:44,022 >> Publiko: Do ​​vi povas aldoni elementoj por la tabelo. 1124 00:45:44,022 --> 00:45:46,230 DAVID J. Malan: Do vi povas aldoni elementojn al la tabelo. 1125 00:45:46,230 --> 00:45:47,550 Kaj ĉi tiu estas ankaŭ temáticas. 1126 00:45:47,550 --> 00:45:49,740 Kaj ni daŭre vidos tiu, tiu komerco-off, multe 1127 00:45:49,740 --> 00:45:51,573 kiel ni vidis komerco-off kun merge varo. 1128 00:45:51,573 --> 00:45:54,606 Ni povus vere akceli serĉu aŭ ordiga prefere 1129 00:45:54,606 --> 00:45:57,480 se ni elspezos iom pli da spaco kaj havi plian eron de memoro 1130 00:45:57,480 --> 00:45:58,760 aŭ tabelo por merge varo. 1131 00:45:58,760 --> 00:46:01,270 Sed ni elspezos pli spaco, sed ni ŝpari tempon. 1132 00:46:01,270 --> 00:46:04,820 En ĉi tiu kazo, ni rezignante tempo sed ni estas 1133 00:46:04,820 --> 00:46:08,170 gajnante fleksebleco, dinamismo se vi volas, 1134 00:46:08,170 --> 00:46:10,280 kio estas defendeble pozitiva karakterizaĵo. 1135 00:46:10,280 --> 00:46:11,520 >> Ni ankaŭ elspezante spaco. 1136 00:46:11,520 --> 00:46:13,710 En kiu senco estas kunligita listo pli multekostaj 1137 00:46:13,710 --> 00:46:15,700 en terminoj de spaco ol tabelo? 1138 00:46:15,700 --> 00:46:18,379 1139 00:46:18,379 --> 00:46:19,920 Kie estas la ekstra spaco devenante? 1140 00:46:19,920 --> 00:46:20,460 Yeah? 1141 00:46:20,460 --> 00:46:21,800 >> Publiko: [inaudible] montrilo. 1142 00:46:21,800 --> 00:46:23,310 >> DAVID J. Malan: Jes, ni ankaŭ la montrilo. 1143 00:46:23,310 --> 00:46:25,560 Do tiu estas minorly ĝena en kiu jam ne estas 1144 00:46:25,560 --> 00:46:27,780 Mi stoki nur int reprezenti int. 1145 00:46:27,780 --> 00:46:30,990 Mi stokante la int kaj montrilo, kio ankaŭ estas 32 bitoj. 1146 00:46:30,990 --> 00:46:33,470 Do mi laŭvorte duobliganta la kvanton de spaco implikitaj. 1147 00:46:33,470 --> 00:46:36,040 Do tio estas la komerco-off, sed tio estas en la kazo de int. 1148 00:46:36,040 --> 00:46:39,580 Supozu ke vi ne stokante int, sed supozu ĉiu el tiuj rektanguloj 1149 00:46:39,580 --> 00:46:43,290 aŭ ĉiu de tiuj homoj reprezentis vorto, angla vorto, kiu 1150 00:46:43,290 --> 00:46:46,430 eble kvin karakteroj, 10 karakteroj, eble eĉ pli. 1151 00:46:46,430 --> 00:46:49,940 Tiam aldonante nur 32 pli bitoj povus esti malpli granda interkonsento. 1152 00:46:49,940 --> 00:46:52,160 >> Kio se ĉiu el la studentoj en la manifestacio 1153 00:46:52,160 --> 00:46:55,107 verdire studento structs ke havas nomojn kaj domoj kaj eble 1154 00:46:55,107 --> 00:46:57,065 telefonnumerojn kaj Twitter manipulas kaj similaj. 1155 00:46:57,065 --> 00:46:59,564 Do ĉiuj kampoj ni komencis parolante pri la alia tago, 1156 00:46:59,564 --> 00:47:02,410 multe malpli grandan interkonsenton kiel niaj nodoj akiras pli interesa 1157 00:47:02,410 --> 00:47:05,972 kaj granda por elspezi, he, plia puntero simple ligi ilin kune. 1158 00:47:05,972 --> 00:47:07,180 Sed ja ĝi estas komerco-off. 1159 00:47:07,180 --> 00:47:09,560 Kaj efektive, la kodo estas pli kompleksaj, kiel vi 1160 00:47:09,560 --> 00:47:11,770 vidu per komencis trakuri tra ke aparta ekzemplo. 1161 00:47:11,770 --> 00:47:14,302 Sed kio se ne estis iuj Holy Grail tie. 1162 00:47:14,302 --> 00:47:17,010 Kio se ni ne prenas paŝo malantaŭen sed amasa paŝo antaŭen 1163 00:47:17,010 --> 00:47:19,180 kaj implementar datumoj strukturo tra kiu ni 1164 00:47:19,180 --> 00:47:22,870 povas trovi elementojn kiel Jack aŭ Christine aŭ ajna alia elementoj 1165 00:47:22,870 --> 00:47:25,870 en tiu tabelo en vera konstanta tempo? 1166 00:47:25,870 --> 00:47:26,920 Search estas konstanto. 1167 00:47:26,920 --> 00:47:28,320 Forigi estas konstanta. 1168 00:47:28,320 --> 00:47:29,570 Enmeti estas konstanta. 1169 00:47:29,570 --> 00:47:32,260 Ĉiuj de ĉi tiuj operacioj estas konstanto. 1170 00:47:32,260 --> 00:47:33,750 Tio estus nia Sankta Grial. 1171 00:47:33,750 --> 00:47:36,690 Kaj tio estas kie ni reprenos venontfoje. 1172 00:47:36,690 --> 00:47:38,600 Vidi vin tiam. 1173 00:47:38,600 --> 00:47:39,371