1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Wythnos 6] 2 00:00:02,000 --> 00:00:04,000 [David J. Malan] [Harvard University] 3 00:00:04,000 --> 00:00:08,000 [Mae hyn yn CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:12,000 >> Mae hyn yn CS50, ac mae hyn yn dechrau Wythnos 6, 5 00:00:12,000 --> 00:00:16,000 felly ychydig o offer newydd bellach ar gael i chi fanteisio ar, 6 00:00:16,000 --> 00:00:19,000 y cyntaf a elwir yn CS50 Style. 7 00:00:19,000 --> 00:00:22,000 Odds yw os nad ydych chi fel fi neu unrhyw un o'r cymrodyr addysgu, 8 00:00:22,000 --> 00:00:26,000 eich bod wedi gweld yn ôl pob tebyg rhaglen y mae ei arddull yn edrych rhywbeth bach fel hyn. 9 00:00:26,000 --> 00:00:30,000 Efallai y byddwch yn dechrau torri rhai corneli yn hwyr yn y nos, neu fe fyddwch yn delio ag ef yn ddiweddarach, 10 00:00:30,000 --> 00:00:32,000 ac yna TF or CA dod drosodd yn ystod oriau swyddfa. 11 00:00:32,000 --> 00:00:34,000 Yna, mae'n anodd i ni eu darllen. 12 00:00:34,000 --> 00:00:38,000 Wel, mae'r cod yn syntactically gywir, a bydd yn llunio, a bydd yn rhedeg mewn gwirionedd. 13 00:00:38,000 --> 00:00:40,000 Ond nid yw'n sicr o 5 ar gyfer arddull. 14 00:00:40,000 --> 00:00:45,000 >> Ond yn awr, os ydym yn mynd i mewn i'r cyfeiriadur yma- 15 00:00:45,000 --> 00:00:48,000 ac yn sylwi bod gennyf conditions2.c- 16 00:00:48,000 --> 00:00:55,000 ac yr wyf hidla hon archa newydd, style50, ar y conditions2.c ffeil, Mewnbynnu, 17 00:00:55,000 --> 00:00:57,000 sylwi ei fod yn fy hysbysu ei fod wedi bod yn stylized. 18 00:00:57,000 --> 00:01:00,000 Gedit sylwi bod y ffeil wedi cael ei newid ar ddisg, 19 00:01:00,000 --> 00:01:08,000 ac os cliciwch wyf reload, yr holl broblemau eich eu hawtomeiddio yn awr. 20 00:01:08,000 --> 00:01:15,000 [Cymeradwyaeth] 21 00:01:15,000 --> 00:01:17,000 Dyna un o'r pethau a wnaethom y penwythnos hwn. 22 00:01:17,000 --> 00:01:20,000 Sylweddoli ei fod yn amherffaith oherwydd bod rhai cod 23 00:01:20,000 --> 00:01:23,000 y ni fydd yn gallu stylize berffaith, 24 00:01:23,000 --> 00:01:26,000 ond yn sylweddoli hyn yn awr yn offeryn y gallwch fanteisio ar 25 00:01:26,000 --> 00:01:33,000 os mai dim ond i dacluso rhai o'r braces yn fwy errantly gosod cyrliog ac yn y blaen. 26 00:01:33,000 --> 00:01:36,000 >> Ond yn fwy grymus yn awr yw CS50 Gwirio. 27 00:01:36,000 --> 00:01:39,000 Gyda CS50 Gwirio, alli 'n weithredol wneud y profion cywirdeb un 28 00:01:39,000 --> 00:01:42,000 ar eich cod eich hun bod y cymrodyr addysgu yn gallu gwneud hynny. 29 00:01:42,000 --> 00:01:44,000 Mae hwn yn gorchymyn cyfleustodau llinell sy'n dod yn awr yn y peiriant 30 00:01:44,000 --> 00:01:46,000 cyn gynted ag y byddwch yn gwneud update50 fel y 31 00:01:46,000 --> 00:01:49,000 pset 4 manylebau, ac rydych yn ei ddefnyddio yn y bôn fel hyn. 32 00:01:49,000 --> 00:01:51,000 Rydych yn rhedeg y check50 gorchymyn. 33 00:01:51,000 --> 00:01:56,000 Yna byddwch yn mynd heibio mewn llinell orchymyn ddadl, neu'n fwy cyffredinol a elwir yn newid neu faner. 34 00:01:56,000 --> 00:01:58,000 Yn gyffredinol, pethau sydd cysylltnodau yn cael eu galw yn newid 35 00:01:58,000 --> 00:02:02,000 i orchymyn rhaglen llinell, felly-c yn nodi 36 00:02:02,000 --> 00:02:04,000 y gwiriadau yr ydych am ei redeg. 37 00:02:04,000 --> 00:02:07,000 >> Mae'r profion yr ydych am redeg yn cael eu nodi unigryw gan y llinyn, 38 00:02:07,000 --> 00:02:10,000 2012/pset4/resize. 39 00:02:10,000 --> 00:02:13,000 Mewn geiriau eraill, dyna dim ond llinyn fympwyol ond unigryw 40 00:02:13,000 --> 00:02:18,000 ein bod yn defnyddio i adnabod unigryw profion cywirdeb 4 pset yn. 41 00:02:18,000 --> 00:02:21,000 Ac yna eich bod yn nodi rhestr o le wahanu o'r ffeiliau yr ydych am lwytho 42 00:02:21,000 --> 00:02:24,000 i CS50 Gwirio i'w dadansoddi. 43 00:02:24,000 --> 00:02:29,000 Er enghraifft, os byddaf yn mynd i mewn i fy ateb yma am resize.c- 44 00:02:29,000 --> 00:02:31,000 gadewch i mi agor terfynell fwy ffenestr- 45 00:02:31,000 --> 00:02:42,000 ac rwy'n mynd yn ei flaen ac yn rhedeg gadewch i ni ddweud check50-c 2012/pset4/resize, 46 00:02:42,000 --> 00:02:46,000 ac yna rwy'n mynd yn ei flaen ac yn nodi enwau'r ffeiliau, 47 00:02:46,000 --> 00:02:49,000 resize.c, a tharo yna Enter, mae'n cywasgu, 48 00:02:49,000 --> 00:02:53,000 mae'n Llwythiadau, mae'n gwirio, a Fi jyst methu criw cyfan o brofion. 49 00:02:53,000 --> 00:02:59,000 Mae'r un mewn coch ar y chwith uchaf yn dweud bod resize.c a bmp yn bodoli. 50 00:02:59,000 --> 00:03:01,000 Dyna oedd y prawf. Dyna oedd y cwestiwn a ofynnwyd. 51 00:03:01,000 --> 00:03:04,000 Ac mae'n anhapus oherwydd bod yr ateb yn anghywir. 52 00:03:04,000 --> 00:03:08,000 Mae'r testun gwyn isod y mae'n ei ddweud disgwylir bmp.h i fodoli, a bod yn syml fy fai. 53 00:03:08,000 --> 00:03:11,000 Anghofiais i lwytho, felly mae angen i mi lwytho y ddwy ffeil, cafodd yr 54 00:03:11,000 --> 00:03:14,000 resize.c a bmp.h. 55 00:03:14,000 --> 00:03:17,000 Ond yn awr sylwi ar yr holl brofion eraill yn felyn oherwydd nad ydynt wedi rhedeg, 56 00:03:17,000 --> 00:03:21,000 ac felly yr wyneb sy'n gwenu yn fertigol oherwydd ei fod yn Na llon na lleddf, 57 00:03:21,000 --> 00:03:25,000 ond rhaid inni wneud iawn y mater hwnnw mewn coch cyn y bydd y gwiriadau eraill redeg. 58 00:03:25,000 --> 00:03:27,000 >> Gadewch i mi atgyweiria hon. 59 00:03:27,000 --> 00:03:30,000 Gadewch i mi chwyddo allan ac ailgynnal hyn, y tro hwn gyda bmp.h hefyd 60 00:03:30,000 --> 00:03:34,000 ar y llinell orchymyn, Mewnbynnu, ac yn awr os aiff popeth yn iawn, 61 00:03:34,000 --> 00:03:38,000 mae'n mynd i wirio ac yna dychwelyd o ganlyniad i-dal eich anadl- 62 00:03:38,000 --> 00:03:42,000 holl gwyrdd, sy'n golygu fy mod i'n gwneud yn dda iawn ar pset 4 i'r graddau. 63 00:03:42,000 --> 00:03:44,000 Gallwch weld a chasglu o'r testun disgrifiadol yma 64 00:03:44,000 --> 00:03:47,000 yn union yr hyn yr ydym brofi. 65 00:03:47,000 --> 00:03:49,000 Rydym yn profi gyntaf yn y ffeiliau yn bodoli? 66 00:03:49,000 --> 00:03:51,000 Yna byddwn yn profi yn Llunio resize.c? 67 00:03:51,000 --> 00:03:58,000 Yna rydym yn profi nad yw'n newid maint a BMP 1x1-picsel pan n, y ffactor newid maint, yw 1. 68 00:03:58,000 --> 00:04:01,000 Yn awr, os nad oes gennych syniad beth yw n, byddwch unwaith y byddwch yn plymio i mewn i pset 4, 69 00:04:01,000 --> 00:04:04,000 ond yn syml, yn bwyll gwirio i wneud yn siŵr nad ydych chi'n newid maint 70 00:04:04,000 --> 00:04:08,000 delwedd o gwbl os yw'r ffactor newid maint yw 1. 71 00:04:08,000 --> 00:04:14,000 Os, ar y llaw arall, mae'n newid maint picsel 1x1 1x1 i pixel BMP i 2x2 yn gywir 72 00:04:14,000 --> 00:04:19,000 pan n yw 2, ac yna yn yr un modd, fy ffurfio yn unol â hynny. 73 00:04:19,000 --> 00:04:22,000 >> Yn fyr, mae hyn yn golygu i, un, yn cymryd y groesfan yn y bysedd 74 00:04:22,000 --> 00:04:25,000 allan o'r hafaliad cywir cyn i chi gyflwyno eich pset. 75 00:04:25,000 --> 00:04:28,000 Byddwch yn gwybod yn union beth fydd eich TF gwybod yn fuan 76 00:04:28,000 --> 00:04:30,000 pan fyddwch yn mynd ati i gyflwyno rhai o'r setiau hyn problem, 77 00:04:30,000 --> 00:04:34,000 a hefyd y cymhelliant addysgol yw ein bod yn rhoi 78 00:04:34,000 --> 00:04:37,000 y cyfle o'ch blaen felly pan fyddwch yn gwybod a priori 79 00:04:37,000 --> 00:04:39,000 fod yna chwilod yn eich cod a phrofion nad ydynt yn cael eu pasio, 80 00:04:39,000 --> 00:04:43,000 gallwch roi mewn mwy o amser yn effeithiol ymlaen llaw i ddatrys y problemau hynny 81 00:04:43,000 --> 00:04:45,000 yn hytrach nag yn colli pwyntiau, cael adborth gan eich TF, 82 00:04:45,000 --> 00:04:48,000 ac yna fynd, "Ahh," fel dylwn fod wedi cyfrifedig hynny. 83 00:04:48,000 --> 00:04:50,000 Nawr o leiaf mae 'na offeryn i helpu chi i ddod o hyd i hynny. 84 00:04:50,000 --> 00:04:52,000 Dyw hi ddim yn mynd i dynnu sylw lle y byg yn, ond bydd yn dweud wrthych 85 00:04:52,000 --> 00:04:54,000 beth yn nodweddiadol ohono. 86 00:04:54,000 --> 00:04:57,000 >> Yn awr yn sylweddoli nad yw'r profion yn gyflawn mohoni. 87 00:04:57,000 --> 00:04:59,000 Dim ond oherwydd eich bod yn cael sgrin lawn o wyrdd wynebau hapus 88 00:04:59,000 --> 00:05:02,000 nid yw'n golygu eich cod yn berffaith, ond mae'n golygu 89 00:05:02,000 --> 00:05:06,000 ei fod wedi pasio profion penodol a ragnodir gan y fanyleb. 90 00:05:06,000 --> 00:05:08,000 Weithiau, ni fyddwn yn rhyddhau sieciau. 91 00:05:08,000 --> 00:05:10,000 Er enghraifft, whodunit, un o'r agweddau ar pset 4, 92 00:05:10,000 --> 00:05:15,000 yn fath o siomedig os byddwn yn rhoi i chi 93 00:05:15,000 --> 00:05:18,000 yr ateb ynghylch yr hyn y mae, ac mae nifer o ffyrdd i ddatgelu 94 00:05:18,000 --> 00:05:21,000 pwy yw'r person sydd yn y sŵn coch. 95 00:05:21,000 --> 00:05:24,000 Bydd y fanyleb bob amser yn nodi yn y dyfodol ar gyfer ymlaen pset 5 96 00:05:24,000 --> 00:05:26,000 pa wiriadau bodoli ar eich cyfer chi. 97 00:05:26,000 --> 00:05:28,000 Byddwch yn sylwi mae hyn yn URL gwyn ar y gwaelod. 98 00:05:28,000 --> 00:05:30,000 Am y tro, mae hyn yn unig allbwn diagnostig. 99 00:05:30,000 --> 00:05:33,000 Os byddwch yn ymweld â'r URL, byddwch yn cael criw cyfan o gwallgof, negeseuon cryptig 100 00:05:33,000 --> 00:05:36,000 bod croeso i chi edrych drwy, ond mae'n bennaf ar gyfer y staff 101 00:05:36,000 --> 00:05:41,000 fel y gallwn wneud diagnosis a dadfygio bugs yn check50 ei hun. 102 00:05:41,000 --> 00:05:46,000 >> Heb oedi, gadewch i ni symud ymlaen i ble yr ydym gadael i ffwrdd. 103 00:05:46,000 --> 00:05:48,000 CS50 llyfrgell rydym yn cymryd yn ganiataol ers rhai wythnosau, 104 00:05:48,000 --> 00:05:52,000 ond yna yr wythnos diwethaf, rydym wedi dechrau plicio yn ôl un o haenau ohono. 105 00:05:52,000 --> 00:05:55,000 Rydym yn dechrau rhoi o'r neilltu llinyn o blaid yr hyn yn lle hynny? 106 00:05:55,000 --> 00:05:57,000 [Mae myfyrwyr yn] Torgoch. 107 00:05:57,000 --> 00:05:59,000 * Golosg, sydd wedi bod yn * torgoch i gyd y tro hwn, 108 00:05:59,000 --> 00:06:03,000 ond yn awr nid ydym yn rhaid i esgus bod ei fod yn llinyn union fath data. 109 00:06:03,000 --> 00:06:06,000 Yn hytrach, mae wedi bod yn gyfystyr o ryw fath ar gyfer * torgoch, 110 00:06:06,000 --> 00:06:09,000 a llinyn yn ddilyniant o gymeriadau, 111 00:06:09,000 --> 00:06:14,000 felly pam mae'n gwneud synnwyr i gynrychioli llinynnau fel * torgoch s? 112 00:06:14,000 --> 00:06:20,000 Beth mae * torgoch cynrychioli yng nghyd-destun y cysyniad hwn o linyn? 113 00:06:20,000 --> 00:06:23,000 Yeah. >> [Myfyrwyr] Y nod cyntaf. 114 00:06:23,000 --> 00:06:25,000 Da, y nod cyntaf, ond ddim yn hollol y nod cyntaf. 115 00:06:25,000 --> 00:06:27,000 Mae'ny-[Myfyrwyr] Cyfeiriad. 116 00:06:27,000 --> 00:06:29,000 Da, y cyfeiriad y cymeriad cyntaf. 117 00:06:29,000 --> 00:06:33,000 Y cyfan sydd yn angenrheidiol i gynrychioli llinyn yn cof cyfrifiadur 118 00:06:33,000 --> 00:06:36,000 yn unig y cyfeiriad unigryw ei beit cyntaf. 119 00:06:36,000 --> 00:06:38,000 Nid oes hyd yn oed yn rhaid i chi wybod pa mor hir mae'n 120 00:06:38,000 --> 00:06:42,000 oherwydd sut mae modd i chi ffigur fod allan ddynamig? 121 00:06:42,000 --> 00:06:44,000 [Myfyrwyr] hyd String. 122 00:06:44,000 --> 00:06:48,000 Gallwch ffonio, hyd llinyn ardderchog, ond sut yn gweithio hyd llinyn? 123 00:06:48,000 --> 00:06:50,000 Beth mae'n ei wneud? Yeah. 124 00:06:50,000 --> 00:06:52,000 [Myfyrwyr] Parhewch nes i chi gael y cymeriad null. 125 00:06:52,000 --> 00:06:54,000 Yeah, yn union, 'i jyst yn ailadrodd gyda dolen i, tra bod dolen, 126 00:06:54,000 --> 00:06:57,000 beth bynnag o * hyd y diwedd, a'r diwedd yn cael ei gynrychioli 127 00:06:57,000 --> 00:07:01,000 gan \ 0, cymeriad hyn a elwir yn NUL, NUL, 128 00:07:01,000 --> 00:07:05,000 Ni ddylid drysu rhwng null, sy'n rhoi syniad, 129 00:07:05,000 --> 00:07:07,000 a fydd yn dod i fyny mewn sgwrs eto heddiw. 130 00:07:07,000 --> 00:07:11,000 >> Rydym yn plicio ôl haen o GetInt, ac yna rydym yn cymryd golwg ar GetString, 131 00:07:11,000 --> 00:07:14,000 a dwyn i gof bod y ddau o'r swyddogaethau hynny, neu mewn gwirionedd, 132 00:07:14,000 --> 00:07:18,000 GetString, yn defnyddio swyddogaeth benodol 133 00:07:18,000 --> 00:07:21,000 mewn gwirionedd gramadegu, hynny yw, darllen neu ddadansoddi, fewnbwn y defnyddiwr. 134 00:07:21,000 --> 00:07:25,000 A beth oedd y swyddogaeth newydd? 135 00:07:25,000 --> 00:07:27,000 Scanf neu sscanf. Mae'n mewn gwirionedd yn dod mewn ychydig o flasau gwahanol. 136 00:07:27,000 --> 00:07:31,000 Mae scanf, mae sscanf, mae fscanf. 137 00:07:31,000 --> 00:07:35,000 Am y tro, fodd bynnag, gadewch i ni ganolbwyntio ar yr un mwyaf yn hawdd dangos, 138 00:07:35,000 --> 00:07:38,000 a gadewch i mi fynd yn ei flaen ac yn agor i fyny yn y peiriant 139 00:07:38,000 --> 00:07:41,000 ffeil fel hyn, scanf1.c. 140 00:07:41,000 --> 00:07:43,000 Mae hon yn rhaglen syml super, 141 00:07:43,000 --> 00:07:46,000 ond mae hynny'n gwneud rhywbeth nad ydym erioed wedi gwneud 142 00:07:46,000 --> 00:07:48,000 heb gymorth y llyfrgell CS50. 143 00:07:48,000 --> 00:07:51,000 Mae hyn yn cael yn int gan ddefnyddiwr. Sut mae'n gweithio? 144 00:07:51,000 --> 00:07:53,000 Wel, yn llinell 16 yno, 145 00:07:53,000 --> 00:07:56,000 sylwi ein bod yn datgan x int o'r enw, ac ar y pwynt hwn yn y stori, 146 00:07:56,000 --> 00:07:58,000 beth yw gwerth x? 147 00:07:58,000 --> 00:08:00,000 [Ymateb y myfyrwyr Anghlywadwy] 148 00:08:00,000 --> 00:08:02,000 [David M.] Iawn, pwy a ŵyr, rhywfaint o werth garbage o bosibl, felly yn 17, rydym yn unig yn dweud wrth y defnyddiwr 149 00:08:02,000 --> 00:08:06,000 yn rhoi i mi nifer, os gwelwch yn dda, ac 18 yn cam lle mae'n mynd yn ddiddorol. 150 00:08:06,000 --> 00:08:11,000 Scanf ymddangos i fenthyg syniad o printf gan ei fod yn defnyddio'r rhain codau fformat mewn dyfynodau. 151 00:08:11,000 --> 00:08:13,000 D% o gwrs rhif degol. 152 00:08:13,000 --> 00:08:21,000 Ond pam ydw i'n mynd heibio i mewn ac x hytrach na dim ond x? 153 00:08:21,000 --> 00:08:24,000 Mae'r cyntaf yn gywir. Yeah. 154 00:08:24,000 --> 00:08:26,000 [Ymateb y myfyrwyr Anghlywadwy] 155 00:08:26,000 --> 00:08:31,000 Yn union, os yw'r nod y rhaglen hon, fel y GetInt swyddogaeth ei hun, 156 00:08:31,000 --> 00:08:34,000 yw i gael int gan y defnyddiwr gallaf drosglwyddo swyddogaethau 157 00:08:34,000 --> 00:08:38,000 yr holl newidynnau rwyf eisiau, ond os nad wyf yn eu trosglwyddo trwy gyfeirio 158 00:08:38,000 --> 00:08:41,000 neu drwy gyfeiriad neu drwy pwyntydd, i gyd gyfystyr ar gyfer dibenion heddiw, 159 00:08:41,000 --> 00:08:46,000 yna swyddogaeth honno gan unrhyw allu i newid cynnwys y newidyn. 160 00:08:46,000 --> 00:08:49,000 Byddai hyn yn pasio mewn copi yn union fel y fersiwn buggy o gyfnewidfa 161 00:08:49,000 --> 00:08:51,000 ein bod wedi siarad am ychydig o weithiau yn awr. 162 00:08:51,000 --> 00:08:54,000 >> Ond yn hytrach, trwy wneud & x, rwy'n llythrennol basio yn yr hyn? 163 00:08:54,000 --> 00:08:57,000 [Myfyrwyr] Y cyfeiriad. >> Mae'r cyfeiriad x. 164 00:08:57,000 --> 00:09:01,000 Mae fel tynnu llun map ar gyfer y swyddogaeth o'r enw scanf a dweud yma, 165 00:09:01,000 --> 00:09:04,000 mae'r rhain yn gyfarwyddiadau i darn o gof yn y cyfrifiadur 166 00:09:04,000 --> 00:09:07,000 y gallwch fynd storio rhywfaint o cyfanrif mewn 167 00:09:07,000 --> 00:09:10,000 Er mwyn i sscanf yn hyn wneud hynny 168 00:09:10,000 --> 00:09:13,000 pa weithredwr, pa ddarn o gystrawen a yw'n mynd i gael i ddefnyddio 169 00:09:13,000 --> 00:09:19,000 er na allwn weld fod rhywun arall ysgrifennodd y swyddogaeth hon? 170 00:09:19,000 --> 00:09:21,000 Mewn geiriau eraill - beth sy'n bod? 171 00:09:21,000 --> 00:09:23,000 [Myfyrwyr] X darllen. 172 00:09:23,000 --> 00:09:27,000 Mae mynd i fod rhywfaint o ddarllen, ond dim ond mewn perthynas â x yma. 173 00:09:27,000 --> 00:09:30,000 Os scanf yn cael ei basio y cyfeiriad x, 174 00:09:30,000 --> 00:09:35,000 syntactically, pa weithredwr yn rhwym i fodoli yn rhywle 175 00:09:35,000 --> 00:09:38,000 tu mewn scanf weithrediad fel y scanf 176 00:09:38,000 --> 00:09:42,000 mewn gwirionedd gall ysgrifennu rhif 2 i'r cyfeiriad hwnnw? 177 00:09:42,000 --> 00:09:44,000 Yeah, felly mae'r *. 178 00:09:44,000 --> 00:09:47,000 Dwyn i gof bod y * yw ein, gweithredwr dereference ei hanfod, golyga mynd yno. 179 00:09:47,000 --> 00:09:50,000 >> Unwaith y byddwch wedi bod yn rhoi cyfeiriad, fel yn achos yma, 180 00:09:50,000 --> 00:09:53,000 scanf yn ôl pob tebyg-os ydym mewn gwirionedd yn edrych o gwmpas ei cod ffynhonnell- 181 00:09:53,000 --> 00:09:59,000 yn ei wneud * x neu'r hyn sy'n cyfateb mewn gwirionedd yn mynd i'r cyfeiriad hwnnw a rhoi rhywfaint o werth yno. 182 00:09:59,000 --> 00:10:02,000 Yn awr, fel ar gyfer sut scanf yn cael mewnbwn gan y bysellfwrdd, 183 00:10:02,000 --> 00:10:04,000 byddwn yn chwifio ein dwylo allan ar gyfer heddiw. 184 00:10:04,000 --> 00:10:07,000 Dim ond cymryd yn ganiataol bod y system yn gweithredu yn caniatáu i sscanf i siarad 185 00:10:07,000 --> 00:10:11,000 i'r bysellfwrdd y defnyddiwr, ond ar y pwynt hwn yn awr yn llinell 19, 186 00:10:11,000 --> 00:10:14,000 pan fyddwn yn syml argraffu x, mae'n ymddangos i fod yn wir 187 00:10:14,000 --> 00:10:17,000 bod scanf wedi rhoi int yn x. 188 00:10:17,000 --> 00:10:19,000 Dyna'n union sut mae scanf yn gweithio, a dwyn i gof yr wythnos diwethaf 189 00:10:19,000 --> 00:10:25,000 dyna yn union sut y GetString a GetInt a'i deulu arall o swyddogaethau 190 00:10:25,000 --> 00:10:28,000 yn y pen draw yn gweithio, er bod amrywiad bach fel sscanf, 191 00:10:28,000 --> 00:10:31,000 sy'n golygu sganio llinyn yn hytrach na'r bysellfwrdd. 192 00:10:31,000 --> 00:10:33,000 Ond gadewch i ni edrych ar amrywiad bach o hyn. 193 00:10:33,000 --> 00:10:37,000 Yn scanf2, Fi 'n weithredol sgriwio i fyny. 194 00:10:37,000 --> 00:10:42,000 Beth sydd o'i le-a byddaf yn cuddio y sylwadau sy'n egluro cymaint- 195 00:10:42,000 --> 00:10:47,000 beth sydd o'i le ar y rhaglen hon, fersiwn 2? 196 00:10:47,000 --> 00:10:55,000 Byddwch mor dechnegol ag y bo modd y tro hwn. 197 00:10:55,000 --> 00:10:57,000 Mae'n edrych yn eithaf da. 198 00:10:57,000 --> 00:11:03,000 Mae'n mewnoli 'n glws, ond- 199 00:11:03,000 --> 00:11:07,000 iawn, beth am gadewch i ni tocio i lawr i gwestiynau byrrach? 200 00:11:07,000 --> 00:11:17,000 Llinell 16. Beth yw llinell 16 yn ei wneud yn Saesneg yn fanwl gywir ond technegol? 201 00:11:17,000 --> 00:11:20,000 Cael ychydig yn lletchwith. Ie, Michael. 202 00:11:20,000 --> 00:11:25,000 [Myfyrwyr] Mae'n pwyntio at y llythyr cyntaf mewn cyfres. 203 00:11:25,000 --> 00:11:27,000 >> Iawn, yn agos. Gadewch i mi tweak bod ychydig bach. 204 00:11:27,000 --> 00:11:33,000 Pwyntio at y llythyr cyntaf mewn cyfres, rydych yn datgan byffer amrywiol o'r enw 205 00:11:33,000 --> 00:11:36,000 a fydd yn cyfeirio at y cyfeiriad cyntaf mewn cyfres, 206 00:11:36,000 --> 00:11:39,000 neu yn hytrach, bydd hynny'n tywys yn fwy penodol i torgoch. 207 00:11:39,000 --> 00:11:42,000 Hysbysiad nad yw'n mewn gwirionedd yn pwyntio unrhyw le oherwydd nad oes gweithredwr aseiniad. 208 00:11:42,000 --> 00:11:46,000 Does dim arwydd gyfartal, felly cyfan yr ydym yn ei wneud yw dyrannu'r byffer elwir yn amrywiol. 209 00:11:46,000 --> 00:11:49,000 Mae'n digwydd i fod yn 32 catiau am ei fod yn pwyntydd, 210 00:11:49,000 --> 00:11:52,000 a chynnwys y byffer yn ôl pob tebyg yn y pen draw 211 00:11:52,000 --> 00:11:57,000 bydd yn cynnwys cyfeiriad golosg, ond ar hyn o bryd, beth mae byffer yn ei gynnwys? 212 00:11:57,000 --> 00:11:59,000 Dim ond rhai ffug, pwy a ŵyr, mae rhai werth garbage, 213 00:11:59,000 --> 00:12:03,000 oherwydd nad ydym wedi ymgychwyn yn benodol, felly ni ddylem gymryd unrhyw beth. 214 00:12:03,000 --> 00:12:06,000 Iawn, felly, yn awr llinell 17 yw-beth yw llinell 17 yn ei wneud? 215 00:12:06,000 --> 00:12:08,000 Efallai fydd yn cynhesu hyn i fyny. 216 00:12:08,000 --> 00:12:10,000 Mae'n argraffu llinyn, dde? 217 00:12:10,000 --> 00:12:12,000 Mae'n printiau String os gwelwch yn dda. 218 00:12:12,000 --> 00:12:15,000 >> Llinell 18 yn fath o cyfarwydd yn awr yn ein bod yn jyst yn gweld amrywiant o hyn 219 00:12:15,000 --> 00:12:18,000 ond gyda chod fformat gwahanol, felly yn llinell 18, 220 00:12:18,000 --> 00:12:23,000 rydym yn dweud wrth scanf yma yw cyfeiriad y darn o gof. 221 00:12:23,000 --> 00:12:27,000 Rwyf am i chi ffonio mewn llinyn, awgrymir gan% s, 222 00:12:27,000 --> 00:12:32,000 ond y broblem yw nad ydym wedi gwneud un neu ddau o bethau yma. 223 00:12:32,000 --> 00:12:35,000 Beth yw un o'r problemau? 224 00:12:35,000 --> 00:12:38,000 [Myfyrwyr] Mae'n ceisio dereference pwyntydd nwl. 225 00:12:38,000 --> 00:12:41,000 Da, awgrymiadau null neu dim ond fel arall yn anhysbys. 226 00:12:41,000 --> 00:12:45,000 Rydych yn dosbarthu scanf cyfeiriad, ond ydych newydd ei ddweud funud yn ôl 227 00:12:45,000 --> 00:12:49,000 bod y cyfeiriad rhywfaint o werth garbage oherwydd nad oeddem mewn gwirionedd yn aseinio i unrhyw beth, 228 00:12:49,000 --> 00:12:53,000 ac felly eich bod yn dweud scanf yn effeithiol yn mynd rhoi llinyn yma, 229 00:12:53,000 --> 00:12:56,000 ond nid ydym yn gwybod lle yma eto yw, 230 00:12:56,000 --> 00:12:59,000 felly nid ydym wedi dyrannu mewn gwirionedd cof ar gyfer strwythur. 231 00:12:59,000 --> 00:13:03,000 Ar ben hynny, beth ydych chi hefyd hyd yn oed yn dweud scanf? 232 00:13:03,000 --> 00:13:06,000 Tybiwch hwn yn ddarn o gof, ac nid oedd yn werth garbage, 233 00:13:06,000 --> 00:13:09,000 ond nad ydych yn dal i dweud scanf rhywbeth pwysig. 234 00:13:09,000 --> 00:13:12,000 [Myfyrwyr] Lle mewn gwirionedd yw, y ampersand. 235 00:13:12,000 --> 00:13:15,000 Ampersand, felly yn yr achos hwn, ei fod yn iawn. 236 00:13:15,000 --> 00:13:18,000 Oherwydd byffer yn cael ei ddatgan eisoes fel pwyntydd 237 00:13:18,000 --> 00:13:22,000 gyda'r darn * o gystrawen, nid oes angen i ni ddefnyddio ampersand 238 00:13:22,000 --> 00:13:25,000 oherwydd ei fod eisoes yn gyfeiriad, ond rwy'n credu fy mod glywed yma. 239 00:13:25,000 --> 00:13:27,000 [Myfyrwyr] Pa mor fawr yw e? 240 00:13:27,000 --> 00:13:29,000 Da, nid ydym yn dweud wrth scanf pa mor fawr y byffer yw, 241 00:13:29,000 --> 00:13:32,000 sy'n golygu hyd yn oed os byffer oedd pwyntydd, 242 00:13:32,000 --> 00:13:35,000 rydyn ni'n ei ddweud scanf, yn rhoi llinyn yma, 243 00:13:35,000 --> 00:13:38,000 ond gallai yma yn 2 bytes, gallai fod yn 10 bytes, gallai fod yn megabeit. 244 00:13:38,000 --> 00:13:41,000 Scanf Nid oes syniad, ac oherwydd mai dyma'r darn o cof 245 00:13:41,000 --> 00:13:43,000 yn ôl pob tebyg, nid yw'n linyn eto. 246 00:13:43,000 --> 00:13:48,000 Dim ond llinyn ar ôl i chi ysgrifennu cymeriadau a 0 \ at y darn o gof. 247 00:13:48,000 --> 00:13:51,000 Nawr mae'n dim ond rhai darn o gof. 248 00:13:51,000 --> 00:13:55,000 Ni fydd Scanf yn gwybod pryd i roi'r gorau i ysgrifennu i'r cyfeiriad hwnnw. 249 00:13:55,000 --> 00:13:59,000 >> Os ydych yn cofio rhai enghreifftiau yn y gorffennol lle rwy'n deipio ar hap ar y bysellfwrdd 250 00:13:59,000 --> 00:14:03,000 ceisio gorlif byffer, a buom yn siarad ar ddydd Gwener am yr union hynny. 251 00:14:03,000 --> 00:14:07,000 Os yw gwrthwynebwr yn rywsut yn chwistrellu i mewn i'ch rhaglen gair llawer mwy 252 00:14:07,000 --> 00:14:10,000 neu frawddeg neu ymadrodd yna rydych yn disgwyl allwch fynd 253 00:14:10,000 --> 00:14:13,000 darn o gof, a all gael canlyniadau gwael, 254 00:14:13,000 --> 00:14:15,000 fel cymryd dros y rhaglen gyfan ei hun. 255 00:14:15,000 --> 00:14:17,000 Mae angen i ni atgyweiria hon rhywsut. 256 00:14:17,000 --> 00:14:20,000 Gadewch i mi chwyddo a mynd i mewn i fersiwn 3 y rhaglen. 257 00:14:20,000 --> 00:14:22,000 Dyna ychydig yn well. 258 00:14:22,000 --> 00:14:24,000 Yn y fersiwn hwn, sylwi ar y gwahaniaeth. 259 00:14:24,000 --> 00:14:27,000 Yn llinell 16, Im 'unwaith eto datgan byffer amrywiol o'r enw, 260 00:14:27,000 --> 00:14:29,000 ond beth yw e nawr? 261 00:14:29,000 --> 00:14:33,000 Mae'n amrywiaeth o 16 chars. 262 00:14:33,000 --> 00:14:36,000 Mae hyn yn dda oherwydd mae hyn yn golygu y gall yr wyf yn awr ddweud scanf 263 00:14:36,000 --> 00:14:39,000 yma yn ddarn go iawn o gof. 264 00:14:39,000 --> 00:14:42,000 Gallwch bron feddwl am araeau fel awgrymiadau yn awr, 265 00:14:42,000 --> 00:14:44,000 er nad ydynt yn cyfateb mewn gwirionedd. 266 00:14:44,000 --> 00:14:47,000 Byddant yn ymddwyn yn wahanol mewn gwahanol gyd-destunau. 267 00:14:47,000 --> 00:14:50,000 Ond mae'n sicr yn wir bod byffer gyfeirio 268 00:14:50,000 --> 00:14:53,000 16 chars cyffiniol oherwydd dyna beth arae yn 269 00:14:53,000 --> 00:14:55,000 ac mae wedi bod ers rhai wythnosau bellach. 270 00:14:55,000 --> 00:14:59,000 >> Yma, yr wyf yn dweud scanf dyma darn o gof. 271 00:14:59,000 --> 00:15:01,000 Y tro hwn, mewn gwirionedd mae'n darn o gof, 272 00:15:01,000 --> 00:15:07,000 ond pam mae'r rhaglen yn dal i ecsploetio'n? 273 00:15:07,000 --> 00:15:11,000 Beth sydd o'i le yn dal i? 274 00:15:11,000 --> 00:15:14,000 Rwyf wedi dweud i mi 16 bytes ond- 275 00:15:14,000 --> 00:15:16,000 [Myfyrwyr] Beth os ydynt yn teipio mewn mwy na 16? 276 00:15:16,000 --> 00:15:20,000 Yn union, beth os yw'r defnyddiwr mathau mewn 17 cymeriadau neu gymeriadau 1700? 277 00:15:20,000 --> 00:15:23,000 Yn wir, gadewch i ni weld os na allwn trip dros y camgymeriad yn awr. 278 00:15:23,000 --> 00:15:25,000 Mae'n well, ond nid yn berffaith. 279 00:15:25,000 --> 00:15:28,000 Gadewch i mi fynd yn ei flaen ac yn rhedeg yn gwneud scanf3 i lunio rhaglen hon. 280 00:15:28,000 --> 00:15:34,000 Gadewch i mi redeg scanf3, String os gwelwch yn dda: helo, ac rydym yn ymddangos i fod yn iawn. 281 00:15:34,000 --> 00:15:37,000 Gadewch i mi roi cynnig ar un ychydig yn hwy, helo yno. 282 00:15:37,000 --> 00:15:42,000 Iawn, gadewch i ni yn helo 'na sut wyt ti heddiw, Enter. 283 00:15:42,000 --> 00:15:54,000 Cael math o lwcus yma, gadewch i ni ddweud helo 'na sut wyt ti. 284 00:15:54,000 --> 00:15:56,000 Damia. 285 00:15:56,000 --> 00:16:03,000 Iawn, felly rydym yn got 'n ffodus. Gawn ni weld os na allwn atgyweiria hon. 286 00:16:03,000 --> 00:16:06,000 Na, nid yw'n mynd i adael i mi chopïo. 287 00:16:06,000 --> 00:16:09,000 Gadewch i ni geisio hyn eto. 288 00:16:09,000 --> 00:16:12,000 Mae pob hawl, sefyll. 289 00:16:12,000 --> 00:16:20,000 Byddwn yn gweld pa mor hir y gall yr wyf yn esgus i ganolbwyntio tra'n dal i wneud hyn. 290 00:16:20,000 --> 00:16:23,000 Damia. Dyna yn hytrach briodol, mewn gwirionedd. 291 00:16:23,000 --> 00:16:26,000 Dyna ni. 292 00:16:26,000 --> 00:16:30,000 Pwynt a wnaed. 293 00:16:30,000 --> 00:16:34,000 >> Mae hyn, codi cywilydd er ei bod hefyd yw, mae hefyd yn un o'r ffynonellau dryswch mawr 294 00:16:34,000 --> 00:16:38,000 wrth ysgrifennu rhaglenni sy'n cael bygiau oherwydd eu bod yn amlygu eu hunain 295 00:16:38,000 --> 00:16:40,000 dim ond unwaith mewn blwc weithiau. 296 00:16:40,000 --> 00:16:43,000 Y realiti yw bod hyd yn oed os yw eich cod yn cael ei dorri yn gyfan gwbl, 297 00:16:43,000 --> 00:16:46,000 efallai mai dim ond yn cael ei dorri yn gyfan gwbl unwaith yn tra 298 00:16:46,000 --> 00:16:49,000 oherwydd weithiau, yn y bôn yr hyn sy'n digwydd yn y system dyrannu gweithredu 299 00:16:49,000 --> 00:16:52,000 atgof ychydig yn fwy nag yr ydych ei angen mewn gwirionedd am ba bynnag reswm, 300 00:16:52,000 --> 00:16:57,000 ac felly nid oes neb arall yn defnyddio'r cof dde ar ôl eich darn o 16 nod, 301 00:16:57,000 --> 00:17:01,000 felly os byddwch yn mynd i 17, 18, 19, beth bynnag, nid yw'n mor bwysig â hynny. 302 00:17:01,000 --> 00:17:04,000 Yn awr, y cyfrifiadur, hyd yn oed os nad yw'n damwain ar y pwynt hwnnw, 303 00:17:04,000 --> 00:17:09,000 maes o law gallai defnyddio rhif beit 17 neu 18 neu 19 ar gyfer rhywbeth arall, 304 00:17:09,000 --> 00:17:14,000 lle bwynt eich data eich bod yn rhoi yno, er rhy hir, 305 00:17:14,000 --> 00:17:18,000 yn mynd i gael overwritten o bosibl gan ryw swyddogaeth arall. 306 00:17:18,000 --> 00:17:21,000 Dyw hi ddim o reidrwydd yn mynd i aros yn gyfan, 307 00:17:21,000 --> 00:17:23,000 ond ni fydd o reidrwydd yn achosi nam seg. 308 00:17:23,000 --> 00:17:26,000 Ond yn yr achos hwn, yr wyf yn olaf darparu digon o gymeriadau 309 00:17:26,000 --> 00:17:29,000 fy mod yn ei hanfod rhagori ar fy segment o gof, a Bam, 310 00:17:29,000 --> 00:17:33,000 Dywedodd y system weithredu, "Mae'n ddrwg gennym, dyw hynny ddim yn wall da,." 311 00:17:33,000 --> 00:17:38,000 >> A gadewch i ni weld nawr os hyn sy'n weddill yma yn fy cyfeiriadur- 312 00:17:38,000 --> 00:17:40,000 sylwi bod gennyf y ffeil yma, craidd. 313 00:17:40,000 --> 00:17:42,000 Sylwch fod hyn yn cael ei alw eto tomen craidd. 314 00:17:42,000 --> 00:17:46,000 Ydyw yn y bôn ffeil sy'n cynnwys y cynnwys cof eich rhaglen 315 00:17:46,000 --> 00:17:48,000 ar yr adeg y mae'n damwain, 316 00:17:48,000 --> 00:17:51,000 a dim ond i roi cynnig ar ychydig o esiampl yma gadewch i mi fynd i mewn yma 317 00:17:51,000 --> 00:17:57,000 a rhedeg gdb ar scanf3 ac yna pennu drydedd ddadl a elwir yn graidd, 318 00:17:57,000 --> 00:18:01,000 ac yn sylwi yma os wyf yn rhestru'r cod, 319 00:18:01,000 --> 00:18:06,000 byddwn yn gallu fel arfer gyda gdb i ddechrau cerdded drwy'r rhaglen hon, 320 00:18:06,000 --> 00:18:10,000 a gallaf redeg a chyn gynted ag yr wyf taro-fel gyda'r gorchymyn cam yn gdb- 321 00:18:10,000 --> 00:18:13,000 cyn gynted ag yr wyf yn cyrraedd y llinell a allai fod bygi ar ôl teipio mewn llinyn enfawr, 322 00:18:13,000 --> 00:18:16,000 Byddaf yn gallu mewn gwirionedd yn ei adnabod yma. 323 00:18:16,000 --> 00:18:19,000 Mwy o wybodaeth am hyn, fodd bynnag, yn adran o ran dadlwythiadau craidd 324 00:18:19,000 --> 00:18:22,000 ac yn y blaen er mwyn i chi mewn gwirionedd yn procio o gwmpas tu mewn i'r domen craidd 325 00:18:22,000 --> 00:18:27,000 ac yn gweld ar ba linell y rhaglen wedi methu chi. 326 00:18:27,000 --> 00:18:32,000 Unrhyw gwestiynau yna ar awgrymiadau ac ar cyfeiriadau? 327 00:18:32,000 --> 00:18:36,000 Oherwydd heddiw ymlaen, rydym yn mynd i ddechrau cymryd yn ganiataol bod y pethau hyn yn bodoli 328 00:18:36,000 --> 00:18:40,000 ac rydym yn gwybod yn union beth ydynt. 329 00:18:40,000 --> 00:18:42,000 Ydw. 330 00:18:42,000 --> 00:18:46,000 >> [Myfyrwyr] Sut dod nad oedd gennych i roi ampersand nesaf at y rhan- 331 00:18:46,000 --> 00:18:48,000 Da cwestiwn. 332 00:18:48,000 --> 00:18:51,000 Sut dod nid oeddwn yn rhaid i roi ampersand nesaf at yr amrywiaeth cymeriad fel y gwneuthum o'r blaen 333 00:18:51,000 --> 00:18:53,000 â'r rhan fwyaf o'n enghreifftiau? 334 00:18:53,000 --> 00:18:55,000 Yr ateb byr yw araeau ychydig yn arbennig. 335 00:18:55,000 --> 00:18:59,000 Gallwch bron meddwl byffer fel mewn gwirionedd fod yn gyfeiriad, 336 00:18:59,000 --> 00:19:03,000 a dim ond fel y digwydd bod yn wir bod y nodiant braced sgwâr 337 00:19:03,000 --> 00:19:06,000 yn gyfleustra fel y gallwn fynd i mewn braced 0, braced 1, 338 00:19:06,000 --> 00:19:10,000 braced 2, heb orfod defnyddio'r nodiant *. 339 00:19:10,000 --> 00:19:13,000 Dyna ychydig o gelwydd gwyn oherwydd araeau ac awgrymiadau 340 00:19:13,000 --> 00:19:17,000 yn, mewn gwirionedd, ychydig yn wahanol, ond gallant yn aml ond nid bob amser yn cael ei defnyddio'n gyfnewidiol. 341 00:19:17,000 --> 00:19:21,000 Yn fyr, pan swyddogaeth yn disgwyl pwyntydd i'r darn o gof, 342 00:19:21,000 --> 00:19:24,000 gallwch naill ai ei drosglwyddo cyfeiriad a ddychwelwyd gan malloc, 343 00:19:24,000 --> 00:19:29,000 ac fe welwn ni malloc eto cyn hir, neu gallwch ei drosglwyddo enw arae. 344 00:19:29,000 --> 00:19:32,000 Nid oes rhaid i chi wneud ampersand gyda araeau oherwydd eu bod eisoes yn 345 00:19:32,000 --> 00:19:34,000 yn y bôn yn hoffi cyfeiriadau. 346 00:19:34,000 --> 00:19:36,000 Dyna un eithriad. 347 00:19:36,000 --> 00:19:39,000 Y cromfachau sgwâr yn eu gwneud yn arbennig. 348 00:19:39,000 --> 00:19:41,000 >> Allech chi roi ampersand nesaf at y byffer? 349 00:19:41,000 --> 00:19:43,000 Nid yn yr achos hwn. 350 00:19:43,000 --> 00:19:46,000 Ni fyddai hynny'n gweithio oherwydd, unwaith eto, yr achos hwn gornel 351 00:19:46,000 --> 00:19:49,000 lle nad yw araeau yn eithaf mewn gwirionedd cyfeiriadau. 352 00:19:49,000 --> 00:19:54,000 Ond byddwn yn dod yn ôl at hynny cyn hir gydag enghreifftiau eraill. 353 00:19:54,000 --> 00:19:56,000 Gadewch i ni geisio datrys problem yma. 354 00:19:56,000 --> 00:20:00,000 Mae gennym strwythur data yr ydym wedi bod yn defnyddio ers peth amser a elwir yn arae. 355 00:20:00,000 --> 00:20:02,000 Achos ym mhwynt, dyna beth ydym yn unig gael. 356 00:20:02,000 --> 00:20:04,000 Ond mae araeau cael rhywfaint o upsides ac anfanteision. 357 00:20:04,000 --> 00:20:06,000 Araeau yn cael eu pam neis? 358 00:20:06,000 --> 00:20:11,000 Beth un peth yr ydych yn hoffi i ba raddau rydych yn hoffi araeau-am araeau? 359 00:20:11,000 --> 00:20:13,000 Beth gyfleus amdanyn nhw? Beth gymhellol? 360 00:20:13,000 --> 00:20:18,000 Pam rydym yn eu cyflwyno yn y lle cyntaf? 361 00:20:18,000 --> 00:20:20,000 Yeah. 362 00:20:20,000 --> 00:20:27,000 [Myfyrwyr] Gallant storio llawer o ddata, ac nid oes rhaid i chi ddefnyddio peth cyfan. 363 00:20:27,000 --> 00:20:29,000 Gallwch ddefnyddio adran. 364 00:20:29,000 --> 00:20:32,000 Da, gydag amrywiaeth gallwch storio llawer o ddata, 365 00:20:32,000 --> 00:20:35,000 ac nid oes o reidrwydd yn rhaid i chi ddefnyddio cyfan ohono, fel y gallwch overallocate, 366 00:20:35,000 --> 00:20:39,000 a allai fod yn gyfleus os nad ydych yn gwybod ymlaen llaw faint o rywbeth i'w ddisgwyl. 367 00:20:39,000 --> 00:20:41,000 >> GetString yn enghraifft berffaith. 368 00:20:41,000 --> 00:20:44,000 GetString, a ysgrifennwyd gan i ni, nid oes syniad faint o chars i'w ddisgwyl, 369 00:20:44,000 --> 00:20:48,000 felly mae'r ffaith y gallwn ddyrannu darnau o gof cyffiniol yn dda. 370 00:20:48,000 --> 00:20:51,000 Araeau hefyd yn datrys problem gwelsom cwpl o wythnosau yn ôl, bellach yn 371 00:20:51,000 --> 00:20:54,000 lle mae eich cod yn dechrau datganoli i fod yn rhywbeth chynllunio yn wael iawn. 372 00:20:54,000 --> 00:20:57,000 Dwyn i gof bod yr wyf yn creu strwythur i fyfyrwyr o'r enw David, 373 00:20:57,000 --> 00:21:00,000 ac yna a oedd mewn gwirionedd dewis arall, fodd bynnag, 374 00:21:00,000 --> 00:21:04,000 i gael enw amrywiol o'r enw ac mae newidyn arall o'r enw, yr wyf yn meddwl, tŷ, 375 00:21:04,000 --> 00:21:08,000 ac mae newidyn arall o'r enw ID oherwydd yn y stori Yna eisiau cyflwyno rhywbeth arall 376 00:21:08,000 --> 00:21:11,000 Rob yn hoffi i mewn i'r rhaglen, felly, yna penderfynais aros funud, 377 00:21:11,000 --> 00:21:13,000 Angen i mi ail-enwi y newidynnau. 378 00:21:13,000 --> 00:21:16,000 Gadewch i ni alw fy name1, ID1, house1. 379 00:21:16,000 --> 00:21:20,000 Gadewch i ni alw Rob yn name2, house2, ID2. 380 00:21:20,000 --> 00:21:22,000 Ond yna arhoswch funud, beth am Tommy? 381 00:21:22,000 --> 00:21:24,000 Yna cawsom tri newidyn mwy. 382 00:21:24,000 --> 00:21:27,000 Rydym yn cyflwyno i rywun arall, pedair set o newidynnau. 383 00:21:27,000 --> 00:21:30,000 Mae'r byd yn dechrau cael anniben yn gyflym iawn, 384 00:21:30,000 --> 00:21:33,000 felly rydym yn cyflwyno structs, a beth sy'n grymus am strwythur? 385 00:21:33,000 --> 00:21:39,000 Beth mae strwythur C gadael i chi ei wneud? 386 00:21:39,000 --> 00:21:42,000 Mae'n lletchwith iawn heddiw. 387 00:21:42,000 --> 00:21:44,000 Beth? >> [Anghlywadwy ymateb y myfyrwyr] 388 00:21:44,000 --> 00:21:47,000 Yeah, yn benodol, typedef yn eich galluogi i greu math data newydd, 389 00:21:47,000 --> 00:21:51,000 a strwythur, y gair allweddol strwythur, yn eich galluogi i grynhoi 390 00:21:51,000 --> 00:21:54,000 darnau sy'n gysylltiedig yn gysyniadol o ddata at ei gilydd 391 00:21:54,000 --> 00:21:56,000 ac wedi hynny eu galw rhywbeth fel myfyriwr. 392 00:21:56,000 --> 00:21:58,000 >> Dyna oedd yn dda oherwydd erbyn hyn gallwn fodelu 393 00:21:58,000 --> 00:22:03,000 math llawer mwy o gysyniadol gyson y syniad o fyfyriwr mewn newidyn 394 00:22:03,000 --> 00:22:07,000 yn hytrach nag fympwyol gael un ar gyfer llinyn, un ar gyfer adnabod, ac yn y blaen. 395 00:22:07,000 --> 00:22:10,000 Araeau yn braf oherwydd maent yn ein galluogi i ddechrau glanhau ein cod. 396 00:22:10,000 --> 00:22:13,000 Ond beth yw anfantais bellach o amrywiaeth? 397 00:22:13,000 --> 00:22:15,000 Ni all Beth allwch chi ei wneud? Yeah. 398 00:22:15,000 --> 00:22:17,000 [Myfyrwyr] Mae'n rhaid i chi wybod pa mor fawr ydyw. 399 00:22:17,000 --> 00:22:19,000 Mae'n rhaid i chi wybod pa mor fawr ydyw, felly mae'n fath o boen. 400 00:22:19,000 --> 00:22:21,000 Bydd y rhai ohonoch sydd â phrofiad blaenorol rhaglennu yn gwybod bod mewn llawer o ieithoedd, 401 00:22:21,000 --> 00:22:24,000 fel Java, gallwch ofyn i ddarn o gof, yn benodol array, 402 00:22:24,000 --> 00:22:28,000 pa mor fawr ydych chi, gyda hyd, eiddo, fel petai, ac mae hynny'n gyfleus. 403 00:22:28,000 --> 00:22:32,000 Yn C, ni allwch hyd yn oed ffonio strlen ar amrywiaeth generig 404 00:22:32,000 --> 00:22:35,000 oherwydd strlen, fel y gair hwn yn awgrymu, dim ond ar gyfer llinynnau, 405 00:22:35,000 --> 00:22:39,000 a gallwch chyfrif i maes y hyd llinyn oherwydd y confensiwn hwn ddynol 406 00:22:39,000 --> 00:22:43,000 o gael 0 \, ond arae, yn fwy cyffredinol, yn unig yw darn o gof. 407 00:22:43,000 --> 00:22:46,000 Os yw'n amrywiaeth o ints, nid oes yn mynd i fod rhywfaint o gymeriad arbennig 408 00:22:46,000 --> 00:22:48,000 ar y diwedd aros i chi. 409 00:22:48,000 --> 00:22:50,000 Mae'n rhaid i chi gofio hyd arae. 410 00:22:50,000 --> 00:22:54,000 Anfantais arall arae codi'i phen yn GetString ei hun. 411 00:22:54,000 --> 00:22:59,000 Beth arall Anfantais arae? 412 00:22:59,000 --> 00:23:01,000 Syr, dim ond chi a fi heddiw. 413 00:23:01,000 --> 00:23:04,000 [Ymateb y myfyrwyr Anghlywadwy] >> Mae'n beth? 414 00:23:04,000 --> 00:23:06,000 Mae'n datgan ar y pentwr. 415 00:23:06,000 --> 00:23:09,000 Iawn, datgan ar y pentwr. Pam na wnewch chi'n hoffi hynny? 416 00:23:09,000 --> 00:23:13,000 [Myfyrwyr] Am ei fod yn cael ei ailddefnyddio. 417 00:23:13,000 --> 00:23:15,000 Mae'n cael ei ailddefnyddio. 418 00:23:15,000 --> 00:23:18,000 Iawn, os ydych yn defnyddio amrywiaeth i ddyrannu cof, 419 00:23:18,000 --> 00:23:21,000 nad ydych yn gallu, er enghraifft, dychwelyd am ei fod ar y pentwr. 420 00:23:21,000 --> 00:23:23,000 Iawn, mae hynny'n anfantais. 421 00:23:23,000 --> 00:23:25,000 A beth am un arall gydag amrywiaeth? 422 00:23:25,000 --> 00:23:28,000 Unwaith y byddwch yn dyrannu, rydych yn fath o sgriwio os oes angen mwy o le 423 00:23:28,000 --> 00:23:30,000 na amrywiaeth wedi. 424 00:23:30,000 --> 00:23:34,000 >> Yna, cyflwynodd ni, galw i gof, malloc, a roddodd i ni y gallu i ddeinamig ddyrannu cof. 425 00:23:34,000 --> 00:23:37,000 Ond beth os ydym yn ceisio fyd hollol wahanol? 426 00:23:37,000 --> 00:23:40,000 Beth os ydym yn awyddus i ddatrys rai o'r rheini y problemau 427 00:23:40,000 --> 00:23:45,000 felly rydym yn lle hynny-fy pen wedi syrthio i gysgu yma- 428 00:23:45,000 --> 00:23:51,000 beth os ydym yn hytrach eisiau yn y bôn greu byd sy'n mwyach fel hyn? 429 00:23:51,000 --> 00:23:56,000 Mae hwn yn array, ac, wrth gwrs, y math hwn o gwaethygu ar ôl i ni gyrraedd diwedd y array, 430 00:23:56,000 --> 00:24:00,000 ac yr wyf yn awr mwyach le ar gyfer un arall cyfanrif neu cymeriad arall. 431 00:24:00,000 --> 00:24:03,000 Beth os ydym yn fath o preemptively ddweud yn dda, pam nad ydym yn ymlacio 432 00:24:03,000 --> 00:24:07,000 gofyniad hwn bod pob un o'r darnau o gof fod yn gyffiniol gefn wrth gefn, 433 00:24:07,000 --> 00:24:10,000 a pham nad ydynt, pan fyddaf angen int neu golosg, 434 00:24:10,000 --> 00:24:12,000 dim ond rhoi i mi lle i un ohonynt? 435 00:24:12,000 --> 00:24:14,000 A phan yr wyf angen un arall, yn rhoi i mi le arall, 436 00:24:14,000 --> 00:24:16,000 a phan oeddwn angen un arall, yn rhoi i mi le arall. 437 00:24:16,000 --> 00:24:19,000 Y fantais y mae yn awr yw bod os bydd rhywun arall 438 00:24:19,000 --> 00:24:21,000 yn cymryd y cof dros yma, nid oes llawer mawr. 439 00:24:21,000 --> 00:24:25,000 'N annhymerus' gymryd y darn ychwanegol o gof yma ac yna mae hyn yn un. 440 00:24:25,000 --> 00:24:28,000 >> Yn awr, roedd y ddalfa yn unig yma yw bod hyn bron yn teimlo fel yr wyf wedi 441 00:24:28,000 --> 00:24:30,000 criw cyfan o newidynnau gwahanol. 442 00:24:30,000 --> 00:24:33,000 Mae hyn yn teimlo fel pum newidyn gwahanol o bosibl. 443 00:24:33,000 --> 00:24:36,000 Ond beth os ydym yn dwyn syniad o dannau 444 00:24:36,000 --> 00:24:41,000 lle rydym rywsut cysylltu'r pethau hyn at ei gilydd yn gysyniadol, a beth os wyf yn gwneud hyn? 445 00:24:41,000 --> 00:24:44,000 Dyma fy saeth yn wael iawn tynnu. 446 00:24:44,000 --> 00:24:46,000 Ond mae'n debyg fod pob un o'r darnau o gof 447 00:24:46,000 --> 00:24:52,000 sylw at y ffaith i'r llall, ac mae hyn yn guy, nad oes ganddo frawd neu chwaer at ei hawl, 448 00:24:52,000 --> 00:24:54,000 Nid oes gan saeth o'r fath. 449 00:24:54,000 --> 00:24:56,000 Mae hyn yn mewn gwirionedd hyn a elwir yn rhestr cysylltiedig. 450 00:24:56,000 --> 00:25:00,000 Mae hwn yn strwythur data newydd sy'n caniatáu i ni ddyrannu darn o gof, 451 00:25:00,000 --> 00:25:03,000 yna un arall, yna un arall, yna arall, unrhyw adeg ydym am 452 00:25:03,000 --> 00:25:07,000 yn ystod rhaglen, ac rydym yn cofio eu bod nhw i gyd rhywsut cysylltiedig 453 00:25:07,000 --> 00:25:11,000 gan llythrennol gadwyno at ei gilydd, a gwnaethom hynny ddarluniadol yma gyda saeth. 454 00:25:11,000 --> 00:25:15,000 Ond mewn cod, beth fyddai'r mecanwaith trwy y gallech rywsut gysylltu, 455 00:25:15,000 --> 00:25:20,000 bron fel Scratch, un darn i un arall darn? 456 00:25:20,000 --> 00:25:22,000 Gallem ddefnyddio pwyntydd, dde? 457 00:25:22,000 --> 00:25:25,000 Gan fod mewn gwirionedd y saeth sy'n mynd o'r sgwâr uchaf ar y chwith, 458 00:25:25,000 --> 00:25:31,000 gallai hyn guy yma i hwn, yn cynnwys tu mewn y sgwâr 459 00:25:31,000 --> 00:25:34,000 nid dim ond rhai ints, nid dim ond rhai torgoch, ond beth os wyf mewn gwirionedd yn dyrannu 460 00:25:34,000 --> 00:25:37,000 lle ychydig mwy fel hynny yn awr, 461 00:25:37,000 --> 00:25:41,000 mhob un o fy darnau o gof, er bod hyn yn mynd i gostio i mi, 462 00:25:41,000 --> 00:25:45,000 yn awr yn edrych ychydig yn fwy hirsgwar lle mae un o'r darnau o gof 463 00:25:45,000 --> 00:25:47,000 yn cael ei ddefnyddio ar gyfer nifer, fel y rhif 1, 464 00:25:47,000 --> 00:25:50,000 ac yna os yw hyn yn guy yn storio'r rhif 2, 465 00:25:50,000 --> 00:25:52,000 y darn arall o gof ei ddefnyddio ar gyfer saeth, 466 00:25:52,000 --> 00:25:54,000 neu fwy concretely, pwyntydd. 467 00:25:54,000 --> 00:25:59,000 Ac siŵr fy mod yn storio'r rhif 3 dros yma tra byddaf yn defnyddio hyn i bwyntio at y dyn, 468 00:25:59,000 --> 00:26:02,000 ac yn awr y boi, gadewch i ni Mae'n debyg mai dim ond am 3 darnau o'r fath o gof. 469 00:26:02,000 --> 00:26:05,000 'N annhymerus' tynnu llinell drwy hynny, gan nodi null. 470 00:26:05,000 --> 00:26:07,000 Nid oes unrhyw gymeriad ychwanegol. 471 00:26:07,000 --> 00:26:10,000 >> Yn wir, dyma sut y gallwn fynd ati i weithredu 472 00:26:10,000 --> 00:26:12,000 rhywbeth sy'n cael ei alw rhestr cysylltiedig. 473 00:26:12,000 --> 00:26:18,000 Mae rhestr cysylltiedig yn strwythur data newydd, ac mae'n garreg gamu tuag at 474 00:26:18,000 --> 00:26:21,000 strwythurau data llawer ffansi yn dechrau i ddatrys problemau 475 00:26:21,000 --> 00:26:23,000 ar hyd y llinellau Facebook-fath broblemau a Google o fath broblemau 476 00:26:23,000 --> 00:26:26,000 lle mae gennych setiau data enfawr, ac nid yw bellach yn torri ei 477 00:26:26,000 --> 00:26:29,000 i storio popeth contiguously ac yn defnyddio rhywbeth fel chwiliad llinol 478 00:26:29,000 --> 00:26:31,000 neu hyd yn oed rhywbeth fel chwiliad deuaidd. 479 00:26:31,000 --> 00:26:33,000 Rydych am amseroedd rhedeg hyd yn oed yn well. 480 00:26:33,000 --> 00:26:37,000 Yn wir, un o'r Grails Sanctaidd byddwn yn siarad am hynny yn ddiweddarach yr wythnos hon neu'r nesaf 481 00:26:37,000 --> 00:26:41,000 yn algorithm y mae ei amser rhedeg yn gyson. 482 00:26:41,000 --> 00:26:44,000 Mewn geiriau eraill, mae bob amser yn cymryd yr un faint o amser ni waeth 483 00:26:44,000 --> 00:26:47,000 pa mor fawr yw'r mewnbwn yn, ac y byddai yn wir yn gymhellol, 484 00:26:47,000 --> 00:26:49,000 hyd yn oed yn fwy felly na rhywbeth logarithmig. 485 00:26:49,000 --> 00:26:51,000 Beth yw hyn ar y sgrin yma? 486 00:26:51,000 --> 00:26:55,000 Mae pob un o'r petryalau yn union beth Fi jyst tynnu â llaw. 487 00:26:55,000 --> 00:26:59,000 Ond y peth yr holl ffordd ar y chwith yn newidyn arbennig. 488 00:26:59,000 --> 00:27:02,000 Mae'n mynd i fod yn bwyntydd sengl oherwydd y Gotcha 1 489 00:27:02,000 --> 00:27:04,000 gyda rhestr gysylltiedig, fel y pethau hyn yn cael eu galw, 490 00:27:04,000 --> 00:27:09,000 yw bod yn rhaid i chi hongian ar un pen o'r rhestr cysylltiedig. 491 00:27:09,000 --> 00:27:13,000 >> Yn union fel gyda llinyn, rhaid i chi wybod y cyfeiriad y torgoch cyntaf. 492 00:27:13,000 --> 00:27:15,000 Un fargen ar gyfer rhestrau cysylltiedig. 493 00:27:15,000 --> 00:27:19,000 Mae'n rhaid i chi wybod cyfeiriad y darn cyntaf o cof 494 00:27:19,000 --> 00:27:25,000 oherwydd oddi yno, gallwch gyrraedd pob un arall. 495 00:27:25,000 --> 00:27:27,000 Downside. 496 00:27:27,000 --> 00:27:30,000 Pa bris yr ydym yn talu am y amlbwrpasedd o gael ddynamig 497 00:27:30,000 --> 00:27:34,000 strwythur data sizable, os byth bydd angen mwy o gof, iawn, 498 00:27:34,000 --> 00:27:37,000 dim ond yn dyrannu un darn mwy a thynnu pwyntydd gan 499 00:27:37,000 --> 00:27:39,000 hen i'r newydd gynffon y rhestr? 500 00:27:39,000 --> 00:27:41,000 Yeah. 501 00:27:41,000 --> 00:27:43,000 [Myfyrwyr] Mae'n cymryd lle tua dwywaith gymaint. 502 00:27:43,000 --> 00:27:45,000 Mae'n cymryd lle ddwywaith cymaint, felly dyna bendant yn ochr negyddol, ac rydym wedi gweld hyn yn 503 00:27:45,000 --> 00:27:48,000 tradeoff o'r blaen rhwng amser a gofod a hyblygrwydd 504 00:27:48,000 --> 00:27:51,000 lle erbyn hyn, nid ydym angen 32 catiau gyfer pob un o'r rhifau hyn. 505 00:27:51,000 --> 00:27:57,000 Mae gwir angen 64, 32 am y nifer a 32 ar gyfer y pwyntydd. 506 00:27:57,000 --> 00:27:59,000 Ond hey, Mae gen i 2 gigabeit o RAM. 507 00:27:59,000 --> 00:28:02,000 Pheidio ag ychwanegu 32 o ddarnau yma ac yma yn ymddangos bod fawr o gytundeb. 508 00:28:02,000 --> 00:28:05,000 Ond ar gyfer setiau data mawr, mae'n bendant yn ychwanegu hyd at llythrennol dwywaith gymaint. 509 00:28:05,000 --> 00:28:09,000 Beth arall anfantais yn awr, neu beth nodwedd ydym yn rhoi'r gorau iddi, 510 00:28:09,000 --> 00:28:12,000 os ydym yn eu cynrychioli rhestrau o bethau gyda rhestr cysylltiedig ac nid arae? 511 00:28:12,000 --> 00:28:14,000 [Myfyrwyr] Ni allwch croesi ei ôl. 512 00:28:14,000 --> 00:28:16,000 Ni allwch croesi ei ôl, felly rydych yn fath o sgriwio os ydych chi'n cerdded 513 00:28:16,000 --> 00:28:19,000 o'r chwith i'r dde gan ddefnyddio dolen i neu ddolen tra 514 00:28:19,000 --> 00:28:21,000 ac yna byddwch yn sylweddoli, "O, dw i eisiau mynd yn ôl i ddechrau'r rhestr." 515 00:28:21,000 --> 00:28:26,000 Ni allwch fod y rhain awgrymiadau yn unig yn mynd o'r chwith i'r dde fel y saethau'n dangos. 516 00:28:26,000 --> 00:28:29,000 >> Nawr, fe allech chi gofio cychwyn y rhestr gyda newidyn arall, 517 00:28:29,000 --> 00:28:31,000 ond mae hynny'n cymhlethdod i gadw mewn cof. 518 00:28:31,000 --> 00:28:35,000 Mae amrywiaeth, waeth pa mor bell i chi fynd, gallwch chi bob amser yn gwneud minws, minws, minws, minws 519 00:28:35,000 --> 00:28:37,000 a mynd yn ôl o ba le y daethoch. 520 00:28:37,000 --> 00:28:40,000 Beth arall anfantais yma? Yeah. 521 00:28:40,000 --> 00:28:43,000 [Gwestiwn myfyrwyr Anghlywadwy] 522 00:28:43,000 --> 00:28:47,000 Gallech, er mwyn i chi mewn gwirionedd wedi cynnig dim ond strwythur data a elwir yn rhestr gysylltiedig dwbl, 523 00:28:47,000 --> 00:28:50,000 ac yn wir, byddech yn ychwanegu un arall pwyntydd i bob un o'r petryalau 524 00:28:50,000 --> 00:28:53,000 sy'n mynd i'r cyfeiriad arall, y upside y mae 525 00:28:53,000 --> 00:28:55,000 yn awr y gallwch ei groesi yn ôl ac ymlaen, 526 00:28:55,000 --> 00:28:59,000 anfantais y mae yn awr yn ydych yn defnyddio tair gwaith cymaint cof wrth i ni ei ddefnyddio i 527 00:28:59,000 --> 00:29:04,000 a hefyd yn ychwanegu cymhlethdod o ran y cod yn rhaid i chi ysgrifennu i wneud pethau'n iawn. 528 00:29:04,000 --> 00:29:08,000 Ond mae'r rhain i gyd efallai cyfaddawdu rhesymol iawn, os yw'r gwrthdroad yn fwy pwysig. 529 00:29:08,000 --> 00:29:10,000 Yeah. 530 00:29:10,000 --> 00:29:12,000 [Myfyrwyr] Ni allwch hefyd restr cysylltiedig 2D. 531 00:29:12,000 --> 00:29:16,000 Da, ni allwch mewn gwirionedd yn cael rhestr 2D cysylltiedig. 532 00:29:16,000 --> 00:29:18,000 Gallech. Dyw hi ddim yn bron mor hawdd â arae. 533 00:29:18,000 --> 00:29:21,000 Fel arae, rydych yn gwneud braced agored, caeedig braced, cromfach agor, ar gau braced, 534 00:29:21,000 --> 00:29:23,000 a byddwch yn cael rhywfaint o strwythur 2-ddimensiwn. 535 00:29:23,000 --> 00:29:26,000 Gallech gweithredu rhestr 2-ddimensiwn sy'n gysylltiedig 536 00:29:26,000 --> 00:29:29,000 os ydych yn ychwanegu-wrth i chi fwriedir-pwyntydd trydydd bob un o'r pethau hyn, 537 00:29:29,000 --> 00:29:34,000 ac os ydych yn meddwl am rhestr arall yn dod ar chi arddull 3D 538 00:29:34,000 --> 00:29:40,000 oddi ar y sgrîn i ni i gyd, sydd ychydig arall gadwyn o ryw fath. 539 00:29:40,000 --> 00:29:45,000 Gallem wneud hyn, ond nid yw mor syml â teipio braced agored, braced sgwâr. Yeah. 540 00:29:45,000 --> 00:29:48,000 [Gwestiwn myfyrwyr Anghlywadwy] 541 00:29:48,000 --> 00:29:50,000 Da, felly mae hwn yn kicker go iawn. 542 00:29:50,000 --> 00:29:54,000 >> Mae'r algorithmau yr ydym wedi pined drosodd, fel oh, chwiliad deuaidd, 543 00:29:54,000 --> 00:29:57,000 gallwch chwilio am amrywiaeth o rifau ar y bwrdd 544 00:29:57,000 --> 00:30:01,000 neu lyfr ffôn gymaint yn gyflymach os byddwch yn defnyddio rhannu a gorchfygu 545 00:30:01,000 --> 00:30:05,000 a algorithm chwiliad deuaidd, ond chwiliad deuaidd angen adeiladu dau rhagdybiaethau. 546 00:30:05,000 --> 00:30:09,000 Un, bod y data gael ei ddatrys. 547 00:30:09,000 --> 00:30:11,000 Yn awr, gallwn yn ôl pob tebyg cadw hyn didoli, 548 00:30:11,000 --> 00:30:14,000 felly efallai nad yw hynny'n peri pryder, ond mae chwiliad deuaidd hefyd yn cymryd yn ganiataol 549 00:30:14,000 --> 00:30:18,000 eich bod yn cael mynediad ar hap at y rhestr o rifau, 550 00:30:18,000 --> 00:30:21,000 ac amrywiaeth yn eich galluogi i gael mynediad ar hap, a thrwy mynediad ar hap, 551 00:30:21,000 --> 00:30:24,000 Yr wyf yn golygu os ydych yn cael array, faint o amser mae'n ei gymryd i chi 552 00:30:24,000 --> 00:30:26,000 i gyrraedd braced 0? 553 00:30:26,000 --> 00:30:29,000 Un gweithrediad, 'ch jyst yn defnyddio [0] ac rydych yn iawn yno. 554 00:30:29,000 --> 00:30:33,000 Faint o gamau y mae'n cymryd i gyrraedd lleoliad 10? 555 00:30:33,000 --> 00:30:36,000 Un cam, 'ch jyst yn mynd i [10] ac rydych chi yno. 556 00:30:36,000 --> 00:30:40,000 Ar y llaw arall, sut ydych chi'n cyrraedd y cyfanrif yn 10fed yn rhestr sy'n gysylltiedig? 557 00:30:40,000 --> 00:30:42,000 Mae'n rhaid i chi ddechrau ar y dechrau oherwydd eich bod yn cofio dim ond 558 00:30:42,000 --> 00:30:45,000 dechrau o restr cysylltiedig, yn union fel llinyn yn cael ei gofio 559 00:30:45,000 --> 00:30:48,000 gan y cyfeiriad ei torgoch cyntaf, ac i ddod o hyd bod int 10 560 00:30:48,000 --> 00:30:53,000 neu fod cymeriad yn 10fed yn llinyn, rhaid i chi chwilio y peth damn cyfan. 561 00:30:53,000 --> 00:30:55,000 >> Unwaith eto, nid ydym yn datrys ein holl broblemau. 562 00:30:55,000 --> 00:31:00,000 Rydym yn cyflwyno rhai newydd, ond mae'n wir yn dibynnu ar yr hyn rydych yn ceisio ei ddylunio ar gyfer. 563 00:31:00,000 --> 00:31:04,000 O ran gweithredu hyn, gallwn fenthyg syniad o'r strwythur myfyrwyr. 564 00:31:04,000 --> 00:31:07,000 Mae'r gystrawen yn debyg iawn, ac eithrio yn awr, y syniad ychydig yn fwy haniaethol 565 00:31:07,000 --> 00:31:09,000 na tŷ ac enw a ID. 566 00:31:09,000 --> 00:31:13,000 Ond yr wyf yn cynnig y gallem gael strwythur data yn C 567 00:31:13,000 --> 00:31:17,000 sy'n cael ei alw'n nod, fel y gair olaf ar y sleid yn awgrymu, 568 00:31:17,000 --> 00:31:21,000 tu mewn i nod, a nod yn unig yw cynhwysydd generig mewn gwyddoniaeth gyfrifiadurol. 569 00:31:21,000 --> 00:31:25,000 Mae'n tynnu fel arfer fel cylch neu sgwâr neu betryal fel yr ydym wedi ei wneud. 570 00:31:25,000 --> 00:31:27,000 Ac yn y strwythur data, mae gennym int, n, 571 00:31:27,000 --> 00:31:29,000 felly dyna cadarnhau'r rhif y byddaf am ei storio. 572 00:31:29,000 --> 00:31:36,000 Ond beth yw hyn ail linell, strwythur nod * nesaf? 573 00:31:36,000 --> 00:31:40,000 Pam fod hyn yn gywir, neu pa rôl sydd i ddrama hon peth, 574 00:31:40,000 --> 00:31:42,000 hyd yn oed er 'i' ychydig yn cryptig ar yr olwg gyntaf? 575 00:31:42,000 --> 00:31:44,000 Yeah. 576 00:31:44,000 --> 00:31:46,000 [Ymateb y myfyrwyr Anghlywadwy] 577 00:31:46,000 --> 00:31:50,000 Yn union, felly mae'r math * o ysbail ei fod yn pwyntydd o ryw fath. 578 00:31:50,000 --> 00:31:53,000 Mae'r enw ar y pwyntydd yn fympwyol nesaf, 579 00:31:53,000 --> 00:32:00,000 ond gallem fod wedi ei alw unrhyw beth yr ydym ei eisiau, ond beth mae hyn yn bwynt pwyntydd i? 580 00:32:00,000 --> 00:32:03,000 [Myfyrwyr] arall nod. >> Yn union, mae'n cyfeirio at un arall nod o'r fath. 581 00:32:03,000 --> 00:32:05,000 >> Yn awr, mae hyn yn fath o chwilfrydedd o C. 582 00:32:05,000 --> 00:32:09,000 Dwyn i gof bod C yn cael ei ddarllen gan top i'r gwaelod compiler, o'r chwith i'r dde, 583 00:32:09,000 --> 00:32:13,000 sy'n golygu os-mae hyn yn ychydig yn wahanol i'r hyn a wnaethom gyda'r myfyriwr. 584 00:32:13,000 --> 00:32:16,000 Pan fyddwn yn diffinio myfyriwr, nid ydym mewn gwirionedd oedd yn rhoi gair yno. 585 00:32:16,000 --> 00:32:18,000 Mae'n newydd ei ddweud typedef. 586 00:32:18,000 --> 00:32:20,000 Yna cawsom enw id llinyn int,, llinyn tŷ, 587 00:32:20,000 --> 00:32:23,000 ac yna fyfyriwr yn y waelod y strwythur. 588 00:32:23,000 --> 00:32:26,000 Mae'r datganiad hwn yn ychydig yn wahanol oherwydd, 589 00:32:26,000 --> 00:32:28,000 unwaith eto, y Crynhoydd C ychydig yn fud. 590 00:32:28,000 --> 00:32:30,000 Mae'n ond yn mynd i ddarllen top i'r gwaelod, 591 00:32:30,000 --> 00:32:33,000 felly os bydd yn cyrraedd y llinell 2 yma 592 00:32:33,000 --> 00:32:37,000 ble nesaf yn cael ei ddatgan ac mae'n gweld, oh, dyma newidyn a elwir nesaf. 593 00:32:37,000 --> 00:32:39,000 Mae'n pwyntydd i nod strwythur. 594 00:32:39,000 --> 00:32:42,000 Mae'r compiler yn mynd i sylweddoli beth yw nod strwythur? 595 00:32:42,000 --> 00:32:44,000 Dydw i erioed wedi clywed am y peth o'r blaen, 596 00:32:44,000 --> 00:32:47,000 oherwydd efallai na fydd y nod gair fel arall yn ymddangos 597 00:32:47,000 --> 00:32:49,000 nes bod y gwaelod, felly mae hyn yn diswyddo. 598 00:32:49,000 --> 00:32:53,000 Mae'n rhaid i chi ddweud nod strwythur yma, y ​​gallwch wedyn fyrhau ddiweddarach 599 00:32:53,000 --> 00:32:56,000 diolch i typedef i lawr yma, ond mae hyn oherwydd 600 00:32:56,000 --> 00:33:02,000 rydym yn cyfeirio at y strwythur ei hun tu mewn i'r strwythur. 601 00:33:02,000 --> 00:33:05,000 Dyna'r Gotcha neb yno. 602 00:33:05,000 --> 00:33:07,000 >> Mae rhai problemau diddorol yn mynd i godi. 603 00:33:07,000 --> 00:33:09,000 Mae gennym restr o rifau. Sut rydym yn mewnosod i mewn iddo? 604 00:33:09,000 --> 00:33:11,000 Sut rydym yn chwilio hynny? Sut ydym ni'n ddileu ohono? 605 00:33:11,000 --> 00:33:13,000 Yn enwedig nawr bod yn rhaid inni reoli pob un o'r awgrymiadau. 606 00:33:13,000 --> 00:33:15,000 Yr oeddech yn meddwl awgrymiadau yn fath o feddwl-blygu 607 00:33:15,000 --> 00:33:17,000 pan fyddwch yn cael un ohonynt yn unig yn ceisio i ddarllen int iddo. 608 00:33:17,000 --> 00:33:20,000 Nawr mae'n rhaid i ni drin werth rhestr gyfan yn. 609 00:33:20,000 --> 00:33:22,000 Pam nad ydym yn cymryd ein 5-munud egwyl yma, ac yna byddwn yn dod â 610 00:33:22,000 --> 00:33:34,000 rhai Folks i fyny ar y llwyfan i wneud yn union hynny. 611 00:33:34,000 --> 00:33:36,000 >> C yn llawer mwy o hwyl pan gaiff ei hactio. 612 00:33:36,000 --> 00:33:39,000 Pwy fyddai'n llythrennol yn hoffi i fod yn gyntaf? 613 00:33:39,000 --> 00:33:41,000 Iawn, yn dod ar i fyny. Rydych yn gyntaf. 614 00:33:41,000 --> 00:33:44,000 Pwy fyddai'n hoffi bod 9? Iawn, 9. 615 00:33:44,000 --> 00:33:46,000 Sut tua 9? 17 oed? 616 00:33:46,000 --> 00:33:51,000 Mae criw dethol bach yma. 22 a 26 yn y rhes flaen. 617 00:33:51,000 --> 00:33:53,000 Ac yna beth am rywun dros yno yn cael eu sylw at. 618 00:33:53,000 --> 00:33:57,000 Rydych yn 34. Iawn, 34, yn dod ar i fyny. 619 00:33:57,000 --> 00:33:59,000 Weinidog ddod i ben yno. Iawn, mae'r pedwar ohonoch guys. 620 00:33:59,000 --> 00:34:01,000 A phwy y gwnaethom ddweud am 9? 621 00:34:01,000 --> 00:34:04,000 Pwy yw ein 9? 622 00:34:04,000 --> 00:34:07,000 Pwy sydd wir eisiau bod yn 9? Mae pob hawl, yn dod ar, fod yn 9. 623 00:34:07,000 --> 00:34:10,000 Yma rydym yn mynd. 624 00:34:10,000 --> 00:34:13,000 34, byddwn yn cwrdd â chi dros yno. 625 00:34:13,000 --> 00:34:17,000 Y rhan gyntaf yw gwneud eich hunain yn edrych fel 'na. 626 00:34:17,000 --> 00:34:21,000 26, 22, 17, yn dda. 627 00:34:21,000 --> 00:34:25,000 Os gallwch chi sefyll i ffwrdd i'r ochr, oherwydd ein bod ni'n mynd i malloc atoch mewn munud. 628 00:34:25,000 --> 00:34:29,000 >> Da, yn dda. 629 00:34:29,000 --> 00:34:32,000 Iawn, gwych, felly gadewch i ni ofyn ychydig o gwestiynau yma. 630 00:34:32,000 --> 00:34:34,000 Ac mewn gwirionedd, beth yw eich enw? >> Anita. 631 00:34:34,000 --> 00:34:37,000 Anita, iawn, dewch draw yma. 632 00:34:37,000 --> 00:34:41,000 Anita yn mynd i'n helpu i fath o ddatrys un cwestiwn eithaf syml yn gyntaf, 633 00:34:41,000 --> 00:34:44,000 sef sut ydych chi'n dod o hyd a yw gwerth yn y rhestr? 634 00:34:44,000 --> 00:34:48,000 Yn awr, yn sylwi bod yn gyntaf, a gynrychiolir yma gan Lucas, 635 00:34:48,000 --> 00:34:52,000 ychydig yn wahanol, ac felly ei ddarn o bapur yn fwriadol i'r ochr 636 00:34:52,000 --> 00:34:55,000 gan nad yw'n lawn mor dal ac nid yw'n cymryd i fyny fel llawer o ddarnau, 637 00:34:55,000 --> 00:34:58,000 er yn dechnegol ganddo'r un maint o bapur yn unig cylchdroi. 638 00:34:58,000 --> 00:35:01,000 Ond mae'n ychydig yn wahanol gan ei fod dim ond 32 catiau am pwyntydd, 639 00:35:01,000 --> 00:35:05,000 ac mae pob un o'r rhain guys yna 64 o ddarnau, hanner, sef y nifer, hanner ohonynt yn pwyntydd. 640 00:35:05,000 --> 00:35:08,000 Ond nid y pwyntydd yn cael ei darlunio, felly os ydych yn guys gallai braidd yn lletchwith 641 00:35:08,000 --> 00:35:12,000 defnyddio eich llaw chwith i bwyntio at y person nesaf i chi. 642 00:35:12,000 --> 00:35:14,000 A ydych chi'n rhif 34. Beth yw eich enw? 643 00:35:14,000 --> 00:35:16,000 Ari. 644 00:35:16,000 --> 00:35:19,000 Ari, felly mewn gwirionedd, ddal y papur yn eich llaw dde, a llaw chwith yn mynd yn syth i lawr. 645 00:35:19,000 --> 00:35:21,000 Rydych yn cynrychioli null ar y chwith. 646 00:35:21,000 --> 00:35:24,000 >> Nawr ein darlun dynol yn gyson iawn. 647 00:35:24,000 --> 00:35:26,000 Mae hyn mewn gwirionedd sut mae awgrymiadau yn gweithio. 648 00:35:26,000 --> 00:35:29,000 Ac os allwch chi scrunch ychydig y modd hwn felly dydw i ddim yn eich ffordd. 649 00:35:29,000 --> 00:35:34,000 Anita yma, dod o hyd i 'm' r rhif 22, 650 00:35:34,000 --> 00:35:40,000 ond cymryd yn ganiataol cyfyngiad o beidio â bodau dynol yn dal darnau o bapur, 651 00:35:40,000 --> 00:35:43,000 ond mae hon yn rhestr, ac nad oes gennych ond Lucas i ddechrau 652 00:35:43,000 --> 00:35:46,000 oherwydd ei fod yn llythrennol y pwyntydd cyntaf. 653 00:35:46,000 --> 00:35:51,000 Tybiwch fod gennych chi eich hun yn arwyddion, ac felly chi hefyd yn cael y gallu i bwyntio at rywbeth. 654 00:35:51,000 --> 00:35:56,000 Pam na wnewch chi ddechrau trwy bwyntio at yn union yr hyn y Lucas yn pwyntio at? 655 00:35:56,000 --> 00:35:58,000 Da, a gadewch i mi ddeddfu hyn dros yma. 656 00:35:58,000 --> 00:36:04,000 Dim ond er mwyn drafodaeth, gadewch i mi dynnu i fyny dudalen wag yma. 657 00:36:04,000 --> 00:36:06,000 Sut ydych chi'n sillafu eich enw? >> Anita. 658 00:36:06,000 --> 00:36:08,000 Iawn, Anita. 659 00:36:08,000 --> 00:36:18,000 Lets 'ddeud nod * Anita = lucas. 660 00:36:18,000 --> 00:36:22,000 Wel, ni ddylem eich galw'n lucas. Dylem ffonio chi yn gyntaf. 661 00:36:22,000 --> 00:36:25,000 Pam mae hyn mewn gwirionedd yn gyson â realiti yma? 662 00:36:25,000 --> 00:36:27,000 Un, cyntaf eisoes yn bodoli. 663 00:36:27,000 --> 00:36:30,000 Gyntaf wedi cael ei ddyrannu yn ôl pob tebyg yn rhywle i fyny yma. 664 00:36:30,000 --> 00:36:35,000 Node * yn gyntaf, ac mae wedi cael ei ddyrannu rhestr rhywsut. 665 00:36:35,000 --> 00:36:37,000 Nid wyf yn gwybod sut mae hynny'n digwydd. A ddigwyddodd cyn y dosbarth ddechrau. 666 00:36:37,000 --> 00:36:40,000 Mae'r rhestr gysylltiedig o bodau dynol wedi ei greu. 667 00:36:40,000 --> 00:36:44,000 Ac yn awr ar y pwynt hwn yn y stori-mae hyn i gyd yn mynd ar ôl pob golwg yn ddiweddarach Facebook- 668 00:36:44,000 --> 00:36:49,000 ar y pwynt hwn yn y stori, Anita wedi cael ei ymgychwyn i fod yn hafal i gyntaf, 669 00:36:49,000 --> 00:36:51,000 Nid yw'n golygu bod pwyntiau Anita yn Lucas. 670 00:36:51,000 --> 00:36:53,000 Yn hytrach, meddai wrth bwyntio at yr hyn y mae'n pwyntio at 671 00:36:53,000 --> 00:36:57,000 oherwydd bod yr un cyfeiriad sy'n tu mewn Lucas yn 32 catiau - 1, 2, 3 - 672 00:36:57,000 --> 00:37:01,000 Mae bellach hefyd yn y tu mewn o Anita yn 32 catiau - 1, 2, 3. 673 00:37:01,000 --> 00:37:05,000 >> Nawr dod o hyd i 22. Sut fyddech chi'n mynd ati i wneud hyn? 674 00:37:05,000 --> 00:37:07,000 Beth sy'n bod Point? >> I beth bynnag. 675 00:37:07,000 --> 00:37:11,000 Pwyntiwch at beth bynnag, felly mynd yn ei flaen ac yn gweithredu allan fel gorau y gallwch chi yma. 676 00:37:11,000 --> 00:37:15,000 Da, da, ac yn awr ydych chi'n pwyntio at-beth yw eich enw gyda 22? 677 00:37:15,000 --> 00:37:18,000 Ramon. >> Ramon, felly Ramon yn dal i fyny 22. 678 00:37:18,000 --> 00:37:20,000 Rydych wedi wneud yn awr siec. 679 00:37:20,000 --> 00:37:24,000 A yw'r Ramon == 22, ac os felly, er enghraifft, gallwn ddychwelyd yn wir. 680 00:37:24,000 --> 00:37:26,000 Gadewch i mi-er bod y guys yn sefyll yma braidd yn lletchwith- 681 00:37:26,000 --> 00:37:32,000 gadael i mi wneud rhywbeth yn gyflym fel bool dod o hyd. 682 00:37:32,000 --> 00:37:37,000 Rydw i'n mynd i fynd yn ei flaen a dweud (nod * rhestr, int n). 683 00:37:37,000 --> 00:37:39,000 'N annhymerus' yn gywir yn ôl gyda chi guys. Fi jyst yn rhaid i ysgrifennu rhai cod. 684 00:37:39,000 --> 00:37:45,000 Ac yn awr yr wyf i'n mynd i fynd yn ei flaen ac yn gwneud hyn, nod * rhestr = Anita. 685 00:37:45,000 --> 00:37:51,000 Ac yr wyf i'n mynd i fynd yn ei flaen a dweud ychydig (Anita! = NULL). 686 00:37:51,000 --> 00:37:57,000 >> Mae'r trosiad yma yn cael ychydig yn brin, ond ychydig (Anita! = NULL), beth ydw i am ei wneud? 687 00:37:57,000 --> 00:38:03,000 Fi angen rhyw ffordd o gyfeirio 688 00:38:03,000 --> 00:38:05,000 y cyfanrif bod Anita yn pwyntio at. 689 00:38:05,000 --> 00:38:08,000 Yn y gorffennol, pan oedd gennym strwythurau, y mae nod yw, 690 00:38:08,000 --> 00:38:11,000 rydym yn defnyddio'r nodiant dot, a byddem yn dweud rhywbeth fel 691 00:38:11,000 --> 00:38:15,000 anita.n, ond y broblem yma yw nad yw Anita yn strwythur y cyfryw. 692 00:38:15,000 --> 00:38:17,000 Beth yw hi? 693 00:38:17,000 --> 00:38:21,000 Mae hi'n pwyntydd, felly mewn gwirionedd, os ydym am ddefnyddio'r nodiant dot- 694 00:38:21,000 --> 00:38:23,000 ac mae hyn yn mynd i edrych yn fwriadol ychydig yn cryptig- 695 00:38:23,000 --> 00:38:28,000 rhaid i ni wneud rhywbeth fel mynd i ba bynnag Anita llaw chwith yn pwyntio at 696 00:38:28,000 --> 00:38:31,000 ac yna yn cael y cae o'r enw n. 697 00:38:31,000 --> 00:38:35,000 Anita yn pwyntydd, ond beth yw * Anita? 698 00:38:35,000 --> 00:38:38,000 Beth ydych chi'n dod o hyd pan fyddwch yn mynd i'r hyn Anita yn pwyntio at? 699 00:38:38,000 --> 00:38:42,000 Mae strwythur, a nod, a nod, galw i gof, mae cae o'r enw n 700 00:38:42,000 --> 00:38:47,000 oherwydd ei fod wedi, galw i gof, y 2 faes, nesaf a n, 701 00:38:47,000 --> 00:38:50,000 ein bod yn gweld hyn o bryd yn ôl i'r dde yma. 702 00:38:50,000 --> 00:38:53,000 >> I mewn gwirionedd yn dynwared hyn mewn cod, 703 00:38:53,000 --> 00:39:02,000 gallem wneud hyn ac yn dweud os ((* Anita). == n n), y n fy mod i'n chwilio amdano. 704 00:39:02,000 --> 00:39:04,000 Sylwch fod y swyddogaeth ei basio yn y nifer wyf yn poeni am. 705 00:39:04,000 --> 00:39:10,000 Yna gallaf fynd ymlaen a gwneud rhywbeth fel elw gwirioneddol. 706 00:39:10,000 --> 00:39:12,000 Else, os nad yw hynny'n wir, beth ydw i am ei wneud? 707 00:39:12,000 --> 00:39:19,000 Sut ydw i'n cyfieithu i cod beth Anita yn gwneud hynny yn reddfol drwy gerdded drwy'r rhestr? 708 00:39:19,000 --> 00:39:26,000 Beth ddylwn i ei wneud hyd yma i efelychu Anita cymryd y cam i'r chwith, y cam i'r chwith? 709 00:39:26,000 --> 00:39:28,000 [Ymateb y myfyrwyr Anghlywadwy] >> Beth sy'n bod? 710 00:39:28,000 --> 00:39:30,000 [Ymateb y myfyrwyr Anghlywadwy] 711 00:39:30,000 --> 00:39:34,000 Da, nid yn syniad drwg, ond yn y gorffennol, pan fyddwn wedi gwneud hyn, rydym wedi gwneud Anita + + 712 00:39:34,000 --> 00:39:37,000 oherwydd y byddai hynny'n ychwanegu rhif 1 i Anita, 713 00:39:37,000 --> 00:39:40,000 Byddai sydd fel arfer yn pwyntio at y person nesaf, fel Ramon, 714 00:39:40,000 --> 00:39:44,000 neu'r person nesaf ato, neu y nesaf ato person i lawr y llinell. 715 00:39:44,000 --> 00:39:49,000 Ond nid yw hynny'n eithaf da yma oherwydd beth mae hyn yn beth yn edrych fel yn y cof? 716 00:39:49,000 --> 00:39:54,000 Nid bod. Mae'n rhaid i ni analluoga hynny. 717 00:39:54,000 --> 00:40:00,000 Mae'n edrych fel hyn mewn cof, a hyd yn oed er fy mod i wedi tynnu 1 a 2 a 3 yn agos at ei gilydd, 718 00:40:00,000 --> 00:40:03,000 os ydym yn wir yn efelychu hyn-allwch chi guys, tra'n parhau i bwyntio ar yr un bobl, 719 00:40:03,000 --> 00:40:07,000 gall rhai ohonoch gymryd cam yn ôl ar hap, mae rhai ohonoch yn gam ymlaen ar hap? 720 00:40:07,000 --> 00:40:10,000 >> Mae'r llanast yn dal i fod yn rhestr cysylltiedig, 721 00:40:10,000 --> 00:40:13,000 ond gallai'r rhain guys fod yn unrhyw le yn y cof, 722 00:40:13,000 --> 00:40:15,000 felly Anita + na + yn mynd i weithio pam? 723 00:40:15,000 --> 00:40:19,000 Beth sydd yn y lleoliad Anita + +? 724 00:40:19,000 --> 00:40:21,000 Pwy a ŵyr. 725 00:40:21,000 --> 00:40:24,000 Mae'n rhywfaint o werth arall mai dim ond fel y digwydd i'w interposed 726 00:40:24,000 --> 00:40:28,000 ymhlith pob un o'r rhain nodau ar hap gan nad ydym yn defnyddio amrywiaeth. 727 00:40:28,000 --> 00:40:30,000 Rydym yn dyrannu pob un o'r nodau unigol. 728 00:40:30,000 --> 00:40:32,000 Iawn, os gallwch chi guys glanhau eich hunain yn ôl i fyny. 729 00:40:32,000 --> 00:40:37,000 Gadewch i mi yn cynnig y lle Anita + +, rydym yn ei wneud yn lle Anita yn cael- 730 00:40:37,000 --> 00:40:42,000 yn dda, pam nad ydym yn mynd i beth bynnag Anita yn pwyntio arnynt ac wedyn yn ei wneud. nesaf? 731 00:40:42,000 --> 00:40:45,000 Mewn geiriau eraill, rydym yn mynd i Ramon, pwy sy'n dal y rhif 22, 732 00:40:45,000 --> 00:40:51,000 ac yna. nesaf yw fel pe byddai Anita fod yn copïo ei pwyntydd llaw chwith. 733 00:40:51,000 --> 00:40:54,000 Ond ni fyddai'n mynd ymhellach nag Ramon oherwydd ein bod o hyd i 22. 734 00:40:54,000 --> 00:40:56,000 Ond dyna fyddai'r syniad. Yn awr, mae hwn yn llanast dduw-ofnadwy. 735 00:40:56,000 --> 00:40:59,000 Onest, bydd neb byth yn cofio hyn cystrawen, ac felly diolch byth, 736 00:40:59,000 --> 00:41:04,000 mewn gwirionedd mae'n ychydig yn fwriadol-oh, na wnaethoch chi mewn gwirionedd yn gweld yr hyn a ysgrifennais. 737 00:41:04,000 --> 00:41:08,000 Byddai hyn yn fwy grymus pe gallech. Voila! 738 00:41:08,000 --> 00:41:10,000 >> Y tu ôl i'r llenni, roeddwn yn datrys y broblem y ffordd hon. 739 00:41:10,000 --> 00:41:14,000 Anita, i gymryd y cam i'r chwith, 740 00:41:14,000 --> 00:41:18,000 gyntaf, rydym yn mynd i'r cyfeiriad fod Anita yn pwyntio at 741 00:41:18,000 --> 00:41:23,000 a lle bydd yn dod o hyd i nid yn unig n, yr ydym yn unig gwirio ar gyfer mwyn cymharu, yn 742 00:41:23,000 --> 00:41:25,000 ond byddwch hefyd yn dod o hyd nesaf - yn yr achos hwn, 743 00:41:25,000 --> 00:41:28,000 Ramon llaw chwith pwyntio at y nod nesaf yn y rhestr. 744 00:41:28,000 --> 00:41:32,000 Ond mae hyn yn y llanast duw-ofnadwy y cyfeiriais ato yn gynharach, 745 00:41:32,000 --> 00:41:34,000 ond mae'n troi allan C yn gadael i ni symleiddio hyn. 746 00:41:34,000 --> 00:41:40,000 Yn hytrach na ysgrifennu (* Anita), gallwn yn hytrach na dim ond ysgrifennu Anita-> n, 747 00:41:40,000 --> 00:41:45,000 ac mae'n yr un peth yn union swyddogaethol, ond mae'n llawer mwy 'n athrylithgar, 748 00:41:45,000 --> 00:41:48,000 ac mae'n llawer mwy cyson â'r darlun yr ydym wedi bod yn tynnu 749 00:41:48,000 --> 00:41:50,000 i gyd y tro hwn gan ddefnyddio saethau. 750 00:41:50,000 --> 00:41:57,000 >> Yn olaf, beth sydd angen i ni ei wneud ar ddiwedd y rhaglen? 751 00:41:57,000 --> 00:42:00,000 Mae un llinell o god sy'n weddill. 752 00:42:00,000 --> 00:42:02,000 Dychwelyd beth? 753 00:42:02,000 --> 00:42:05,000 Ffug, oherwydd os ydym yn ei gael drwy'r cyfan tra ddolen 754 00:42:05,000 --> 00:42:10,000 ac Anita, mewn gwirionedd, null, sy'n golygu ei bod yn mynd yr holl ffordd i ddiwedd y rhestr 755 00:42:10,000 --> 00:42:12,000 lle'r oedd yn pwyntio at-beth yw eich enw eto? 756 00:42:12,000 --> 00:42:15,000 Ari. >> Ari llaw chwith, sy'n null. 757 00:42:15,000 --> 00:42:18,000 Anita yn awr yn null, ac yr wyf yn sylweddoli eich bod yn sefyll yma lletchwith mewn limbo 758 00:42:18,000 --> 00:42:21,000 oherwydd fy mod i'n mynd i ffwrdd ar ymson yma, 759 00:42:21,000 --> 00:42:23,000 ond byddwn yn eich cynnwys chi eto mewn dim ond hyn o bryd. 760 00:42:23,000 --> 00:42:27,000 Anita yn null yr adeg honno yn y stori, felly mae'r ddolen yn dod i ben tra, 761 00:42:27,000 --> 00:42:30,000 a rhaid i ni ddychwelyd ffug bod yn rhaid iddi gael yr holl ffordd i Ari y pwyntydd null 762 00:42:30,000 --> 00:42:34,000 yna nid oedd dim rhif yr oedd eisiau yn y rhestr. 763 00:42:34,000 --> 00:42:39,000 Gallwn glanhau hyn i fyny hefyd, ond mae hwn yn gweithredu 'n bert da yna 764 00:42:39,000 --> 00:42:43,000 swyddogaeth llwybro, a dod o hyd i swyddogaeth am restr cysylltiedig. 765 00:42:43,000 --> 00:42:48,000 Mae'n dal i fod chwiliad llinol, ond nid yw mor syml â + + pwyntydd 766 00:42:48,000 --> 00:42:52,000 neu + + newidyn i oherwydd yn awr ni allwn ddyfalu 767 00:42:52,000 --> 00:42:54,000 lle mae pob un o'r nodau yn y cof. 768 00:42:54,000 --> 00:42:57,000 Mae'n rhaid i ni llythrennol dilyn y llwybr o friwsion bara neu, yn fwy penodol, 769 00:42:57,000 --> 00:43:00,000 awgrymiadau, i fynd o un nod i un arall. 770 00:43:00,000 --> 00:43:02,000 >> Nawr gadewch i ni geisio un arall. Anita, ydych chi eisiau dod yn ôl yma? 771 00:43:02,000 --> 00:43:06,000 Pam nad ydym yn mynd yn ei flaen ac yn dyrannu un person arall o'r gynulleidfa? 772 00:43:06,000 --> 00:43:08,000 Malloc-beth yw eich enw? >> Rebecca. 773 00:43:08,000 --> 00:43:10,000 Rebecca. Rebecca wedi cael ei malloced gan y gynulleidfa, 774 00:43:10,000 --> 00:43:13,000 ac mae hi bellach yn storio'r rhif 55. 775 00:43:13,000 --> 00:43:17,000 A'r nod wrth law yn awr yw i Anita i fewnosod 776 00:43:17,000 --> 00:43:22,000 Beca yn y rhestr sy'n gysylltiedig yma yn ei le priodol. 777 00:43:22,000 --> 00:43:24,000 Dewch draw fan hyn am eiliad. 778 00:43:24,000 --> 00:43:28,000 Rwyf wedi gwneud rhywbeth fel hyn. 779 00:43:28,000 --> 00:43:32,000 Rwyf wedi gwneud * nod. A beth yw eich enw eto? 780 00:43:32,000 --> 00:43:34,000 Rebecca. >> Rebecca, iawn. 781 00:43:34,000 --> 00:43:41,000 Rebecca yn cael malloc (sizeof (nod)). 782 00:43:41,000 --> 00:43:44,000 Yn union fel rydym wedi dyrannu pethau fel myfyrwyr a whatnot yn y gorffennol, 783 00:43:44,000 --> 00:43:46,000 mae angen maint y nod, felly, yn awr Beca 784 00:43:46,000 --> 00:43:49,000 yn pwyntio ar yr hyn? 785 00:43:49,000 --> 00:43:52,000 Rebecca ddau gae y tu mewn iddi, ac un ohonynt yw 55. 786 00:43:52,000 --> 00:43:55,000 Gadewch i ni wneud beth, rebecca-> = 55. 787 00:43:55,000 --> 00:44:00,000 Ond yna rebecca-> Dylai nesaf-fel ar hyn o bryd, ei llaw yn fath o pwy a ŵyr? 788 00:44:00,000 --> 00:44:03,000 Mae'n pwyntio ar ryw werth garbage, felly pam na gwneud ar gyfer mesur da 789 00:44:03,000 --> 00:44:07,000 o leiaf yn gwneud hyn fel y llaw chwith yn awr ar ei ochr. 790 00:44:07,000 --> 00:44:09,000 Nawr Anita, ei gymryd oddi yma. 791 00:44:09,000 --> 00:44:11,000 Mae gennych Rebecca wedi cael ei ddyrannu. 792 00:44:11,000 --> 00:44:20,000 Mynd yn ei flaen a dod o hyd lle y dylem roi Rebecca. 793 00:44:20,000 --> 00:44:25,000 Da, da iawn. 794 00:44:25,000 --> 00:44:28,000 Iawn, yn dda, ac yn awr mae angen i chi roi ychydig o gyfeiriad, 795 00:44:28,000 --> 00:44:30,000 felly os ydych wedi cyrraedd Ari. 796 00:44:30,000 --> 00:44:33,000 Ei law chwith yn null, ond Rebecca amlwg yn perthyn i'r dde, 797 00:44:33,000 --> 00:44:36,000 felly sut ydym yn rhaid i ni newid y rhestr sy'n gysylltiedig 798 00:44:36,000 --> 00:44:38,000 er mwyn mewnosod Rebecca yn y lle priodol? 799 00:44:38,000 --> 00:44:42,000 Pe gallech llythrennol symud ddwylo pobl chwith o gwmpas yn ôl yr angen, 800 00:44:42,000 --> 00:44:48,000 byddwn yn datrys y broblem y ffordd honno. 801 00:44:48,000 --> 00:44:52,000 Iawn, yn dda, ac yn y cyfamser, Rebecca llaw chwith yn awr wrth ei hochr. 802 00:44:52,000 --> 00:44:54,000 >> Dyna oedd yn rhy hawdd. 803 00:44:54,000 --> 00:44:57,000 Gadewch i ni geisio dyrannu-we're gwneud bron, 20. 804 00:44:57,000 --> 00:44:59,000 Iawn, yn dod ar i fyny. 805 00:44:59,000 --> 00:45:04,000 20 wedi cael ei ddyrannu, felly gadewch i mi fynd yn ei flaen a dweud eto yma 806 00:45:04,000 --> 00:45:07,000 ydym wedi gwneud dim ond Saad * nod. 807 00:45:07,000 --> 00:45:11,000 Rydym wedi malloc (sizeof (nod)). 808 00:45:11,000 --> 00:45:16,000 Yna byddwn yn gwneud y gystrawen union yr un fath fel y gwnaethom o'r blaen ar gyfer 20, 809 00:45:16,000 --> 00:45:20,000 a byddaf yn ei wneud nesaf = NULL, ac yn awr mae i fyny i Anita 810 00:45:20,000 --> 00:45:23,000 i osod chi i'r rhestr cysylltiedig, pe gallech chwarae rôl honno yn union yr un. 811 00:45:23,000 --> 00:45:30,000 Gweithredu. 812 00:45:30,000 --> 00:45:32,000 Iawn, yn dda. 813 00:45:32,000 --> 00:45:38,000 Nawr meddyliwch yn ofalus cyn i chi ddechrau symud dwylo chwith o gwmpas. 814 00:45:38,000 --> 00:45:46,000 Chi o bell ffordd wedi cael y rôl fwyaf lletchwith heddiw. 815 00:45:46,000 --> 00:45:59,000 Dylid ei law yn cael ei symud gyntaf? 816 00:45:59,000 --> 00:46:02,000 Iawn, aros, rwy'n clywed rhai o dim. 817 00:46:02,000 --> 00:46:07,000 Os byddai rhai Folks yn gwrtais yn hoffi i helpu i ddatrys sefyllfa letchwith yma. 818 00:46:07,000 --> 00:46:11,000 Dylai pwy llaw chwith yn cael ei ddiweddaru 1 efallai? Yeah. 819 00:46:11,000 --> 00:46:13,000 [Myfyrwyr] Saad yn. 820 00:46:13,000 --> 00:46:15,000 Iawn, Saad, pam, er bod? 821 00:46:15,000 --> 00:46:17,000 [Ymateb y myfyrwyr Anghlywadwy] 822 00:46:17,000 --> 00:46:19,000 Da, oherwydd os ydym yn symud-beth yw eich enw? >> Marshall. 823 00:46:19,000 --> 00:46:22,000 Marshall, os byddwn yn symud ei law cyntaf i lawr i null, 824 00:46:22,000 --> 00:46:25,000 erbyn hyn rydym wedi amddifad yn llythrennol pedwar o bobl yn y rhestr hon 825 00:46:25,000 --> 00:46:29,000 oherwydd ef oedd yr unig beth pwyntio at Ramon a phawb ar y chwith, 826 00:46:29,000 --> 00:46:31,000 er mwyn diweddaru bod pwyntydd gyntaf yn wael. 827 00:46:31,000 --> 00:46:33,000 Gadewch i ni ddadwneud hynny. 828 00:46:33,000 --> 00:46:37,000 Da, ac yn awr fynd yn ei flaen a symud y llaw chwith priodol pwyntio at Ramon. 829 00:46:37,000 --> 00:46:39,000 Mae hyn yn teimlo eu bod yn segur bach. 830 00:46:39,000 --> 00:46:41,000 Nawr mae dau o bobl tynnu sylw at Ramon, ond mae hynny'n iawn 831 00:46:41,000 --> 00:46:43,000 oherwydd yn awr sut arall ydyn ni'n diweddaru'r rhestr? 832 00:46:43,000 --> 00:46:48,000 Pa llaw arall, mae symud? 833 00:46:48,000 --> 00:46:53,000 Ardderchog, yn awr rydym yn colli unrhyw cof? 834 00:46:53,000 --> 00:46:57,000 Na, mor dda, gadewch i ni weld os na allwn dorri'r hyn unwaith yn rhagor. 835 00:46:57,000 --> 00:47:00,000 >> Mallocing am y tro olaf, rhif 5. 836 00:47:00,000 --> 00:47:04,000 Yr holl ffordd yn ôl, yn dod ar i lawr. 837 00:47:04,000 --> 00:47:08,000 Mae'n gyffrous iawn. 838 00:47:08,000 --> 00:47:15,000 [Cymeradwyaeth] 839 00:47:15,000 --> 00:47:17,000 Beth yw eich enw? >> Ron. 840 00:47:17,000 --> 00:47:19,000 Ron, iawn, yr ydych yn malloced fel rhif 5. 841 00:47:19,000 --> 00:47:23,000 Rydym wedi gweithredu yn unig cod sef bron union yr un fath i'r 842 00:47:23,000 --> 00:47:26,000 gyda dim ond enw gwahanol. 843 00:47:26,000 --> 00:47:28,000 Ardderchog. 844 00:47:28,000 --> 00:47:38,000 Yn awr, Anita, pob lwc fewnosod rhif 5 yn y rhestr yn awr. 845 00:47:38,000 --> 00:47:43,000 Da, a? 846 00:47:43,000 --> 00:47:47,000 Ardderchog, felly mae hyn yn wir yn y trydydd o dri achos cyfanswm. 847 00:47:47,000 --> 00:47:49,000 Rydym yn gyntaf wedi cael rhywun ar y diwedd, Rebecca. 848 00:47:49,000 --> 00:47:51,000 Yna cawsom rhywun yn y canol. 849 00:47:51,000 --> 00:47:53,000 Nawr mae gennym rywun ar y dechrau, ac yn yr enghraifft hon, 850 00:47:53,000 --> 00:47:56,000 rydym yn awr yn rhaid i ddiweddaru Lucas am y tro cyntaf 851 00:47:56,000 --> 00:48:00,000 oherwydd bod yr elfen gyntaf yn y rhestr bellach i bwyntio at y nod newydd, 852 00:48:00,000 --> 00:48:03,000 sydd, yn ei dro, yn tynnu sylw at nifer nod 9. 853 00:48:03,000 --> 00:48:06,000 >> Roedd hwn yn arddangosiad hynod lletchwith, rwy'n siwr, 854 00:48:06,000 --> 00:48:08,000 felly rownd fawr o gymeradwyaeth ar gyfer y guys os ydych yn gallu. 855 00:48:08,000 --> 00:48:11,000 Gwneud 'n glws. 856 00:48:11,000 --> 00:48:17,000 Dyna i gyd. Efallai y byddwch yn cadw eich darnau o bapur fel cof bach. 857 00:48:17,000 --> 00:48:22,000 Mae'n troi allan bod yn gwneud hyn mewn cod 858 00:48:22,000 --> 00:48:26,000 Nid yw mor syml â dim ond symud o gwmpas dwylo 859 00:48:26,000 --> 00:48:28,000 ac yn pwyntio awgrymiadau ar bethau gwahanol. 860 00:48:28,000 --> 00:48:31,000 Ond sylweddoli pan ddaw amser i weithredu rhywbeth fel 861 00:48:31,000 --> 00:48:34,000 rhestr cysylltiedig neu amrywiad ohono os ydych yn canolbwyntio ar wir 862 00:48:34,000 --> 00:48:38,000 hyn hanfodion sylfaenol, y problemau fesul tamaid rhaid i mi chyfrif i maes, 863 00:48:38,000 --> 00:48:43,000 yw hyn yn llaw neu y llaw, yn sylweddoli bod yr hyn sydd fel arall yn rhaglen weddol gymhleth 864 00:48:43,000 --> 00:48:47,000 Gall, mewn gwirionedd, yn cael ei leihau i flociau adeiladu yn weddol syml fel hyn. 865 00:48:47,000 --> 00:48:51,000 >> Gadewch i ni gymryd pethau i gyfeiriad mwy soffistigedig o hyd. 866 00:48:51,000 --> 00:48:53,000 Erbyn hyn mae gennym y syniad o'r rhestr cysylltiedig. 867 00:48:53,000 --> 00:48:57,000 Mae gennym hefyd-diolch i'r awgrym yn ôl yno-a rhestr gysylltiedig dwbl, 868 00:48:57,000 --> 00:49:01,000 sy'n edrych bron yr un fath, ond erbyn hyn mae gennym ddwy arwyddion tu fewn i'r strwythur 869 00:49:01,000 --> 00:49:05,000 yn lle un, a gallem yn ôl pob tebyg yn galw y rhai awgrymiadau blaenorol ac nesaf 870 00:49:05,000 --> 00:49:08,000 neu'r chwith neu i'r dde, ond rydym yn, mewn gwirionedd, angen dau ohonynt. 871 00:49:08,000 --> 00:49:10,000 Byddai'r cod fod ychydig yn fwy ynghlwm. 872 00:49:10,000 --> 00:49:12,000 Byddai Anita wedi gorfod gwneud mwy o waith yma ar y llwyfan. 873 00:49:12,000 --> 00:49:15,000 Ond gallem yn sicr yn gweithredu'r math o strwythur. 874 00:49:15,000 --> 00:49:19,000 O ran amser rhedeg, fodd bynnag, beth fyddai'r amser yn rhedeg 875 00:49:19,000 --> 00:49:24,000 gyfer Anita o ddod o hyd i rif n mewn rhestr sy'n gysylltiedig nawr? 876 00:49:24,000 --> 00:49:27,000 O Still fawr o n, felly does dim yn well na chwiliad llinol. 877 00:49:27,000 --> 00:49:29,000 Ni allwn wneud chwiliad deuaidd, fodd bynnag, unwaith eto. 878 00:49:29,000 --> 00:49:34,000 Pam oedd bod yr achos? Ni allwch neidio o gwmpas. 879 00:49:34,000 --> 00:49:36,000 Er ein bod yn amlwg yn gweld yr holl bobl ar y llwyfan, 880 00:49:36,000 --> 00:49:39,000 a gallai Anita wedi eyeballed a dweud, "Dyma ganol y rhestr," 881 00:49:39,000 --> 00:49:42,000 na fyddai'n gwybod os hi oedd y rhaglen gyfrifiadurol 882 00:49:42,000 --> 00:49:47,000 oherwydd yr unig beth oedd yn rhaid iddi grybwyll ar ddechrau y senario 883 00:49:47,000 --> 00:49:50,000 Roedd Lucas, a oedd yn y pwyntydd cyntaf. 884 00:49:50,000 --> 00:49:53,000 Byddai'n rhaid i ddilyn y cysylltiadau hynny, 885 00:49:53,000 --> 00:49:56,000 cyfrif ei ffordd hyd nes y daeth o hyd yn fras y canol, 886 00:49:56,000 --> 00:49:58,000 a hyd yn oed wedyn, nid yw Ruby yn mynd i wybod pan fydd hi'n cyrraedd y canol 887 00:49:58,000 --> 00:50:01,000 oni bai ei bod yn mynd yr holl ffordd i'r diwedd at chyfrif i maes faint ohonynt sydd, 888 00:50:01,000 --> 00:50:05,000 yna backtracks, ac y byddai hefyd yn anodd oni bai eich bod wedi 889 00:50:05,000 --> 00:50:07,000 rhestr cysylltiedig ddwbl o ryw fath. 890 00:50:07,000 --> 00:50:10,000 >> Datrys rhai problemau heddiw, ond cyflwyno eraill. 891 00:50:10,000 --> 00:50:12,000 Beth am strwythur data gwahanol yn gyfan gwbl? 892 00:50:12,000 --> 00:50:15,000 Dyma lun o'r hambyrddau yn Mather House, 893 00:50:15,000 --> 00:50:19,000 ac yn yr achos hwn, mae gennym strwythur data rydym hefyd wedi fath sydd eisoes yn bod yn siarad amdano. 894 00:50:19,000 --> 00:50:22,000 Rydym yn siarad am pentwr yng nghyd-destun y cof, 895 00:50:22,000 --> 00:50:26,000 ac mae hynny'n fath o enw yn fwriadol oherwydd bod pentwr yn y cylch cof 896 00:50:26,000 --> 00:50:31,000 yn effeithiol a strwythur data sydd wedi stwff mwy a mwy o haenau ar ben arno. 897 00:50:31,000 --> 00:50:35,000 Ond y peth diddorol am pentwr, fel sy'n digwydd mewn gwirionedd, 898 00:50:35,000 --> 00:50:38,000 yw ei fod yn fath arbennig o strwythur data. 899 00:50:38,000 --> 00:50:42,000 Mae'n strwythur data lle yr elfen gyntaf yn 900 00:50:42,000 --> 00:50:46,000 yw'r elfen olaf allan. 901 00:50:46,000 --> 00:50:50,000 Os ydych yn yr hambwrdd cyntaf i gael ei roi ar y pentwr, 902 00:50:50,000 --> 00:50:53,000 ydych yn mynd i fod yn anffodus yr hambwrdd olaf i gael ei dynnu oddi ar y pentwr, 903 00:50:53,000 --> 00:50:55,000 ac nad yw o anghenraid yn beth da. 904 00:50:55,000 --> 00:50:58,000 I'r gwrthwyneb, gallwch feddwl am y peth y ffordd arall o gwmpas, 905 00:50:58,000 --> 00:51:02,000 yr olaf i mewn yn y cyntaf allan. 906 00:51:02,000 --> 00:51:05,000 >> Nawr, peidiwch unrhyw senarios dod i'r cof lle cael pentwr 907 00:51:05,000 --> 00:51:08,000 strwythur data lle mae gennych yr eiddo hwnnw 908 00:51:08,000 --> 00:51:13,000 yr olaf mewn, cyntaf allan, mewn gwirionedd yn gymhellol? 909 00:51:13,000 --> 00:51:16,000 Yw hynny'n beth da? Yw hynny'n beth drwg? 910 00:51:16,000 --> 00:51:19,000 Mae'n bendant yn beth drwg os nad yw'r hambyrddau i gyd yn union yr un fath 911 00:51:19,000 --> 00:51:21,000 ac roedden nhw i gyd liwiau arbennig gwahanol neu whatnot, 912 00:51:21,000 --> 00:51:24,000 ac mae'r lliw rydych ei eisiau yw yr holl ffordd ar y gwaelod. 913 00:51:24,000 --> 00:51:26,000 Wrth gwrs, ni allwch gael y heb ymdrech fawr. 914 00:51:26,000 --> 00:51:28,000 Mae'n rhaid i chi ddechrau o'r brig ac yn gweithio eich ffordd i lawr. 915 00:51:28,000 --> 00:51:31,000 Yn yr un modd, beth os ydych yn un o'r bechgyn hyn yn fan 916 00:51:31,000 --> 00:51:34,000 sy'n aros i fyny drwy'r nos yn ceisio cael iPhone a llinellau i fyny 917 00:51:34,000 --> 00:51:36,000 mewn lle fel hyn? 918 00:51:36,000 --> 00:51:40,000 Oni fyddai'n braf pe y siop Apple 919 00:51:40,000 --> 00:51:42,000 Roedd pentwr strwythur data? 920 00:51:42,000 --> 00:51:44,000 Yay? Nay? 921 00:51:44,000 --> 00:51:47,000 Mae'n unig yn dda ar gyfer y bobl sy'n dangos i fyny ar y funud olaf bosibl 922 00:51:47,000 --> 00:51:50,000 ac yna yn cael dynnu oddi ar y ciw. 923 00:51:50,000 --> 00:51:52,000 Ac yn wir, y ffaith fy mod yn dewis gwneud hynny i ddweud ciw 924 00:51:52,000 --> 00:51:56,000 mewn gwirionedd yn gyson â'r hyn y byddem yn galw y math hwn o strwythur data, 925 00:51:56,000 --> 00:51:59,000 un yn realiti lle mae'r gorchymyn yn mater, 926 00:51:59,000 --> 00:52:02,000 ac rydych am i'r un cyntaf i mewn i fod yr un cyntaf allan 927 00:52:02,000 --> 00:52:04,000 os mai dim ond er mwyn tegwch dynol. 928 00:52:04,000 --> 00:52:07,000 Byddwn yn gyffredinol, yn galw bod data ciw strwythur. 929 00:52:07,000 --> 00:52:11,000 >> Mae'n troi allan ar wahân rhestrau cysylltiedig, gallwn ddechrau defnyddio'r un syniadau sylfaenol 930 00:52:11,000 --> 00:52:15,000 a dechrau creu mathau newydd a gwahanol o atebion i broblemau. 931 00:52:15,000 --> 00:52:19,000 Er enghraifft, yn achos pentwr, gallai ydym yn eu cynrychioli pentwr 932 00:52:19,000 --> 00:52:22,000 defnyddio strwythur data fel hyn, byddwn yn cynnig. 933 00:52:22,000 --> 00:52:26,000 Yn yr achos hwn, rwyf wedi datgan yn strwythur, ac yr wyf wedi dweud tu mewn i'r strwythur hwn 934 00:52:26,000 --> 00:52:30,000 llu o rifau ac yna faint amrywiol o'r enw, 935 00:52:30,000 --> 00:52:33,000 ac yr wyf yn mynd i alw y peth hyn pentwr. 936 00:52:33,000 --> 00:52:35,000 Yn awr, pam mae hyn yn gweithio mewn gwirionedd? 937 00:52:35,000 --> 00:52:43,000 Yn achos pentwr, gallwn dynnu hyn yn effeithiol ar y sgrin fel arae. 938 00:52:43,000 --> 00:52:47,000 Dyma fy pentwr. Dyna yw fy rhifau. 939 00:52:47,000 --> 00:52:50,000 A byddwn yn tynnu nhw fel hyn, mae hyn, hyn, hyn, hyn. 940 00:52:50,000 --> 00:52:53,000 Ac yna gennyf rywfaint o ddata aelod arall yma, 941 00:52:53,000 --> 00:52:58,000 a elwir yn maint, felly mae hwn yn maint, ac mae hyn yn rhifau, 942 00:52:58,000 --> 00:53:02,000 ac ar y cyd, y iPad cyfan yma yn cynrychioli un strwythur stac. 943 00:53:02,000 --> 00:53:07,000 Yn awr, yn ddiofyn, maint wedi yn ôl pob tebyg yn rhaid i gael ei ymgychwyn i 0, 944 00:53:07,000 --> 00:53:11,000 a beth sydd y tu mewn o'r holl amrywiaeth o rifau i ddechrau 945 00:53:11,000 --> 00:53:14,000 tro cyntaf i mi dyrannu arae? 946 00:53:14,000 --> 00:53:16,000 Garbage. Pwy a wyr? Ac nid yw'n mewn gwirionedd ots. 947 00:53:16,000 --> 00:53:20,000 Nid oes ots os yw hyn yn 1, 2, 3, 4, 5, yn gyfan gwbl ar hap 948 00:53:20,000 --> 00:53:25,000 trwy lwc ddrwg storio yn fy strwythur oherwydd cyn belled gan fy mod yn gwybod bod y maint y pentwr 949 00:53:25,000 --> 00:53:29,000 yw 0, yna yr wyf yn gwybod programmatically, peidiwch â edrych ar unrhyw un o'r elfennau yn y rhesi. 950 00:53:29,000 --> 00:53:31,000 Does dim ots beth sydd yno. 951 00:53:31,000 --> 00:53:34,000 Peidiwch ag edrych arnynt, fel y byddai goblygiadau o faint o 0. 952 00:53:34,000 --> 00:53:38,000 >> Ond mae'n debyg nawr rwy'n mynd yn ei flaen a rhoi rhywbeth i mewn i'r pentwr. 953 00:53:38,000 --> 00:53:42,000 Wyf i am osod y rhif 5, felly yr wyf yn rhoi rhif 5 yma, 954 00:53:42,000 --> 00:53:45,000 ac yna beth ydw i'n ei roi i lawr yma? 955 00:53:45,000 --> 00:53:48,000 Nawr byddwn yn mewn gwirionedd yn rhoi i lawr 1 ar gyfer y maint, 956 00:53:48,000 --> 00:53:50,000 ac yn awr y pentwr o faint 1. 957 00:53:50,000 --> 00:53:53,000 Beth os byddaf yn mynd yn ei flaen a rhowch y rhif, gadewch i ni ddweud, 7 nesaf? 958 00:53:53,000 --> 00:53:57,000 Mae hyn wedyn yn cael ei ddiweddaru i 2, ac yna byddwn yn gwneud 9, 959 00:53:57,000 --> 00:54:02,000 ac yna mae hyn yn cael ei ddiweddaru i 3. 960 00:54:02,000 --> 00:54:05,000 Ond y nodwedd ddiddorol yn awr y stac yw bod 961 00:54:05,000 --> 00:54:09,000 Rwy'n fod i ddileu'r pa elfen os ydw i eisiau i pop 962 00:54:09,000 --> 00:54:12,000 rhywbeth oddi ar y simnai, fel petai? 963 00:54:12,000 --> 00:54:14,000 Byddai 9 yn y peth cyntaf i fynd. 964 00:54:14,000 --> 00:54:18,000 Sut dylai'r darlun newid os ydw i am i pop elfen oddi ar y pentwr, 965 00:54:18,000 --> 00:54:20,000 yn debyg iawn fel hambwrdd yn Mather? 966 00:54:20,000 --> 00:54:22,000 Yeah. >> [Myfyrwyr] maint Set i 2. 967 00:54:22,000 --> 00:54:27,000 Yn union, i gyd gallaf ei wneud yw gosod maint i 2, a beth ddylwn i ei wneud ag arae? 968 00:54:27,000 --> 00:54:29,000 Nid oes gennyf i wneud unrhyw beth. 969 00:54:29,000 --> 00:54:32,000 Gallwn, dim ond i fod rhefrol, rhowch o 0 yno neu -1 neu rywbeth i ddynodi 970 00:54:32,000 --> 00:54:34,000 nad yw hyn yn werth legit, ond does dim ots oherwydd 971 00:54:34,000 --> 00:54:37,000 Gallaf gofnodi y tu allan i'r amrywiaeth ei hun pa mor hir mae'n 972 00:54:37,000 --> 00:54:41,000 er fy mod yn gwybod dim ond yn edrych ar y ddau elfen gyntaf yn y casgliad. 973 00:54:41,000 --> 00:54:47,000 Yn awr, os byddaf yn mynd ac yn ychwanegu rhif 8 i'r array, sut mae'r llun yn newid nesaf? 974 00:54:47,000 --> 00:54:50,000 Mae hyn yn dod yn 8, ac mae hyn yn dod yn 3. 975 00:54:50,000 --> 00:54:52,000 Rwy'n torri corneli ychydig yma. 976 00:54:52,000 --> 00:54:56,000 Nawr mae gennym 5, 7, 8, ac rydym yn ôl i faint o 3. 977 00:54:56,000 --> 00:54:58,000 Mae hyn yn eithaf syml i'w gweithredu, 978 00:54:58,000 --> 00:55:06,000 ond pan rydym yn mynd i difaru y penderfyniad hwn dylunio? 979 00:55:06,000 --> 00:55:09,000 Pryd mae pethau'n dechrau mynd yn iawn, iawn o'i le? Yeah. 980 00:55:09,000 --> 00:55:11,000 [Ymateb y myfyrwyr Anghlywadwy] 981 00:55:11,000 --> 00:55:13,000 Pan fyddwch eisiau mynd yn ôl a chael yr elfen gyntaf i chi roi i mewn 982 00:55:13,000 --> 00:55:18,000 >> Mae'n troi allan yma hyd yn oed er bod pentwr yn arae o dan y cwfl, 983 00:55:18,000 --> 00:55:21,000 y strwythurau data rydym wedi dechrau siarad am hefyd yn a elwir yn gyffredinol fel 984 00:55:21,000 --> 00:55:25,000 strwythurau data haniaethol lle sut y maent yn gweithredu 985 00:55:25,000 --> 00:55:27,000 yn hollol ar wahân i'r pwynt. 986 00:55:27,000 --> 00:55:31,000 Mae strwythur data fel pentwr i fod i ychwanegu cefnogaeth 987 00:55:31,000 --> 00:55:35,000 gweithrediadau fel gwthio, sy'n gwthio hambwrdd ar y pentwr, 988 00:55:35,000 --> 00:55:39,000 a phop, sy'n cael gwared elfen o'r pentwr, a dyna ni. 989 00:55:39,000 --> 00:55:43,000 Os ydych yn i lawrlwytho rhywun arall cod sydd ar waith eisoes 990 00:55:43,000 --> 00:55:46,000 y peth hyn a elwir yn stac, byddai'r person wedi ysgrifennu 991 00:55:46,000 --> 00:55:49,000 Dim ond dwy swyddogaeth i chi, gwthio a pop, y mae ei unig ddiben mewn bywyd 992 00:55:49,000 --> 00:55:51,000 fyddai i wneud yn union hynny. 993 00:55:51,000 --> 00:55:54,000 Chi neu ef neu hi sy'n gweithredu y rhaglen 994 00:55:54,000 --> 00:55:58,000 byddai wedi bod yn hollol yr un i benderfynu sut i weithredu 995 00:55:58,000 --> 00:56:00,000 semanteg gwthio a neidio o dan y cwfl 996 00:56:00,000 --> 00:56:03,000 neu ymarferoldeb gwthio a neidio. 997 00:56:03,000 --> 00:56:07,000 Ac yr wyf wedi gwneud penderfyniad braidd yn shortsighted yma 998 00:56:07,000 --> 00:56:10,000 drwy weithredu fy pentwr gyda'r strwythur data syml pam? 999 00:56:10,000 --> 00:56:12,000 Pryd mae hyn yn strwythur data egwyl? 1000 00:56:12,000 --> 00:56:18,000 Ar ba bwynt yn rhaid i mi ddychwelyd gwall pan fydd y defnyddiwr yn galw gwthio, er enghraifft? 1001 00:56:18,000 --> 00:56:20,000 [Myfyrwyr] Os nad oes mwy o le. 1002 00:56:20,000 --> 00:56:23,000 Yn union, os oes dim mwy o le, os wyf wedi rhagori ar allu, 1003 00:56:23,000 --> 00:56:27,000 sydd i gyd gapiau oherwydd mae'n awgrymu ei fod yn rhyw fath o gyson byd-eang. 1004 00:56:27,000 --> 00:56:30,000 Wel, yna Im 'jyst yn mynd i gael i ddweud, "Mae'n ddrwg gennym, ni allaf gwthio arall gwerth 1005 00:56:30,000 --> 00:56:32,000 ar y pentwr, "yn debyg iawn fel yn Mather. 1006 00:56:32,000 --> 00:56:36,000 >> Ar ryw bwynt, maen nhw'n mynd i gyrraedd y rhan uchaf y cabinet bach. 1007 00:56:36,000 --> 00:56:39,000 Does dim mwy o le neu allu yn y stac, a phryd hynny mae rhyw fath o wall. 1008 00:56:39,000 --> 00:56:42,000 Mae'n rhaid iddyn nhw roi'r elfen yn rhywle arall, yr hambwrdd yn rhywle arall, 1009 00:56:42,000 --> 00:56:44,000 neu unrhyw le o gwbl. 1010 00:56:44,000 --> 00:56:47,000 Yn awr, gyda ciw, gallem weithredu ychydig yn wahanol. 1011 00:56:47,000 --> 00:56:50,000 Mae ciw yn ychydig yn wahanol yn hynny o dan y cwfl, y gellir ei weithredu 1012 00:56:50,000 --> 00:56:54,000 fel array, ond pam, yn yr achos hwn, a wyf yn cynnig 1013 00:56:54,000 --> 00:56:59,000 hefyd gael elfen pen yn cynrychioli pen y rhestr, 1014 00:56:59,000 --> 00:57:06,000 flaen y rhestr, y person cyntaf yn unol yn y siop Apple, yn ogystal â faint? 1015 00:57:06,000 --> 00:57:14,000 Pam mae angen darn ychwanegol o ddata yma? 1016 00:57:14,000 --> 00:57:16,000 Meddyliwch yn ôl at yr hyn rhifau yn 1017 00:57:16,000 --> 00:57:18,000 os ydw i wedi tynnu fel a ganlyn. 1018 00:57:18,000 --> 00:57:21,000 Debyg mae hyn yn bellach yn ciw yn hytrach na simnai, 1019 00:57:21,000 --> 00:57:24,000 y gwahaniaeth yw-yn union fel y Apple siop-ciw yn deg. 1020 00:57:24,000 --> 00:57:27,000 Y person cyntaf yn unol ar ddechrau'r rhestr, rhif 5 yn yr achos hwn, 1021 00:57:27,000 --> 00:57:30,000 ef neu hi yn mynd i gael ei adael i mewn i'r siop gyntaf. 1022 00:57:30,000 --> 00:57:32,000 Gadewch i ni wneud hynny. 1023 00:57:32,000 --> 00:57:35,000 Gadewch i ni dybio bod hyn yn cyflwr fy ciw ar hyn o bryd, ac yn awr y siop Apple 1024 00:57:35,000 --> 00:57:39,000 agor, a'r person cyntaf, rhif 5, yn cael ei arwain i mewn i'r siop. 1025 00:57:39,000 --> 00:57:43,000 Sut ydw i'n newid y darlun yn awr yr wyf wedi dad-ciwio y person cyntaf 1026 00:57:43,000 --> 00:57:47,000 ar flaen y llinell? 1027 00:57:47,000 --> 00:57:50,000 Beth sy'n bod? >> [Myfyrwyr] Newid y ciw. 1028 00:57:50,000 --> 00:57:52,000 Newid y pennaeth, hynny 5 diflannu. 1029 00:57:52,000 --> 00:57:56,000 Mewn gwirionedd, mae'n fel pe-sut orau i wneud hyn? 1030 00:57:56,000 --> 00:58:00,000 Mewn gwirionedd, mae fel bod y boi yn diflannu. 1031 00:58:00,000 --> 00:58:03,000 Beth fyddai rhif 7 yn ei wneud mewn siop go iawn? 1032 00:58:03,000 --> 00:58:05,000 Byddent yn cymryd cam mawr ymlaen. 1033 00:58:05,000 --> 00:58:08,000 >> Ond beth ydym ni wedi dod i werthfawrogi pan ddaw i araeau 1034 00:58:08,000 --> 00:58:10,000 a symud pethau o gwmpas? 1035 00:58:10,000 --> 00:58:12,000 Dyna fath o wastraff o'ch amser, dde? 1036 00:58:12,000 --> 00:58:16,000 Pam mae'n rhaid i chi fod mor rhefrol mwyn cael y person cyntaf 1037 00:58:16,000 --> 00:58:21,000 ar ddechrau'r llinell yn gorfforol ddechrau'r darn o gof? 1038 00:58:21,000 --> 00:58:23,000 Mae hynny'n gwbl ddiangen. Pam? 1039 00:58:23,000 --> 00:58:26,000 Beth allwn i jyst yn cofio yn lle hynny? >> [Anghlywadwy ymateb y myfyrwyr] 1040 00:58:26,000 --> 00:58:30,000 Yn union, gallai Fi jyst yn cofio gyda'r pennaeth aelod ychwanegol data 1041 00:58:30,000 --> 00:58:34,000 sydd bellach yn bennaeth y rhestr bellach yn 0, yr oedd funud yn ôl. 1042 00:58:34,000 --> 00:58:39,000 Nawr, mae'n mewn gwirionedd y rhif 1. Yn y modd hwn, byddaf yn cael optimization bach. 1043 00:58:39,000 --> 00:58:44,000 Dim ond am fy mod i wedi dad-ciwio rhywun o linell ar ddechrau'r unol yn y siop Apple 1044 00:58:44,000 --> 00:58:47,000 nid yw'n golygu rhaid i bawb symud, a oedd yn galw i gof yn llawdriniaeth llinol. 1045 00:58:47,000 --> 00:58:50,000 Gallaf yn hytrach yn treulio amser yn gyson yn unig 1046 00:58:50,000 --> 00:58:53,000 ac yn eu cyflawni yna ymateb yn llawer cyflymach. 1047 00:58:53,000 --> 00:58:56,000 Ond mae'r pris rwy'n ei dalu yw beth i'w ennill y perfformiad ychwanegol 1048 00:58:56,000 --> 00:58:58,000 ac nid yn gorfod symud i bawb? 1049 00:58:58,000 --> 00:59:01,000 Yeah. >> [Anghlywadwy ymateb y myfyrwyr] 1050 00:59:01,000 --> 00:59:04,000 A all ychwanegu mwy o bobl, yn dda, bod problem yn orthogonal 1051 00:59:04,000 --> 00:59:07,000 at y ffaith nad ydym yn symud pobl o gwmpas. 1052 00:59:07,000 --> 00:59:11,000 Mae'n dal i fod yn array, felly a ydym yn symud pawb neu beidio- 1053 00:59:11,000 --> 00:59:13,000 oh, yr wyf yn gweld beth ydych yn ei olygu, iawn. 1054 00:59:13,000 --> 00:59:16,000 A dweud y gwir, yr wyf yn cytuno â'r hyn yr ydych yn ei ddweud ei fod yn bron fel pe 1055 00:59:16,000 --> 00:59:19,000 ni fyddwn byth yn yn awr yn mynd i ddefnyddio'r cychwyn y casgliad anymore 1056 00:59:19,000 --> 00:59:22,000 oherwydd os byddaf yn dileu 5, yna byddaf yn ei ddileu 7. 1057 00:59:22,000 --> 00:59:24,000 Ond dim ond rhoi pobl ar y dde. 1058 00:59:24,000 --> 00:59:28,000 >> Mae'n teimlo fel mod i'n gwastraffu gofod, ac yn y pen draw fy ciw ymddatod i ddim o gwbl, 1059 00:59:28,000 --> 00:59:31,000 er mwyn i ni dim ond cael pobl cofleidiol, 1060 00:59:31,000 --> 00:59:35,000 a gallem feddwl am y casgliad mewn gwirionedd fel rhyw fath o strwythur cylchlythyr, 1061 00:59:35,000 --> 00:59:38,000 ond rydym yn defnyddio'r hyn gweithredwr yn C i wneud y math yna o cofleidiol? 1062 00:59:38,000 --> 00:59:40,000 [Ymateb y myfyrwyr Anghlywadwy] >> Y gweithredwr modwlo. 1063 00:59:40,000 --> 00:59:43,000 Byddai'n blino ychydig i feddwl yn ofalus sut ydych chi'n ei wneud y cofleidiol, 1064 00:59:43,000 --> 00:59:46,000 ond gallem ei wneud, ac y gallem ddechrau rhoi pobl yn yr hyn a arferai fod yn y tu blaen y llinell, 1065 00:59:46,000 --> 00:59:52,000 ond rydym yn unig cofio gyda newidyn hwn pennaeth sydd bennaeth gwirioneddol y llinell mewn gwirionedd. 1066 00:59:52,000 --> 00:59:57,000 Beth os, yn hytrach, ein nod yn y pen draw, fodd bynnag, 1067 00:59:57,000 --> 01:00:00,000 oedd edrych i fyny niferoedd, fel y gwnaethom yma ar y llwyfan gyda Anita, 1068 01:00:00,000 --> 01:00:02,000 ond mae gwir am gael y gorau o'r holl fyd? 1069 01:00:02,000 --> 01:00:05,000 Rydym am soffistigedig yn fwy na amrywiaeth yn caniatáu 1070 01:00:05,000 --> 01:00:09,000 oherwydd ein bod am i'r gallu i dyfu yn ddeinamig y strwythur data. 1071 01:00:09,000 --> 01:00:12,000 Ond nid ydym am gael troi at rywbeth yr ydym yn nodi 1072 01:00:12,000 --> 01:00:15,000 nid yn y ddarlith gyntaf yn algorithm gorau posibl, 1073 01:00:15,000 --> 01:00:17,000 bod y chwiliad llinol. 1074 01:00:17,000 --> 01:00:21,000 Mae'n troi allan y gallwch, mewn gwirionedd, yn cyflawni'r 1075 01:00:21,000 --> 01:00:24,000 neu o leiaf yn agos at cysonyn amser, lle rhywun fel Anita, 1076 01:00:24,000 --> 01:00:27,000 os bydd yn configures ei strwythur data beidio â fod yn rhestr cysylltiedig, 1077 01:00:27,000 --> 01:00:30,000 Nid yw peidio â bod yn stac, i fod yn ciw, gallai, mewn gwirionedd, 1078 01:00:30,000 --> 01:00:33,000 dod o hyd i strwythur data sy'n caniatáu iddi edrych i fyny pethau, 1079 01:00:33,000 --> 01:00:37,000 hyd yn oed geiriau, nid yn unig rhifau, yn yr hyn y byddwn yn galw cysonyn amser. 1080 01:00:37,000 --> 01:00:40,000 >> Ac yn wir, wrth edrych ymlaen, un o'r psets yn y dosbarth hwn bron bob amser yn 1081 01:00:40,000 --> 01:00:43,000 yn gweithredu gwiriwr sillafu, lle 1082 01:00:43,000 --> 01:00:46,000 byddwn yn rhoi chi eto rhai geiriau 150,000 Saesneg a'r nod yw 1083 01:00:46,000 --> 01:00:51,000 lwytho rhai i mewn cof ac yn gyflym yn gallu ateb cwestiynau ar y ffurflen 1084 01:00:51,000 --> 01:00:54,000 yn y gair hwn sillafu'n gywir? 1085 01:00:54,000 --> 01:00:58,000 A fyddai'n wir yn sugno os bu'n rhaid i chi ailadrodd drwy bob 150,000 o eiriau i ateb hynny. 1086 01:00:58,000 --> 01:01:02,000 Ond, mewn gwirionedd, byddwn yn gweld y gallwn wneud hynny mewn amser iawn, yn gyflym iawn. 1087 01:01:02,000 --> 01:01:06,000 Ac mae'n mynd i olygu rhywbeth gweithredu o'r enw tabl hash, 1088 01:01:06,000 --> 01:01:09,000 ac er ar yr olwg gyntaf y peth hyn a elwir yn tabl hash yn mynd i 1089 01:01:09,000 --> 01:01:12,000 gadewch i ni gyflawni'r rhain amseroedd ymateb cyflym super, 1090 01:01:12,000 --> 01:01:18,000 mae'n troi allan bod mewn gwirionedd yn broblem. 1091 01:01:18,000 --> 01:01:23,000 Pan ddaw amser i weithredu y peth hyn a elwir yn-unwaith eto, fy mod yn gwneud hynny eto. 1092 01:01:23,000 --> 01:01:25,000 Fi yw'r unig un yma. 1093 01:01:25,000 --> 01:01:28,000 Pan ddaw amser i weithredu'r peth hyn a elwir tabl hash, 1094 01:01:28,000 --> 01:01:30,000 rydym yn mynd i gael i wneud penderfyniad. 1095 01:01:30,000 --> 01:01:32,000 Sut y dylai fawr y peth hyn mewn gwirionedd fod? 1096 01:01:32,000 --> 01:01:36,000 A phan fyddwn yn dechrau niferoedd mewnosod i mewn i hyn tabl hash, 1097 01:01:36,000 --> 01:01:38,000 sut ydym yn mynd i'w storio yn y fath fodd 1098 01:01:38,000 --> 01:01:42,000 y gallwn eu cael yn ôl allan mor gyflym ag y cawsom i mewn? 1099 01:01:42,000 --> 01:01:45,000 Ond byddwn yn gweld cyn bo hir bod y cwestiwn hwn o 1100 01:01:45,000 --> 01:01:48,000 pryd fydd pen-blwydd pawb yn y dosbarth fod yn eithaf bwys yn. 1101 01:01:48,000 --> 01:01:51,000 Mae'n troi allan bod yn yr ystafell hon, rydym wedi cael ychydig gannoedd o bobl, 1102 01:01:51,000 --> 01:01:56,000 felly mae'r tebygolrwydd bod dau ohonom yn cael yr un pen-blwydd yn ôl pob tebyg yn eithaf uchel. 1103 01:01:56,000 --> 01:01:58,000 Beth os nad oedd ond 40 ohonom yn yr ystafell hon? 1104 01:01:58,000 --> 01:02:02,000 Beth yw'r tebygolrwydd o ddau o bobl yn cael yr un pen-blwydd? 1105 01:02:02,000 --> 01:02:04,000 [Mae myfyrwyr yn] dros 50%. 1106 01:02:04,000 --> 01:02:06,000 Yeah, roedd dros 50%. Yn wir, yr wyf hyd yn oed yn dod â siart. 1107 01:02:06,000 --> 01:02:08,000 Mae'n troi allan-ac mae hyn yn wir dim ond gipolwg ymlaen preview- 1108 01:02:08,000 --> 01:02:12,000 os oes dim ond 58 ohonom yn yr ystafell hon, y tebygolrwydd o 2 ohonom 1109 01:02:12,000 --> 01:02:16,000 cael yr un pen-blwydd yn hynod o uchel, bron i 100%, 1110 01:02:16,000 --> 01:02:20,000 ac mae hynny'n mynd i achosi criw cyfan o brifo i ni ar ddydd Mercher. 1111 01:02:20,000 --> 01:02:24,000 >> Gyda dweud hynny, gadewch i ni ohirio yma. Byddwn yn eich gweld ar ddydd Mercher. 1112 01:02:24,000 --> 01:02:28,000 [Cymeradwyaeth] 1113 01:02:28,000 --> 01:02:30,000 [CS50.TV]