[Powered by Google Translate] [Wythnos 6]
[David J. Malan] [Harvard University]
[Mae hyn yn CS50.] [CS50.TV]
>> Mae hyn yn CS50, ac mae hyn yn dechrau Wythnos 6,
felly ychydig o offer newydd bellach ar gael i chi fanteisio ar,
y cyntaf a elwir yn CS50 Style.
Odds yw os nad ydych chi fel fi neu unrhyw un o'r cymrodyr addysgu,
eich bod wedi gweld yn ôl pob tebyg rhaglen y mae ei arddull yn edrych rhywbeth bach fel hyn.
Efallai y byddwch yn dechrau torri rhai corneli yn hwyr yn y nos, neu fe fyddwch yn delio ag ef yn ddiweddarach,
ac yna TF or CA dod drosodd yn ystod oriau swyddfa.
Yna, mae'n anodd i ni eu darllen.
Wel, mae'r cod yn syntactically gywir, a bydd yn llunio, a bydd yn rhedeg mewn gwirionedd.
Ond nid yw'n sicr o 5 ar gyfer arddull.
>> Ond yn awr, os ydym yn mynd i mewn i'r cyfeiriadur yma-
ac yn sylwi bod gennyf conditions2.c-
ac yr wyf hidla hon archa newydd, style50, ar y conditions2.c ffeil, Mewnbynnu,
sylwi ei fod yn fy hysbysu ei fod wedi bod yn stylized.
Gedit sylwi bod y ffeil wedi cael ei newid ar ddisg,
ac os cliciwch wyf reload, yr holl broblemau eich eu hawtomeiddio yn awr.
[Cymeradwyaeth]
Dyna un o'r pethau a wnaethom y penwythnos hwn.
Sylweddoli ei fod yn amherffaith oherwydd bod rhai cod
y ni fydd yn gallu stylize berffaith,
ond yn sylweddoli hyn yn awr yn offeryn y gallwch fanteisio ar
os mai dim ond i dacluso rhai o'r braces yn fwy errantly gosod cyrliog ac yn y blaen.
>> Ond yn fwy grymus yn awr yw CS50 Gwirio.
Gyda CS50 Gwirio, alli 'n weithredol wneud y profion cywirdeb un
ar eich cod eich hun bod y cymrodyr addysgu yn gallu gwneud hynny.
Mae hwn yn gorchymyn cyfleustodau llinell sy'n dod yn awr yn y peiriant
cyn gynted ag y byddwch yn gwneud update50 fel y
pset 4 manylebau, ac rydych yn ei ddefnyddio yn y bôn fel hyn.
Rydych yn rhedeg y check50 gorchymyn.
Yna byddwch yn mynd heibio mewn llinell orchymyn ddadl, neu'n fwy cyffredinol a elwir yn newid neu faner.
Yn gyffredinol, pethau sydd cysylltnodau yn cael eu galw yn newid
i orchymyn rhaglen llinell, felly-c yn nodi
y gwiriadau yr ydych am ei redeg.
>> Mae'r profion yr ydych am redeg yn cael eu nodi unigryw gan y llinyn,
2012/pset4/resize.
Mewn geiriau eraill, dyna dim ond llinyn fympwyol ond unigryw
ein bod yn defnyddio i adnabod unigryw profion cywirdeb 4 pset yn.
Ac yna eich bod yn nodi rhestr o le wahanu o'r ffeiliau yr ydych am lwytho
i CS50 Gwirio i'w dadansoddi.
Er enghraifft, os byddaf yn mynd i mewn i fy ateb yma am resize.c-
gadewch i mi agor terfynell fwy ffenestr-
ac rwy'n mynd yn ei flaen ac yn rhedeg gadewch i ni ddweud check50-c 2012/pset4/resize,
ac yna rwy'n mynd yn ei flaen ac yn nodi enwau'r ffeiliau,
resize.c, a tharo yna Enter, mae'n cywasgu,
mae'n Llwythiadau, mae'n gwirio, a Fi jyst methu criw cyfan o brofion.
Mae'r un mewn coch ar y chwith uchaf yn dweud bod resize.c a bmp yn bodoli.
Dyna oedd y prawf. Dyna oedd y cwestiwn a ofynnwyd.
Ac mae'n anhapus oherwydd bod yr ateb yn anghywir.
Mae'r testun gwyn isod y mae'n ei ddweud disgwylir bmp.h i fodoli, a bod yn syml fy fai.
Anghofiais i lwytho, felly mae angen i mi lwytho y ddwy ffeil, cafodd yr
resize.c a bmp.h.
Ond yn awr sylwi ar yr holl brofion eraill yn felyn oherwydd nad ydynt wedi rhedeg,
ac felly yr wyneb sy'n gwenu yn fertigol oherwydd ei fod yn Na llon na lleddf,
ond rhaid inni wneud iawn y mater hwnnw mewn coch cyn y bydd y gwiriadau eraill redeg.
>> Gadewch i mi atgyweiria hon.
Gadewch i mi chwyddo allan ac ailgynnal hyn, y tro hwn gyda bmp.h hefyd
ar y llinell orchymyn, Mewnbynnu, ac yn awr os aiff popeth yn iawn,
mae'n mynd i wirio ac yna dychwelyd o ganlyniad i-dal eich anadl-
holl gwyrdd, sy'n golygu fy mod i'n gwneud yn dda iawn ar pset 4 i'r graddau.
Gallwch weld a chasglu o'r testun disgrifiadol yma
yn union yr hyn yr ydym brofi.
Rydym yn profi gyntaf yn y ffeiliau yn bodoli?
Yna byddwn yn profi yn Llunio resize.c?
Yna rydym yn profi nad yw'n newid maint a BMP 1x1-picsel pan n, y ffactor newid maint, yw 1.
Yn awr, os nad oes gennych syniad beth yw n, byddwch unwaith y byddwch yn plymio i mewn i pset 4,
ond yn syml, yn bwyll gwirio i wneud yn siŵr nad ydych chi'n newid maint
delwedd o gwbl os yw'r ffactor newid maint yw 1.
Os, ar y llaw arall, mae'n newid maint picsel 1x1 1x1 i pixel BMP i 2x2 yn gywir
pan n yw 2, ac yna yn yr un modd, fy ffurfio yn unol â hynny.
>> Yn fyr, mae hyn yn golygu i, un, yn cymryd y groesfan yn y bysedd
allan o'r hafaliad cywir cyn i chi gyflwyno eich pset.
Byddwch yn gwybod yn union beth fydd eich TF gwybod yn fuan
pan fyddwch yn mynd ati i gyflwyno rhai o'r setiau hyn problem,
a hefyd y cymhelliant addysgol yw ein bod yn rhoi
y cyfle o'ch blaen felly pan fyddwch yn gwybod a priori
fod yna chwilod yn eich cod a phrofion nad ydynt yn cael eu pasio,
gallwch roi mewn mwy o amser yn effeithiol ymlaen llaw i ddatrys y problemau hynny
yn hytrach nag yn colli pwyntiau, cael adborth gan eich TF,
ac yna fynd, "Ahh," fel dylwn fod wedi cyfrifedig hynny.
Nawr o leiaf mae 'na offeryn i helpu chi i ddod o hyd i hynny.
Dyw hi ddim yn mynd i dynnu sylw lle y byg yn, ond bydd yn dweud wrthych
beth yn nodweddiadol ohono.
>> Yn awr yn sylweddoli nad yw'r profion yn gyflawn mohoni.
Dim ond oherwydd eich bod yn cael sgrin lawn o wyrdd wynebau hapus
nid yw'n golygu eich cod yn berffaith, ond mae'n golygu
ei fod wedi pasio profion penodol a ragnodir gan y fanyleb.
Weithiau, ni fyddwn yn rhyddhau sieciau.
Er enghraifft, whodunit, un o'r agweddau ar pset 4,
yn fath o siomedig os byddwn yn rhoi i chi
yr ateb ynghylch yr hyn y mae, ac mae nifer o ffyrdd i ddatgelu
pwy yw'r person sydd yn y sŵn coch.
Bydd y fanyleb bob amser yn nodi yn y dyfodol ar gyfer ymlaen pset 5
pa wiriadau bodoli ar eich cyfer chi.
Byddwch yn sylwi mae hyn yn URL gwyn ar y gwaelod.
Am y tro, mae hyn yn unig allbwn diagnostig.
Os byddwch yn ymweld â'r URL, byddwch yn cael criw cyfan o gwallgof, negeseuon cryptig
bod croeso i chi edrych drwy, ond mae'n bennaf ar gyfer y staff
fel y gallwn wneud diagnosis a dadfygio bugs yn check50 ei hun.
>> Heb oedi, gadewch i ni symud ymlaen i ble yr ydym gadael i ffwrdd.
CS50 llyfrgell rydym yn cymryd yn ganiataol ers rhai wythnosau,
ond yna yr wythnos diwethaf, rydym wedi dechrau plicio yn ôl un o haenau ohono.
Rydym yn dechrau rhoi o'r neilltu llinyn o blaid yr hyn yn lle hynny?
[Mae myfyrwyr yn] Torgoch.
* Golosg, sydd wedi bod yn * torgoch i gyd y tro hwn,
ond yn awr nid ydym yn rhaid i esgus bod ei fod yn llinyn union fath data.
Yn hytrach, mae wedi bod yn gyfystyr o ryw fath ar gyfer * torgoch,
a llinyn yn ddilyniant o gymeriadau,
felly pam mae'n gwneud synnwyr i gynrychioli llinynnau fel * torgoch s?
Beth mae * torgoch cynrychioli yng nghyd-destun y cysyniad hwn o linyn?
Yeah. >> [Myfyrwyr] Y nod cyntaf.
Da, y nod cyntaf, ond ddim yn hollol y nod cyntaf.
Mae'ny-[Myfyrwyr] Cyfeiriad.
Da, y cyfeiriad y cymeriad cyntaf.
Y cyfan sydd yn angenrheidiol i gynrychioli llinyn yn cof cyfrifiadur
yn unig y cyfeiriad unigryw ei beit cyntaf.
Nid oes hyd yn oed yn rhaid i chi wybod pa mor hir mae'n
oherwydd sut mae modd i chi ffigur fod allan ddynamig?
[Myfyrwyr] hyd String.
Gallwch ffonio, hyd llinyn ardderchog, ond sut yn gweithio hyd llinyn?
Beth mae'n ei wneud? Yeah.
[Myfyrwyr] Parhewch nes i chi gael y cymeriad null.
Yeah, yn union, 'i jyst yn ailadrodd gyda dolen i, tra bod dolen,
beth bynnag o * hyd y diwedd, a'r diwedd yn cael ei gynrychioli
gan \ 0, cymeriad hyn a elwir yn NUL, NUL,
Ni ddylid drysu rhwng null, sy'n rhoi syniad,
a fydd yn dod i fyny mewn sgwrs eto heddiw.
>> Rydym yn plicio ôl haen o GetInt, ac yna rydym yn cymryd golwg ar GetString,
a dwyn i gof bod y ddau o'r swyddogaethau hynny, neu mewn gwirionedd,
GetString, yn defnyddio swyddogaeth benodol
mewn gwirionedd gramadegu, hynny yw, darllen neu ddadansoddi, fewnbwn y defnyddiwr.
A beth oedd y swyddogaeth newydd?
Scanf neu sscanf. Mae'n mewn gwirionedd yn dod mewn ychydig o flasau gwahanol.
Mae scanf, mae sscanf, mae fscanf.
Am y tro, fodd bynnag, gadewch i ni ganolbwyntio ar yr un mwyaf yn hawdd dangos,
a gadewch i mi fynd yn ei flaen ac yn agor i fyny yn y peiriant
ffeil fel hyn, scanf1.c.
Mae hon yn rhaglen syml super,
ond mae hynny'n gwneud rhywbeth nad ydym erioed wedi gwneud
heb gymorth y llyfrgell CS50.
Mae hyn yn cael yn int gan ddefnyddiwr. Sut mae'n gweithio?
Wel, yn llinell 16 yno,
sylwi ein bod yn datgan x int o'r enw, ac ar y pwynt hwn yn y stori,
beth yw gwerth x?
[Ymateb y myfyrwyr Anghlywadwy]
[David M.] Iawn, pwy a ŵyr, rhywfaint o werth garbage o bosibl, felly yn 17, rydym yn unig yn dweud wrth y defnyddiwr
yn rhoi i mi nifer, os gwelwch yn dda, ac 18 yn cam lle mae'n mynd yn ddiddorol.
Scanf ymddangos i fenthyg syniad o printf gan ei fod yn defnyddio'r rhain codau fformat mewn dyfynodau.
D% o gwrs rhif degol.
Ond pam ydw i'n mynd heibio i mewn ac x hytrach na dim ond x?
Mae'r cyntaf yn gywir. Yeah.
[Ymateb y myfyrwyr Anghlywadwy]
Yn union, os yw'r nod y rhaglen hon, fel y GetInt swyddogaeth ei hun,
yw i gael int gan y defnyddiwr gallaf drosglwyddo swyddogaethau
yr holl newidynnau rwyf eisiau, ond os nad wyf yn eu trosglwyddo trwy gyfeirio
neu drwy gyfeiriad neu drwy pwyntydd, i gyd gyfystyr ar gyfer dibenion heddiw,
yna swyddogaeth honno gan unrhyw allu i newid cynnwys y newidyn.
Byddai hyn yn pasio mewn copi yn union fel y fersiwn buggy o gyfnewidfa
ein bod wedi siarad am ychydig o weithiau yn awr.
>> Ond yn hytrach, trwy wneud & x, rwy'n llythrennol basio yn yr hyn?
[Myfyrwyr] Y cyfeiriad. >> Mae'r cyfeiriad x.
Mae fel tynnu llun map ar gyfer y swyddogaeth o'r enw scanf a dweud yma,
mae'r rhain yn gyfarwyddiadau i darn o gof yn y cyfrifiadur
y gallwch fynd storio rhywfaint o cyfanrif mewn
Er mwyn i sscanf yn hyn wneud hynny
pa weithredwr, pa ddarn o gystrawen a yw'n mynd i gael i ddefnyddio
er na allwn weld fod rhywun arall ysgrifennodd y swyddogaeth hon?
Mewn geiriau eraill - beth sy'n bod?
[Myfyrwyr] X darllen.
Mae mynd i fod rhywfaint o ddarllen, ond dim ond mewn perthynas â x yma.
Os scanf yn cael ei basio y cyfeiriad x,
syntactically, pa weithredwr yn rhwym i fodoli yn rhywle
tu mewn scanf weithrediad fel y scanf
mewn gwirionedd gall ysgrifennu rhif 2 i'r cyfeiriad hwnnw?
Yeah, felly mae'r *.
Dwyn i gof bod y * yw ein, gweithredwr dereference ei hanfod, golyga mynd yno.
>> Unwaith y byddwch wedi bod yn rhoi cyfeiriad, fel yn achos yma,
scanf yn ôl pob tebyg-os ydym mewn gwirionedd yn edrych o gwmpas ei cod ffynhonnell-
yn ei wneud * x neu'r hyn sy'n cyfateb mewn gwirionedd yn mynd i'r cyfeiriad hwnnw a rhoi rhywfaint o werth yno.
Yn awr, fel ar gyfer sut scanf yn cael mewnbwn gan y bysellfwrdd,
byddwn yn chwifio ein dwylo allan ar gyfer heddiw.
Dim ond cymryd yn ganiataol bod y system yn gweithredu yn caniatáu i sscanf i siarad
i'r bysellfwrdd y defnyddiwr, ond ar y pwynt hwn yn awr yn llinell 19,
pan fyddwn yn syml argraffu x, mae'n ymddangos i fod yn wir
bod scanf wedi rhoi int yn x.
Dyna'n union sut mae scanf yn gweithio, a dwyn i gof yr wythnos diwethaf
dyna yn union sut y GetString a GetInt a'i deulu arall o swyddogaethau
yn y pen draw yn gweithio, er bod amrywiad bach fel sscanf,
sy'n golygu sganio llinyn yn hytrach na'r bysellfwrdd.
Ond gadewch i ni edrych ar amrywiad bach o hyn.
Yn scanf2, Fi 'n weithredol sgriwio i fyny.
Beth sydd o'i le-a byddaf yn cuddio y sylwadau sy'n egluro cymaint-
beth sydd o'i le ar y rhaglen hon, fersiwn 2?
Byddwch mor dechnegol ag y bo modd y tro hwn.
Mae'n edrych yn eithaf da.
Mae'n mewnoli 'n glws, ond-
iawn, beth am gadewch i ni tocio i lawr i gwestiynau byrrach?
Llinell 16. Beth yw llinell 16 yn ei wneud yn Saesneg yn fanwl gywir ond technegol?
Cael ychydig yn lletchwith. Ie, Michael.
[Myfyrwyr] Mae'n pwyntio at y llythyr cyntaf mewn cyfres.
>> Iawn, yn agos. Gadewch i mi tweak bod ychydig bach.
Pwyntio at y llythyr cyntaf mewn cyfres, rydych yn datgan byffer amrywiol o'r enw
a fydd yn cyfeirio at y cyfeiriad cyntaf mewn cyfres,
neu yn hytrach, bydd hynny'n tywys yn fwy penodol i torgoch.
Hysbysiad nad yw'n mewn gwirionedd yn pwyntio unrhyw le oherwydd nad oes gweithredwr aseiniad.
Does dim arwydd gyfartal, felly cyfan yr ydym yn ei wneud yw dyrannu'r byffer elwir yn amrywiol.
Mae'n digwydd i fod yn 32 catiau am ei fod yn pwyntydd,
a chynnwys y byffer yn ôl pob tebyg yn y pen draw
bydd yn cynnwys cyfeiriad golosg, ond ar hyn o bryd, beth mae byffer yn ei gynnwys?
Dim ond rhai ffug, pwy a ŵyr, mae rhai werth garbage,
oherwydd nad ydym wedi ymgychwyn yn benodol, felly ni ddylem gymryd unrhyw beth.
Iawn, felly, yn awr llinell 17 yw-beth yw llinell 17 yn ei wneud?
Efallai fydd yn cynhesu hyn i fyny.
Mae'n argraffu llinyn, dde?
Mae'n printiau String os gwelwch yn dda.
>> Llinell 18 yn fath o cyfarwydd yn awr yn ein bod yn jyst yn gweld amrywiant o hyn
ond gyda chod fformat gwahanol, felly yn llinell 18,
rydym yn dweud wrth scanf yma yw cyfeiriad y darn o gof.
Rwyf am i chi ffonio mewn llinyn, awgrymir gan% s,
ond y broblem yw nad ydym wedi gwneud un neu ddau o bethau yma.
Beth yw un o'r problemau?
[Myfyrwyr] Mae'n ceisio dereference pwyntydd nwl.
Da, awgrymiadau null neu dim ond fel arall yn anhysbys.
Rydych yn dosbarthu scanf cyfeiriad, ond ydych newydd ei ddweud funud yn ôl
bod y cyfeiriad rhywfaint o werth garbage oherwydd nad oeddem mewn gwirionedd yn aseinio i unrhyw beth,
ac felly eich bod yn dweud scanf yn effeithiol yn mynd rhoi llinyn yma,
ond nid ydym yn gwybod lle yma eto yw,
felly nid ydym wedi dyrannu mewn gwirionedd cof ar gyfer strwythur.
Ar ben hynny, beth ydych chi hefyd hyd yn oed yn dweud scanf?
Tybiwch hwn yn ddarn o gof, ac nid oedd yn werth garbage,
ond nad ydych yn dal i dweud scanf rhywbeth pwysig.
[Myfyrwyr] Lle mewn gwirionedd yw, y ampersand.
Ampersand, felly yn yr achos hwn, ei fod yn iawn.
Oherwydd byffer yn cael ei ddatgan eisoes fel pwyntydd
gyda'r darn * o gystrawen, nid oes angen i ni ddefnyddio ampersand
oherwydd ei fod eisoes yn gyfeiriad, ond rwy'n credu fy mod glywed yma.
[Myfyrwyr] Pa mor fawr yw e?
Da, nid ydym yn dweud wrth scanf pa mor fawr y byffer yw,
sy'n golygu hyd yn oed os byffer oedd pwyntydd,
rydyn ni'n ei ddweud scanf, yn rhoi llinyn yma,
ond gallai yma yn 2 bytes, gallai fod yn 10 bytes, gallai fod yn megabeit.
Scanf Nid oes syniad, ac oherwydd mai dyma'r darn o cof
yn ôl pob tebyg, nid yw'n linyn eto.
Dim ond llinyn ar ôl i chi ysgrifennu cymeriadau a 0 \ at y darn o gof.
Nawr mae'n dim ond rhai darn o gof.
Ni fydd Scanf yn gwybod pryd i roi'r gorau i ysgrifennu i'r cyfeiriad hwnnw.
>> Os ydych yn cofio rhai enghreifftiau yn y gorffennol lle rwy'n deipio ar hap ar y bysellfwrdd
ceisio gorlif byffer, a buom yn siarad ar ddydd Gwener am yr union hynny.
Os yw gwrthwynebwr yn rywsut yn chwistrellu i mewn i'ch rhaglen gair llawer mwy
neu frawddeg neu ymadrodd yna rydych yn disgwyl allwch fynd
darn o gof, a all gael canlyniadau gwael,
fel cymryd dros y rhaglen gyfan ei hun.
Mae angen i ni atgyweiria hon rhywsut.
Gadewch i mi chwyddo a mynd i mewn i fersiwn 3 y rhaglen.
Dyna ychydig yn well.
Yn y fersiwn hwn, sylwi ar y gwahaniaeth.
Yn llinell 16, Im 'unwaith eto datgan byffer amrywiol o'r enw,
ond beth yw e nawr?
Mae'n amrywiaeth o 16 chars.
Mae hyn yn dda oherwydd mae hyn yn golygu y gall yr wyf yn awr ddweud scanf
yma yn ddarn go iawn o gof.
Gallwch bron feddwl am araeau fel awgrymiadau yn awr,
er nad ydynt yn cyfateb mewn gwirionedd.
Byddant yn ymddwyn yn wahanol mewn gwahanol gyd-destunau.
Ond mae'n sicr yn wir bod byffer gyfeirio
16 chars cyffiniol oherwydd dyna beth arae yn
ac mae wedi bod ers rhai wythnosau bellach.
>> Yma, yr wyf yn dweud scanf dyma darn o gof.
Y tro hwn, mewn gwirionedd mae'n darn o gof,
ond pam mae'r rhaglen yn dal i ecsploetio'n?
Beth sydd o'i le yn dal i?
Rwyf wedi dweud i mi 16 bytes ond-
[Myfyrwyr] Beth os ydynt yn teipio mewn mwy na 16?
Yn union, beth os yw'r defnyddiwr mathau mewn 17 cymeriadau neu gymeriadau 1700?
Yn wir, gadewch i ni weld os na allwn trip dros y camgymeriad yn awr.
Mae'n well, ond nid yn berffaith.
Gadewch i mi fynd yn ei flaen ac yn rhedeg yn gwneud scanf3 i lunio rhaglen hon.
Gadewch i mi redeg scanf3, String os gwelwch yn dda: helo, ac rydym yn ymddangos i fod yn iawn.
Gadewch i mi roi cynnig ar un ychydig yn hwy, helo yno.
Iawn, gadewch i ni yn helo 'na sut wyt ti heddiw, Enter.
Cael math o lwcus yma, gadewch i ni ddweud helo 'na sut wyt ti.
Damia.
Iawn, felly rydym yn got 'n ffodus. Gawn ni weld os na allwn atgyweiria hon.
Na, nid yw'n mynd i adael i mi chopïo.
Gadewch i ni geisio hyn eto.
Mae pob hawl, sefyll.
Byddwn yn gweld pa mor hir y gall yr wyf yn esgus i ganolbwyntio tra'n dal i wneud hyn.
Damia. Dyna yn hytrach briodol, mewn gwirionedd.
Dyna ni.
Pwynt a wnaed.
>> Mae hyn, codi cywilydd er ei bod hefyd yw, mae hefyd yn un o'r ffynonellau dryswch mawr
wrth ysgrifennu rhaglenni sy'n cael bygiau oherwydd eu bod yn amlygu eu hunain
dim ond unwaith mewn blwc weithiau.
Y realiti yw bod hyd yn oed os yw eich cod yn cael ei dorri yn gyfan gwbl,
efallai mai dim ond yn cael ei dorri yn gyfan gwbl unwaith yn tra
oherwydd weithiau, yn y bôn yr hyn sy'n digwydd yn y system dyrannu gweithredu
atgof ychydig yn fwy nag yr ydych ei angen mewn gwirionedd am ba bynnag reswm,
ac felly nid oes neb arall yn defnyddio'r cof dde ar ôl eich darn o 16 nod,
felly os byddwch yn mynd i 17, 18, 19, beth bynnag, nid yw'n mor bwysig â hynny.
Yn awr, y cyfrifiadur, hyd yn oed os nad yw'n damwain ar y pwynt hwnnw,
maes o law gallai defnyddio rhif beit 17 neu 18 neu 19 ar gyfer rhywbeth arall,
lle bwynt eich data eich bod yn rhoi yno, er rhy hir,
yn mynd i gael overwritten o bosibl gan ryw swyddogaeth arall.
Dyw hi ddim o reidrwydd yn mynd i aros yn gyfan,
ond ni fydd o reidrwydd yn achosi nam seg.
Ond yn yr achos hwn, yr wyf yn olaf darparu digon o gymeriadau
fy mod yn ei hanfod rhagori ar fy segment o gof, a Bam,
Dywedodd y system weithredu, "Mae'n ddrwg gennym, dyw hynny ddim yn wall da,."
>> A gadewch i ni weld nawr os hyn sy'n weddill yma yn fy cyfeiriadur-
sylwi bod gennyf y ffeil yma, craidd.
Sylwch fod hyn yn cael ei alw eto tomen craidd.
Ydyw yn y bôn ffeil sy'n cynnwys y cynnwys cof eich rhaglen
ar yr adeg y mae'n damwain,
a dim ond i roi cynnig ar ychydig o esiampl yma gadewch i mi fynd i mewn yma
a rhedeg gdb ar scanf3 ac yna pennu drydedd ddadl a elwir yn graidd,
ac yn sylwi yma os wyf yn rhestru'r cod,
byddwn yn gallu fel arfer gyda gdb i ddechrau cerdded drwy'r rhaglen hon,
a gallaf redeg a chyn gynted ag yr wyf taro-fel gyda'r gorchymyn cam yn gdb-
cyn gynted ag yr wyf yn cyrraedd y llinell a allai fod bygi ar ôl teipio mewn llinyn enfawr,
Byddaf yn gallu mewn gwirionedd yn ei adnabod yma.
Mwy o wybodaeth am hyn, fodd bynnag, yn adran o ran dadlwythiadau craidd
ac yn y blaen er mwyn i chi mewn gwirionedd yn procio o gwmpas tu mewn i'r domen craidd
ac yn gweld ar ba linell y rhaglen wedi methu chi.
Unrhyw gwestiynau yna ar awgrymiadau ac ar cyfeiriadau?
Oherwydd heddiw ymlaen, rydym yn mynd i ddechrau cymryd yn ganiataol bod y pethau hyn yn bodoli
ac rydym yn gwybod yn union beth ydynt.
Ydw.
>> [Myfyrwyr] Sut dod nad oedd gennych i roi ampersand nesaf at y rhan-
Da cwestiwn.
Sut dod nid oeddwn yn rhaid i roi ampersand nesaf at yr amrywiaeth cymeriad fel y gwneuthum o'r blaen
â'r rhan fwyaf o'n enghreifftiau?
Yr ateb byr yw araeau ychydig yn arbennig.
Gallwch bron meddwl byffer fel mewn gwirionedd fod yn gyfeiriad,
a dim ond fel y digwydd bod yn wir bod y nodiant braced sgwâr
yn gyfleustra fel y gallwn fynd i mewn braced 0, braced 1,
braced 2, heb orfod defnyddio'r nodiant *.
Dyna ychydig o gelwydd gwyn oherwydd araeau ac awgrymiadau
yn, mewn gwirionedd, ychydig yn wahanol, ond gallant yn aml ond nid bob amser yn cael ei defnyddio'n gyfnewidiol.
Yn fyr, pan swyddogaeth yn disgwyl pwyntydd i'r darn o gof,
gallwch naill ai ei drosglwyddo cyfeiriad a ddychwelwyd gan malloc,
ac fe welwn ni malloc eto cyn hir, neu gallwch ei drosglwyddo enw arae.
Nid oes rhaid i chi wneud ampersand gyda araeau oherwydd eu bod eisoes yn
yn y bôn yn hoffi cyfeiriadau.
Dyna un eithriad.
Y cromfachau sgwâr yn eu gwneud yn arbennig.
>> Allech chi roi ampersand nesaf at y byffer?
Nid yn yr achos hwn.
Ni fyddai hynny'n gweithio oherwydd, unwaith eto, yr achos hwn gornel
lle nad yw araeau yn eithaf mewn gwirionedd cyfeiriadau.
Ond byddwn yn dod yn ôl at hynny cyn hir gydag enghreifftiau eraill.
Gadewch i ni geisio datrys problem yma.
Mae gennym strwythur data yr ydym wedi bod yn defnyddio ers peth amser a elwir yn arae.
Achos ym mhwynt, dyna beth ydym yn unig gael.
Ond mae araeau cael rhywfaint o upsides ac anfanteision.
Araeau yn cael eu pam neis?
Beth un peth yr ydych yn hoffi i ba raddau rydych yn hoffi araeau-am araeau?
Beth gyfleus amdanyn nhw? Beth gymhellol?
Pam rydym yn eu cyflwyno yn y lle cyntaf?
Yeah.
[Myfyrwyr] Gallant storio llawer o ddata, ac nid oes rhaid i chi ddefnyddio peth cyfan.
Gallwch ddefnyddio adran.
Da, gydag amrywiaeth gallwch storio llawer o ddata,
ac nid oes o reidrwydd yn rhaid i chi ddefnyddio cyfan ohono, fel y gallwch overallocate,
a allai fod yn gyfleus os nad ydych yn gwybod ymlaen llaw faint o rywbeth i'w ddisgwyl.
>> GetString yn enghraifft berffaith.
GetString, a ysgrifennwyd gan i ni, nid oes syniad faint o chars i'w ddisgwyl,
felly mae'r ffaith y gallwn ddyrannu darnau o gof cyffiniol yn dda.
Araeau hefyd yn datrys problem gwelsom cwpl o wythnosau yn ôl, bellach yn
lle mae eich cod yn dechrau datganoli i fod yn rhywbeth chynllunio yn wael iawn.
Dwyn i gof bod yr wyf yn creu strwythur i fyfyrwyr o'r enw David,
ac yna a oedd mewn gwirionedd dewis arall, fodd bynnag,
i gael enw amrywiol o'r enw ac mae newidyn arall o'r enw, yr wyf yn meddwl, tŷ,
ac mae newidyn arall o'r enw ID oherwydd yn y stori Yna eisiau cyflwyno rhywbeth arall
Rob yn hoffi i mewn i'r rhaglen, felly, yna penderfynais aros funud,
Angen i mi ail-enwi y newidynnau.
Gadewch i ni alw fy name1, ID1, house1.
Gadewch i ni alw Rob yn name2, house2, ID2.
Ond yna arhoswch funud, beth am Tommy?
Yna cawsom tri newidyn mwy.
Rydym yn cyflwyno i rywun arall, pedair set o newidynnau.
Mae'r byd yn dechrau cael anniben yn gyflym iawn,
felly rydym yn cyflwyno structs, a beth sy'n grymus am strwythur?
Beth mae strwythur C gadael i chi ei wneud?
Mae'n lletchwith iawn heddiw.
Beth? >> [Anghlywadwy ymateb y myfyrwyr]
Yeah, yn benodol, typedef yn eich galluogi i greu math data newydd,
a strwythur, y gair allweddol strwythur, yn eich galluogi i grynhoi
darnau sy'n gysylltiedig yn gysyniadol o ddata at ei gilydd
ac wedi hynny eu galw rhywbeth fel myfyriwr.
>> Dyna oedd yn dda oherwydd erbyn hyn gallwn fodelu
math llawer mwy o gysyniadol gyson y syniad o fyfyriwr mewn newidyn
yn hytrach nag fympwyol gael un ar gyfer llinyn, un ar gyfer adnabod, ac yn y blaen.
Araeau yn braf oherwydd maent yn ein galluogi i ddechrau glanhau ein cod.
Ond beth yw anfantais bellach o amrywiaeth?
Ni all Beth allwch chi ei wneud? Yeah.
[Myfyrwyr] Mae'n rhaid i chi wybod pa mor fawr ydyw.
Mae'n rhaid i chi wybod pa mor fawr ydyw, felly mae'n fath o boen.
Bydd y rhai ohonoch sydd â phrofiad blaenorol rhaglennu yn gwybod bod mewn llawer o ieithoedd,
fel Java, gallwch ofyn i ddarn o gof, yn benodol array,
pa mor fawr ydych chi, gyda hyd, eiddo, fel petai, ac mae hynny'n gyfleus.
Yn C, ni allwch hyd yn oed ffonio strlen ar amrywiaeth generig
oherwydd strlen, fel y gair hwn yn awgrymu, dim ond ar gyfer llinynnau,
a gallwch chyfrif i maes y hyd llinyn oherwydd y confensiwn hwn ddynol
o gael 0 \, ond arae, yn fwy cyffredinol, yn unig yw darn o gof.
Os yw'n amrywiaeth o ints, nid oes yn mynd i fod rhywfaint o gymeriad arbennig
ar y diwedd aros i chi.
Mae'n rhaid i chi gofio hyd arae.
Anfantais arall arae codi'i phen yn GetString ei hun.
Beth arall Anfantais arae?
Syr, dim ond chi a fi heddiw.
[Ymateb y myfyrwyr Anghlywadwy] >> Mae'n beth?
Mae'n datgan ar y pentwr.
Iawn, datgan ar y pentwr. Pam na wnewch chi'n hoffi hynny?
[Myfyrwyr] Am ei fod yn cael ei ailddefnyddio.
Mae'n cael ei ailddefnyddio.
Iawn, os ydych yn defnyddio amrywiaeth i ddyrannu cof,
nad ydych yn gallu, er enghraifft, dychwelyd am ei fod ar y pentwr.
Iawn, mae hynny'n anfantais.
A beth am un arall gydag amrywiaeth?
Unwaith y byddwch yn dyrannu, rydych yn fath o sgriwio os oes angen mwy o le
na amrywiaeth wedi.
>> Yna, cyflwynodd ni, galw i gof, malloc, a roddodd i ni y gallu i ddeinamig ddyrannu cof.
Ond beth os ydym yn ceisio fyd hollol wahanol?
Beth os ydym yn awyddus i ddatrys rai o'r rheini y problemau
felly rydym yn lle hynny-fy pen wedi syrthio i gysgu yma-
beth os ydym yn hytrach eisiau yn y bôn greu byd sy'n mwyach fel hyn?
Mae hwn yn array, ac, wrth gwrs, y math hwn o gwaethygu ar ôl i ni gyrraedd diwedd y array,
ac yr wyf yn awr mwyach le ar gyfer un arall cyfanrif neu cymeriad arall.
Beth os ydym yn fath o preemptively ddweud yn dda, pam nad ydym yn ymlacio
gofyniad hwn bod pob un o'r darnau o gof fod yn gyffiniol gefn wrth gefn,
a pham nad ydynt, pan fyddaf angen int neu golosg,
dim ond rhoi i mi lle i un ohonynt?
A phan yr wyf angen un arall, yn rhoi i mi le arall,
a phan oeddwn angen un arall, yn rhoi i mi le arall.
Y fantais y mae yn awr yw bod os bydd rhywun arall
yn cymryd y cof dros yma, nid oes llawer mawr.
'N annhymerus' gymryd y darn ychwanegol o gof yma ac yna mae hyn yn un.
>> Yn awr, roedd y ddalfa yn unig yma yw bod hyn bron yn teimlo fel yr wyf wedi
criw cyfan o newidynnau gwahanol.
Mae hyn yn teimlo fel pum newidyn gwahanol o bosibl.
Ond beth os ydym yn dwyn syniad o dannau
lle rydym rywsut cysylltu'r pethau hyn at ei gilydd yn gysyniadol, a beth os wyf yn gwneud hyn?
Dyma fy saeth yn wael iawn tynnu.
Ond mae'n debyg fod pob un o'r darnau o gof
sylw at y ffaith i'r llall, ac mae hyn yn guy, nad oes ganddo frawd neu chwaer at ei hawl,
Nid oes gan saeth o'r fath.
Mae hyn yn mewn gwirionedd hyn a elwir yn rhestr cysylltiedig.
Mae hwn yn strwythur data newydd sy'n caniatáu i ni ddyrannu darn o gof,
yna un arall, yna un arall, yna arall, unrhyw adeg ydym am
yn ystod rhaglen, ac rydym yn cofio eu bod nhw i gyd rhywsut cysylltiedig
gan llythrennol gadwyno at ei gilydd, a gwnaethom hynny ddarluniadol yma gyda saeth.
Ond mewn cod, beth fyddai'r mecanwaith trwy y gallech rywsut gysylltu,
bron fel Scratch, un darn i un arall darn?
Gallem ddefnyddio pwyntydd, dde?
Gan fod mewn gwirionedd y saeth sy'n mynd o'r sgwâr uchaf ar y chwith,
gallai hyn guy yma i hwn, yn cynnwys tu mewn y sgwâr
nid dim ond rhai ints, nid dim ond rhai torgoch, ond beth os wyf mewn gwirionedd yn dyrannu
lle ychydig mwy fel hynny yn awr,
mhob un o fy darnau o gof, er bod hyn yn mynd i gostio i mi,
yn awr yn edrych ychydig yn fwy hirsgwar lle mae un o'r darnau o gof
yn cael ei ddefnyddio ar gyfer nifer, fel y rhif 1,
ac yna os yw hyn yn guy yn storio'r rhif 2,
y darn arall o gof ei ddefnyddio ar gyfer saeth,
neu fwy concretely, pwyntydd.
Ac siŵr fy mod yn storio'r rhif 3 dros yma tra byddaf yn defnyddio hyn i bwyntio at y dyn,
ac yn awr y boi, gadewch i ni Mae'n debyg mai dim ond am 3 darnau o'r fath o gof.
'N annhymerus' tynnu llinell drwy hynny, gan nodi null.
Nid oes unrhyw gymeriad ychwanegol.
>> Yn wir, dyma sut y gallwn fynd ati i weithredu
rhywbeth sy'n cael ei alw rhestr cysylltiedig.
Mae rhestr cysylltiedig yn strwythur data newydd, ac mae'n garreg gamu tuag at
strwythurau data llawer ffansi yn dechrau i ddatrys problemau
ar hyd y llinellau Facebook-fath broblemau a Google o fath broblemau
lle mae gennych setiau data enfawr, ac nid yw bellach yn torri ei
i storio popeth contiguously ac yn defnyddio rhywbeth fel chwiliad llinol
neu hyd yn oed rhywbeth fel chwiliad deuaidd.
Rydych am amseroedd rhedeg hyd yn oed yn well.
Yn wir, un o'r Grails Sanctaidd byddwn yn siarad am hynny yn ddiweddarach yr wythnos hon neu'r nesaf
yn algorithm y mae ei amser rhedeg yn gyson.
Mewn geiriau eraill, mae bob amser yn cymryd yr un faint o amser ni waeth
pa mor fawr yw'r mewnbwn yn, ac y byddai yn wir yn gymhellol,
hyd yn oed yn fwy felly na rhywbeth logarithmig.
Beth yw hyn ar y sgrin yma?
Mae pob un o'r petryalau yn union beth Fi jyst tynnu â llaw.
Ond y peth yr holl ffordd ar y chwith yn newidyn arbennig.
Mae'n mynd i fod yn bwyntydd sengl oherwydd y Gotcha 1
gyda rhestr gysylltiedig, fel y pethau hyn yn cael eu galw,
yw bod yn rhaid i chi hongian ar un pen o'r rhestr cysylltiedig.
>> Yn union fel gyda llinyn, rhaid i chi wybod y cyfeiriad y torgoch cyntaf.
Un fargen ar gyfer rhestrau cysylltiedig.
Mae'n rhaid i chi wybod cyfeiriad y darn cyntaf o cof
oherwydd oddi yno, gallwch gyrraedd pob un arall.
Downside.
Pa bris yr ydym yn talu am y amlbwrpasedd o gael ddynamig
strwythur data sizable, os byth bydd angen mwy o gof, iawn,
dim ond yn dyrannu un darn mwy a thynnu pwyntydd gan
hen i'r newydd gynffon y rhestr?
Yeah.
[Myfyrwyr] Mae'n cymryd lle tua dwywaith gymaint.
Mae'n cymryd lle ddwywaith cymaint, felly dyna bendant yn ochr negyddol, ac rydym wedi gweld hyn yn
tradeoff o'r blaen rhwng amser a gofod a hyblygrwydd
lle erbyn hyn, nid ydym angen 32 catiau gyfer pob un o'r rhifau hyn.
Mae gwir angen 64, 32 am y nifer a 32 ar gyfer y pwyntydd.
Ond hey, Mae gen i 2 gigabeit o RAM.
Pheidio ag ychwanegu 32 o ddarnau yma ac yma yn ymddangos bod fawr o gytundeb.
Ond ar gyfer setiau data mawr, mae'n bendant yn ychwanegu hyd at llythrennol dwywaith gymaint.
Beth arall anfantais yn awr, neu beth nodwedd ydym yn rhoi'r gorau iddi,
os ydym yn eu cynrychioli rhestrau o bethau gyda rhestr cysylltiedig ac nid arae?
[Myfyrwyr] Ni allwch croesi ei ôl.
Ni allwch croesi ei ôl, felly rydych yn fath o sgriwio os ydych chi'n cerdded
o'r chwith i'r dde gan ddefnyddio dolen i neu ddolen tra
ac yna byddwch yn sylweddoli, "O, dw i eisiau mynd yn ôl i ddechrau'r rhestr."
Ni allwch fod y rhain awgrymiadau yn unig yn mynd o'r chwith i'r dde fel y saethau'n dangos.
>> Nawr, fe allech chi gofio cychwyn y rhestr gyda newidyn arall,
ond mae hynny'n cymhlethdod i gadw mewn cof.
Mae amrywiaeth, waeth pa mor bell i chi fynd, gallwch chi bob amser yn gwneud minws, minws, minws, minws
a mynd yn ôl o ba le y daethoch.
Beth arall anfantais yma? Yeah.
[Gwestiwn myfyrwyr Anghlywadwy]
Gallech, er mwyn i chi mewn gwirionedd wedi cynnig dim ond strwythur data a elwir yn rhestr gysylltiedig dwbl,
ac yn wir, byddech yn ychwanegu un arall pwyntydd i bob un o'r petryalau
sy'n mynd i'r cyfeiriad arall, y upside y mae
yn awr y gallwch ei groesi yn ôl ac ymlaen,
anfantais y mae yn awr yn ydych yn defnyddio tair gwaith cymaint cof wrth i ni ei ddefnyddio i
a hefyd yn ychwanegu cymhlethdod o ran y cod yn rhaid i chi ysgrifennu i wneud pethau'n iawn.
Ond mae'r rhain i gyd efallai cyfaddawdu rhesymol iawn, os yw'r gwrthdroad yn fwy pwysig.
Yeah.
[Myfyrwyr] Ni allwch hefyd restr cysylltiedig 2D.
Da, ni allwch mewn gwirionedd yn cael rhestr 2D cysylltiedig.
Gallech. Dyw hi ddim yn bron mor hawdd â arae.
Fel arae, rydych yn gwneud braced agored, caeedig braced, cromfach agor, ar gau braced,
a byddwch yn cael rhywfaint o strwythur 2-ddimensiwn.
Gallech gweithredu rhestr 2-ddimensiwn sy'n gysylltiedig
os ydych yn ychwanegu-wrth i chi fwriedir-pwyntydd trydydd bob un o'r pethau hyn,
ac os ydych yn meddwl am rhestr arall yn dod ar chi arddull 3D
oddi ar y sgrîn i ni i gyd, sydd ychydig arall gadwyn o ryw fath.
Gallem wneud hyn, ond nid yw mor syml â teipio braced agored, braced sgwâr. Yeah.
[Gwestiwn myfyrwyr Anghlywadwy]
Da, felly mae hwn yn kicker go iawn.
>> Mae'r algorithmau yr ydym wedi pined drosodd, fel oh, chwiliad deuaidd,
gallwch chwilio am amrywiaeth o rifau ar y bwrdd
neu lyfr ffôn gymaint yn gyflymach os byddwch yn defnyddio rhannu a gorchfygu
a algorithm chwiliad deuaidd, ond chwiliad deuaidd angen adeiladu dau rhagdybiaethau.
Un, bod y data gael ei ddatrys.
Yn awr, gallwn yn ôl pob tebyg cadw hyn didoli,
felly efallai nad yw hynny'n peri pryder, ond mae chwiliad deuaidd hefyd yn cymryd yn ganiataol
eich bod yn cael mynediad ar hap at y rhestr o rifau,
ac amrywiaeth yn eich galluogi i gael mynediad ar hap, a thrwy mynediad ar hap,
Yr wyf yn golygu os ydych yn cael array, faint o amser mae'n ei gymryd i chi
i gyrraedd braced 0?
Un gweithrediad, 'ch jyst yn defnyddio [0] ac rydych yn iawn yno.
Faint o gamau y mae'n cymryd i gyrraedd lleoliad 10?
Un cam, 'ch jyst yn mynd i [10] ac rydych chi yno.
Ar y llaw arall, sut ydych chi'n cyrraedd y cyfanrif yn 10fed yn rhestr sy'n gysylltiedig?
Mae'n rhaid i chi ddechrau ar y dechrau oherwydd eich bod yn cofio dim ond
dechrau o restr cysylltiedig, yn union fel llinyn yn cael ei gofio
gan y cyfeiriad ei torgoch cyntaf, ac i ddod o hyd bod int 10
neu fod cymeriad yn 10fed yn llinyn, rhaid i chi chwilio y peth damn cyfan.
>> Unwaith eto, nid ydym yn datrys ein holl broblemau.
Rydym yn cyflwyno rhai newydd, ond mae'n wir yn dibynnu ar yr hyn rydych yn ceisio ei ddylunio ar gyfer.
O ran gweithredu hyn, gallwn fenthyg syniad o'r strwythur myfyrwyr.
Mae'r gystrawen yn debyg iawn, ac eithrio yn awr, y syniad ychydig yn fwy haniaethol
na tŷ ac enw a ID.
Ond yr wyf yn cynnig y gallem gael strwythur data yn C
sy'n cael ei alw'n nod, fel y gair olaf ar y sleid yn awgrymu,
tu mewn i nod, a nod yn unig yw cynhwysydd generig mewn gwyddoniaeth gyfrifiadurol.
Mae'n tynnu fel arfer fel cylch neu sgwâr neu betryal fel yr ydym wedi ei wneud.
Ac yn y strwythur data, mae gennym int, n,
felly dyna cadarnhau'r rhif y byddaf am ei storio.
Ond beth yw hyn ail linell, strwythur nod * nesaf?
Pam fod hyn yn gywir, neu pa rôl sydd i ddrama hon peth,
hyd yn oed er 'i' ychydig yn cryptig ar yr olwg gyntaf?
Yeah.
[Ymateb y myfyrwyr Anghlywadwy]
Yn union, felly mae'r math * o ysbail ei fod yn pwyntydd o ryw fath.
Mae'r enw ar y pwyntydd yn fympwyol nesaf,
ond gallem fod wedi ei alw unrhyw beth yr ydym ei eisiau, ond beth mae hyn yn bwynt pwyntydd i?
[Myfyrwyr] arall nod. >> Yn union, mae'n cyfeirio at un arall nod o'r fath.
>> Yn awr, mae hyn yn fath o chwilfrydedd o C.
Dwyn i gof bod C yn cael ei ddarllen gan top i'r gwaelod compiler, o'r chwith i'r dde,
sy'n golygu os-mae hyn yn ychydig yn wahanol i'r hyn a wnaethom gyda'r myfyriwr.
Pan fyddwn yn diffinio myfyriwr, nid ydym mewn gwirionedd oedd yn rhoi gair yno.
Mae'n newydd ei ddweud typedef.
Yna cawsom enw id llinyn int,, llinyn tŷ,
ac yna fyfyriwr yn y waelod y strwythur.
Mae'r datganiad hwn yn ychydig yn wahanol oherwydd,
unwaith eto, y Crynhoydd C ychydig yn fud.
Mae'n ond yn mynd i ddarllen top i'r gwaelod,
felly os bydd yn cyrraedd y llinell 2 yma
ble nesaf yn cael ei ddatgan ac mae'n gweld, oh, dyma newidyn a elwir nesaf.
Mae'n pwyntydd i nod strwythur.
Mae'r compiler yn mynd i sylweddoli beth yw nod strwythur?
Dydw i erioed wedi clywed am y peth o'r blaen,
oherwydd efallai na fydd y nod gair fel arall yn ymddangos
nes bod y gwaelod, felly mae hyn yn diswyddo.
Mae'n rhaid i chi ddweud nod strwythur yma, y ​​gallwch wedyn fyrhau ddiweddarach
diolch i typedef i lawr yma, ond mae hyn oherwydd
rydym yn cyfeirio at y strwythur ei hun tu mewn i'r strwythur.
Dyna'r Gotcha neb yno.
>> Mae rhai problemau diddorol yn mynd i godi.
Mae gennym restr o rifau. Sut rydym yn mewnosod i mewn iddo?
Sut rydym yn chwilio hynny? Sut ydym ni'n ddileu ohono?
Yn enwedig nawr bod yn rhaid inni reoli pob un o'r awgrymiadau.
Yr oeddech yn meddwl awgrymiadau yn fath o feddwl-blygu
pan fyddwch yn cael un ohonynt yn unig yn ceisio i ddarllen int iddo.
Nawr mae'n rhaid i ni drin werth rhestr gyfan yn.
Pam nad ydym yn cymryd ein 5-munud egwyl yma, ac yna byddwn yn dod â
rhai Folks i fyny ar y llwyfan i wneud yn union hynny.
>> C yn llawer mwy o hwyl pan gaiff ei hactio.
Pwy fyddai'n llythrennol yn hoffi i fod yn gyntaf?
Iawn, yn dod ar i fyny. Rydych yn gyntaf.
Pwy fyddai'n hoffi bod 9? Iawn, 9.
Sut tua 9? 17 oed?
Mae criw dethol bach yma. 22 a 26 yn y rhes flaen.
Ac yna beth am rywun dros yno yn cael eu sylw at.
Rydych yn 34. Iawn, 34, yn dod ar i fyny.
Weinidog ddod i ben yno. Iawn, mae'r pedwar ohonoch guys.
A phwy y gwnaethom ddweud am 9?
Pwy yw ein 9?
Pwy sydd wir eisiau bod yn 9? Mae pob hawl, yn dod ar, fod yn 9.
Yma rydym yn mynd.
34, byddwn yn cwrdd â chi dros yno.
Y rhan gyntaf yw gwneud eich hunain yn edrych fel 'na.
26, 22, 17, yn dda.
Os gallwch chi sefyll i ffwrdd i'r ochr, oherwydd ein bod ni'n mynd i malloc atoch mewn munud.
>> Da, yn dda.
Iawn, gwych, felly gadewch i ni ofyn ychydig o gwestiynau yma.
Ac mewn gwirionedd, beth yw eich enw? >> Anita.
Anita, iawn, dewch draw yma.
Anita yn mynd i'n helpu i fath o ddatrys un cwestiwn eithaf syml yn gyntaf,
sef sut ydych chi'n dod o hyd a yw gwerth yn y rhestr?
Yn awr, yn sylwi bod yn gyntaf, a gynrychiolir yma gan Lucas,
ychydig yn wahanol, ac felly ei ddarn o bapur yn fwriadol i'r ochr
gan nad yw'n lawn mor dal ac nid yw'n cymryd i fyny fel llawer o ddarnau,
er yn dechnegol ganddo'r un maint o bapur yn unig cylchdroi.
Ond mae'n ychydig yn wahanol gan ei fod dim ond 32 catiau am pwyntydd,
ac mae pob un o'r rhain guys yna 64 o ddarnau, hanner, sef y nifer, hanner ohonynt yn pwyntydd.
Ond nid y pwyntydd yn cael ei darlunio, felly os ydych yn guys gallai braidd yn lletchwith
defnyddio eich llaw chwith i bwyntio at y person nesaf i chi.
A ydych chi'n rhif 34. Beth yw eich enw?
Ari.
Ari, felly mewn gwirionedd, ddal y papur yn eich llaw dde, a llaw chwith yn mynd yn syth i lawr.
Rydych yn cynrychioli null ar y chwith.
>> Nawr ein darlun dynol yn gyson iawn.
Mae hyn mewn gwirionedd sut mae awgrymiadau yn gweithio.
Ac os allwch chi scrunch ychydig y modd hwn felly dydw i ddim yn eich ffordd.
Anita yma, dod o hyd i 'm' r rhif 22,
ond cymryd yn ganiataol cyfyngiad o beidio â bodau dynol yn dal darnau o bapur,
ond mae hon yn rhestr, ac nad oes gennych ond Lucas i ddechrau
oherwydd ei fod yn llythrennol y pwyntydd cyntaf.
Tybiwch fod gennych chi eich hun yn arwyddion, ac felly chi hefyd yn cael y gallu i bwyntio at rywbeth.
Pam na wnewch chi ddechrau trwy bwyntio at yn union yr hyn y Lucas yn pwyntio at?
Da, a gadewch i mi ddeddfu hyn dros yma.
Dim ond er mwyn drafodaeth, gadewch i mi dynnu i fyny dudalen wag yma.
Sut ydych chi'n sillafu eich enw? >> Anita.
Iawn, Anita.
Lets 'ddeud nod * Anita = lucas.
Wel, ni ddylem eich galw'n lucas. Dylem ffonio chi yn gyntaf.
Pam mae hyn mewn gwirionedd yn gyson â realiti yma?
Un, cyntaf eisoes yn bodoli.
Gyntaf wedi cael ei ddyrannu yn ôl pob tebyg yn rhywle i fyny yma.
Node * yn gyntaf, ac mae wedi cael ei ddyrannu rhestr rhywsut.
Nid wyf yn gwybod sut mae hynny'n digwydd. A ddigwyddodd cyn y dosbarth ddechrau.
Mae'r rhestr gysylltiedig o bodau dynol wedi ei greu.
Ac yn awr ar y pwynt hwn yn y stori-mae hyn i gyd yn mynd ar ôl pob golwg yn ddiweddarach Facebook-
ar y pwynt hwn yn y stori, Anita wedi cael ei ymgychwyn i fod yn hafal i gyntaf,
Nid yw'n golygu bod pwyntiau Anita yn Lucas.
Yn hytrach, meddai wrth bwyntio at yr hyn y mae'n pwyntio at
oherwydd bod yr un cyfeiriad sy'n tu mewn Lucas yn 32 catiau - 1, 2, 3 -
Mae bellach hefyd yn y tu mewn o Anita yn 32 catiau - 1, 2, 3.
>> Nawr dod o hyd i 22. Sut fyddech chi'n mynd ati i wneud hyn?
Beth sy'n bod Point? >> I beth bynnag.
Pwyntiwch at beth bynnag, felly mynd yn ei flaen ac yn gweithredu allan fel gorau y gallwch chi yma.
Da, da, ac yn awr ydych chi'n pwyntio at-beth yw eich enw gyda 22?
Ramon. >> Ramon, felly Ramon yn dal i fyny 22.
Rydych wedi wneud yn awr siec.
A yw'r Ramon == 22, ac os felly, er enghraifft, gallwn ddychwelyd yn wir.
Gadewch i mi-er bod y guys yn sefyll yma braidd yn lletchwith-
gadael i mi wneud rhywbeth yn gyflym fel bool dod o hyd.
Rydw i'n mynd i fynd yn ei flaen a dweud (nod * rhestr, int n).
'N annhymerus' yn gywir yn ôl gyda chi guys. Fi jyst yn rhaid i ysgrifennu rhai cod.
Ac yn awr yr wyf i'n mynd i fynd yn ei flaen ac yn gwneud hyn, nod * rhestr = Anita.
Ac yr wyf i'n mynd i fynd yn ei flaen a dweud ychydig (Anita! = NULL).
>> Mae'r trosiad yma yn cael ychydig yn brin, ond ychydig (Anita! = NULL), beth ydw i am ei wneud?
Fi angen rhyw ffordd o gyfeirio
y cyfanrif bod Anita yn pwyntio at.
Yn y gorffennol, pan oedd gennym strwythurau, y mae nod yw,
rydym yn defnyddio'r nodiant dot, a byddem yn dweud rhywbeth fel
anita.n, ond y broblem yma yw nad yw Anita yn strwythur y cyfryw.
Beth yw hi?
Mae hi'n pwyntydd, felly mewn gwirionedd, os ydym am ddefnyddio'r nodiant dot-
ac mae hyn yn mynd i edrych yn fwriadol ychydig yn cryptig-
rhaid i ni wneud rhywbeth fel mynd i ba bynnag Anita llaw chwith yn pwyntio at
ac yna yn cael y cae o'r enw n.
Anita yn pwyntydd, ond beth yw * Anita?
Beth ydych chi'n dod o hyd pan fyddwch yn mynd i'r hyn Anita yn pwyntio at?
Mae strwythur, a nod, a nod, galw i gof, mae cae o'r enw n
oherwydd ei fod wedi, galw i gof, y 2 faes, nesaf a n,
ein bod yn gweld hyn o bryd yn ôl i'r dde yma.
>> I mewn gwirionedd yn dynwared hyn mewn cod,
gallem wneud hyn ac yn dweud os ((* Anita). == n n), y n fy mod i'n chwilio amdano.
Sylwch fod y swyddogaeth ei basio yn y nifer wyf yn poeni am.
Yna gallaf fynd ymlaen a gwneud rhywbeth fel elw gwirioneddol.
Else, os nad yw hynny'n wir, beth ydw i am ei wneud?
Sut ydw i'n cyfieithu i cod beth Anita yn gwneud hynny yn reddfol drwy gerdded drwy'r rhestr?
Beth ddylwn i ei wneud hyd yma i efelychu Anita cymryd y cam i'r chwith, y cam i'r chwith?
[Ymateb y myfyrwyr Anghlywadwy] >> Beth sy'n bod?
[Ymateb y myfyrwyr Anghlywadwy]
Da, nid yn syniad drwg, ond yn y gorffennol, pan fyddwn wedi gwneud hyn, rydym wedi gwneud Anita + +
oherwydd y byddai hynny'n ychwanegu rhif 1 i Anita,
Byddai sydd fel arfer yn pwyntio at y person nesaf, fel Ramon,
neu'r person nesaf ato, neu y nesaf ato person i lawr y llinell.
Ond nid yw hynny'n eithaf da yma oherwydd beth mae hyn yn beth yn edrych fel yn y cof?
Nid bod. Mae'n rhaid i ni analluoga hynny.
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,
os ydym yn wir yn efelychu hyn-allwch chi guys, tra'n parhau i bwyntio ar yr un bobl,
gall rhai ohonoch gymryd cam yn ôl ar hap, mae rhai ohonoch yn gam ymlaen ar hap?
>> Mae'r llanast yn dal i fod yn rhestr cysylltiedig,
ond gallai'r rhain guys fod yn unrhyw le yn y cof,
felly Anita + na + yn mynd i weithio pam?
Beth sydd yn y lleoliad Anita + +?
Pwy a ŵyr.
Mae'n rhywfaint o werth arall mai dim ond fel y digwydd i'w interposed
ymhlith pob un o'r rhain nodau ar hap gan nad ydym yn defnyddio amrywiaeth.
Rydym yn dyrannu pob un o'r nodau unigol.
Iawn, os gallwch chi guys glanhau eich hunain yn ôl i fyny.
Gadewch i mi yn cynnig y lle Anita + +, rydym yn ei wneud yn lle Anita yn cael-
yn dda, pam nad ydym yn mynd i beth bynnag Anita yn pwyntio arnynt ac wedyn yn ei wneud. nesaf?
Mewn geiriau eraill, rydym yn mynd i Ramon, pwy sy'n dal y rhif 22,
ac yna. nesaf yw fel pe byddai Anita fod yn copïo ei pwyntydd llaw chwith.
Ond ni fyddai'n mynd ymhellach nag Ramon oherwydd ein bod o hyd i 22.
Ond dyna fyddai'r syniad. Yn awr, mae hwn yn llanast dduw-ofnadwy.
Onest, bydd neb byth yn cofio hyn cystrawen, ac felly diolch byth,
mewn gwirionedd mae'n ychydig yn fwriadol-oh, na wnaethoch chi mewn gwirionedd yn gweld yr hyn a ysgrifennais.
Byddai hyn yn fwy grymus pe gallech. Voila!
>> Y tu ôl i'r llenni, roeddwn yn datrys y broblem y ffordd hon.
Anita, i gymryd y cam i'r chwith,
gyntaf, rydym yn mynd i'r cyfeiriad fod Anita yn pwyntio at
a lle bydd yn dod o hyd i nid yn unig n, yr ydym yn unig gwirio ar gyfer mwyn cymharu, yn
ond byddwch hefyd yn dod o hyd nesaf - yn yr achos hwn,
Ramon llaw chwith pwyntio at y nod nesaf yn y rhestr.
Ond mae hyn yn y llanast duw-ofnadwy y cyfeiriais ato yn gynharach,
ond mae'n troi allan C yn gadael i ni symleiddio hyn.
Yn hytrach na ysgrifennu (* Anita), gallwn yn hytrach na dim ond ysgrifennu Anita-> n,
ac mae'n yr un peth yn union swyddogaethol, ond mae'n llawer mwy 'n athrylithgar,
ac mae'n llawer mwy cyson â'r darlun yr ydym wedi bod yn tynnu
i gyd y tro hwn gan ddefnyddio saethau.
>> Yn olaf, beth sydd angen i ni ei wneud ar ddiwedd y rhaglen?
Mae un llinell o god sy'n weddill.
Dychwelyd beth?
Ffug, oherwydd os ydym yn ei gael drwy'r cyfan tra ddolen
ac Anita, mewn gwirionedd, null, sy'n golygu ei bod yn mynd yr holl ffordd i ddiwedd y rhestr
lle'r oedd yn pwyntio at-beth yw eich enw eto?
Ari. >> Ari llaw chwith, sy'n null.
Anita yn awr yn null, ac yr wyf yn sylweddoli eich bod yn sefyll yma lletchwith mewn limbo
oherwydd fy mod i'n mynd i ffwrdd ar ymson yma,
ond byddwn yn eich cynnwys chi eto mewn dim ond hyn o bryd.
Anita yn null yr adeg honno yn y stori, felly mae'r ddolen yn dod i ben tra,
a rhaid i ni ddychwelyd ffug bod yn rhaid iddi gael yr holl ffordd i Ari y pwyntydd null
yna nid oedd dim rhif yr oedd eisiau yn y rhestr.
Gallwn glanhau hyn i fyny hefyd, ond mae hwn yn gweithredu 'n bert da yna
swyddogaeth llwybro, a dod o hyd i swyddogaeth am restr cysylltiedig.
Mae'n dal i fod chwiliad llinol, ond nid yw mor syml â + + pwyntydd
neu + + newidyn i oherwydd yn awr ni allwn ddyfalu
lle mae pob un o'r nodau yn y cof.
Mae'n rhaid i ni llythrennol dilyn y llwybr o friwsion bara neu, yn fwy penodol,
awgrymiadau, i fynd o un nod i un arall.
>> Nawr gadewch i ni geisio un arall. Anita, ydych chi eisiau dod yn ôl yma?
Pam nad ydym yn mynd yn ei flaen ac yn dyrannu un person arall o'r gynulleidfa?
Malloc-beth yw eich enw? >> Rebecca.
Rebecca. Rebecca wedi cael ei malloced gan y gynulleidfa,
ac mae hi bellach yn storio'r rhif 55.
A'r nod wrth law yn awr yw i Anita i fewnosod
Beca yn y rhestr sy'n gysylltiedig yma yn ei le priodol.
Dewch draw fan hyn am eiliad.
Rwyf wedi gwneud rhywbeth fel hyn.
Rwyf wedi gwneud * nod. A beth yw eich enw eto?
Rebecca. >> Rebecca, iawn.
Rebecca yn cael malloc (sizeof (nod)).
Yn union fel rydym wedi dyrannu pethau fel myfyrwyr a whatnot yn y gorffennol,
mae angen maint y nod, felly, yn awr Beca
yn pwyntio ar yr hyn?
Rebecca ddau gae y tu mewn iddi, ac un ohonynt yw 55.
Gadewch i ni wneud beth, rebecca-> = 55.
Ond yna rebecca-> Dylai nesaf-fel ar hyn o bryd, ei llaw yn fath o pwy a ŵyr?
Mae'n pwyntio ar ryw werth garbage, felly pam na gwneud ar gyfer mesur da
o leiaf yn gwneud hyn fel y llaw chwith yn awr ar ei ochr.
Nawr Anita, ei gymryd oddi yma.
Mae gennych Rebecca wedi cael ei ddyrannu.
Mynd yn ei flaen a dod o hyd lle y dylem roi Rebecca.
Da, da iawn.
Iawn, yn dda, ac yn awr mae angen i chi roi ychydig o gyfeiriad,
felly os ydych wedi cyrraedd Ari.
Ei law chwith yn null, ond Rebecca amlwg yn perthyn i'r dde,
felly sut ydym yn rhaid i ni newid y rhestr sy'n gysylltiedig
er mwyn mewnosod Rebecca yn y lle priodol?
Pe gallech llythrennol symud ddwylo pobl chwith o gwmpas yn ôl yr angen,
byddwn yn datrys y broblem y ffordd honno.
Iawn, yn dda, ac yn y cyfamser, Rebecca llaw chwith yn awr wrth ei hochr.
>> Dyna oedd yn rhy hawdd.
Gadewch i ni geisio dyrannu-we're gwneud bron, 20.
Iawn, yn dod ar i fyny.
20 wedi cael ei ddyrannu, felly gadewch i mi fynd yn ei flaen a dweud eto yma
ydym wedi gwneud dim ond Saad * nod.
Rydym wedi malloc (sizeof (nod)).
Yna byddwn yn gwneud y gystrawen union yr un fath fel y gwnaethom o'r blaen ar gyfer 20,
a byddaf yn ei wneud nesaf = NULL, ac yn awr mae i fyny i Anita
i osod chi i'r rhestr cysylltiedig, pe gallech chwarae rôl honno yn union yr un.
Gweithredu.
Iawn, yn dda.
Nawr meddyliwch yn ofalus cyn i chi ddechrau symud dwylo chwith o gwmpas.
Chi o bell ffordd wedi cael y rôl fwyaf lletchwith heddiw.
Dylid ei law yn cael ei symud gyntaf?
Iawn, aros, rwy'n clywed rhai o dim.
Os byddai rhai Folks yn gwrtais yn hoffi i helpu i ddatrys sefyllfa letchwith yma.
Dylai pwy llaw chwith yn cael ei ddiweddaru 1 efallai? Yeah.
[Myfyrwyr] Saad yn.
Iawn, Saad, pam, er bod?
[Ymateb y myfyrwyr Anghlywadwy]
Da, oherwydd os ydym yn symud-beth yw eich enw? >> Marshall.
Marshall, os byddwn yn symud ei law cyntaf i lawr i null,
erbyn hyn rydym wedi amddifad yn llythrennol pedwar o bobl yn y rhestr hon
oherwydd ef oedd yr unig beth pwyntio at Ramon a phawb ar y chwith,
er mwyn diweddaru bod pwyntydd gyntaf yn wael.
Gadewch i ni ddadwneud hynny.
Da, ac yn awr fynd yn ei flaen a symud y llaw chwith priodol pwyntio at Ramon.
Mae hyn yn teimlo eu bod yn segur bach.
Nawr mae dau o bobl tynnu sylw at Ramon, ond mae hynny'n iawn
oherwydd yn awr sut arall ydyn ni'n diweddaru'r rhestr?
Pa llaw arall, mae symud?
Ardderchog, yn awr rydym yn colli unrhyw cof?
Na, mor dda, gadewch i ni weld os na allwn dorri'r hyn unwaith yn rhagor.
>> Mallocing am y tro olaf, rhif 5.
Yr holl ffordd yn ôl, yn dod ar i lawr.
Mae'n gyffrous iawn.
[Cymeradwyaeth]
Beth yw eich enw? >> Ron.
Ron, iawn, yr ydych yn malloced fel rhif 5.
Rydym wedi gweithredu yn unig cod sef bron union yr un fath i'r
gyda dim ond enw gwahanol.
Ardderchog.
Yn awr, Anita, pob lwc fewnosod rhif 5 yn y rhestr yn awr.
Da, a?
Ardderchog, felly mae hyn yn wir yn y trydydd o dri achos cyfanswm.
Rydym yn gyntaf wedi cael rhywun ar y diwedd, Rebecca.
Yna cawsom rhywun yn y canol.
Nawr mae gennym rywun ar y dechrau, ac yn yr enghraifft hon,
rydym yn awr yn rhaid i ddiweddaru Lucas am y tro cyntaf
oherwydd bod yr elfen gyntaf yn y rhestr bellach i bwyntio at y nod newydd,
sydd, yn ei dro, yn tynnu sylw at nifer nod 9.
>> Roedd hwn yn arddangosiad hynod lletchwith, rwy'n siwr,
felly rownd fawr o gymeradwyaeth ar gyfer y guys os ydych yn gallu.
Gwneud 'n glws.
Dyna i gyd. Efallai y byddwch yn cadw eich darnau o bapur fel cof bach.
Mae'n troi allan bod yn gwneud hyn mewn cod
Nid yw mor syml â dim ond symud o gwmpas dwylo
ac yn pwyntio awgrymiadau ar bethau gwahanol.
Ond sylweddoli pan ddaw amser i weithredu rhywbeth fel
rhestr cysylltiedig neu amrywiad ohono os ydych yn canolbwyntio ar wir
hyn hanfodion sylfaenol, y problemau fesul tamaid rhaid i mi chyfrif i maes,
yw hyn yn llaw neu y llaw, yn sylweddoli bod yr hyn sydd fel arall yn rhaglen weddol gymhleth
Gall, mewn gwirionedd, yn cael ei leihau i flociau adeiladu yn weddol syml fel hyn.
>> Gadewch i ni gymryd pethau i gyfeiriad mwy soffistigedig o hyd.
Erbyn hyn mae gennym y syniad o'r rhestr cysylltiedig.
Mae gennym hefyd-diolch i'r awgrym yn ôl yno-a rhestr gysylltiedig dwbl,
sy'n edrych bron yr un fath, ond erbyn hyn mae gennym ddwy arwyddion tu fewn i'r strwythur
yn lle un, a gallem yn ôl pob tebyg yn galw y rhai awgrymiadau blaenorol ac nesaf
neu'r chwith neu i'r dde, ond rydym yn, mewn gwirionedd, angen dau ohonynt.
Byddai'r cod fod ychydig yn fwy ynghlwm.
Byddai Anita wedi gorfod gwneud mwy o waith yma ar y llwyfan.
Ond gallem yn sicr yn gweithredu'r math o strwythur.
O ran amser rhedeg, fodd bynnag, beth fyddai'r amser yn rhedeg
gyfer Anita o ddod o hyd i rif n mewn rhestr sy'n gysylltiedig nawr?
O Still fawr o n, felly does dim yn well na chwiliad llinol.
Ni allwn wneud chwiliad deuaidd, fodd bynnag, unwaith eto.
Pam oedd bod yr achos? Ni allwch neidio o gwmpas.
Er ein bod yn amlwg yn gweld yr holl bobl ar y llwyfan,
a gallai Anita wedi eyeballed a dweud, "Dyma ganol y rhestr,"
na fyddai'n gwybod os hi oedd y rhaglen gyfrifiadurol
oherwydd yr unig beth oedd yn rhaid iddi grybwyll ar ddechrau y senario
Roedd Lucas, a oedd yn y pwyntydd cyntaf.
Byddai'n rhaid i ddilyn y cysylltiadau hynny,
cyfrif ei ffordd hyd nes y daeth o hyd yn fras y canol,
a hyd yn oed wedyn, nid yw Ruby yn mynd i wybod pan fydd hi'n cyrraedd y canol
oni bai ei bod yn mynd yr holl ffordd i'r diwedd at chyfrif i maes faint ohonynt sydd,
yna backtracks, ac y byddai hefyd yn anodd oni bai eich bod wedi
rhestr cysylltiedig ddwbl o ryw fath.
>> Datrys rhai problemau heddiw, ond cyflwyno eraill.
Beth am strwythur data gwahanol yn gyfan gwbl?
Dyma lun o'r hambyrddau yn Mather House,
ac yn yr achos hwn, mae gennym strwythur data rydym hefyd wedi fath sydd eisoes yn bod yn siarad amdano.
Rydym yn siarad am pentwr yng nghyd-destun y cof,
ac mae hynny'n fath o enw yn fwriadol oherwydd bod pentwr yn y cylch cof
yn effeithiol a strwythur data sydd wedi stwff mwy a mwy o haenau ar ben arno.
Ond y peth diddorol am pentwr, fel sy'n digwydd mewn gwirionedd,
yw ei fod yn fath arbennig o strwythur data.
Mae'n strwythur data lle yr elfen gyntaf yn
yw'r elfen olaf allan.
Os ydych yn yr hambwrdd cyntaf i gael ei roi ar y pentwr,
ydych yn mynd i fod yn anffodus yr hambwrdd olaf i gael ei dynnu oddi ar y pentwr,
ac nad yw o anghenraid yn beth da.
I'r gwrthwyneb, gallwch feddwl am y peth y ffordd arall o gwmpas,
yr olaf i mewn yn y cyntaf allan.
>> Nawr, peidiwch unrhyw senarios dod i'r cof lle cael pentwr
strwythur data lle mae gennych yr eiddo hwnnw
yr olaf mewn, cyntaf allan, mewn gwirionedd yn gymhellol?
Yw hynny'n beth da? Yw hynny'n beth drwg?
Mae'n bendant yn beth drwg os nad yw'r hambyrddau i gyd yn union yr un fath
ac roedden nhw i gyd liwiau arbennig gwahanol neu whatnot,
ac mae'r lliw rydych ei eisiau yw yr holl ffordd ar y gwaelod.
Wrth gwrs, ni allwch gael y heb ymdrech fawr.
Mae'n rhaid i chi ddechrau o'r brig ac yn gweithio eich ffordd i lawr.
Yn yr un modd, beth os ydych yn un o'r bechgyn hyn yn fan
sy'n aros i fyny drwy'r nos yn ceisio cael iPhone a llinellau i fyny
mewn lle fel hyn?
Oni fyddai'n braf pe y siop Apple
Roedd pentwr strwythur data?
Yay? Nay?
Mae'n unig yn dda ar gyfer y bobl sy'n dangos i fyny ar y funud olaf bosibl
ac yna yn cael dynnu oddi ar y ciw.
Ac yn wir, y ffaith fy mod yn dewis gwneud hynny i ddweud ciw
mewn gwirionedd yn gyson â'r hyn y byddem yn galw y math hwn o strwythur data,
un yn realiti lle mae'r gorchymyn yn mater,
ac rydych am i'r un cyntaf i mewn i fod yr un cyntaf allan
os mai dim ond er mwyn tegwch dynol.
Byddwn yn gyffredinol, yn galw bod data ciw strwythur.
>> Mae'n troi allan ar wahân rhestrau cysylltiedig, gallwn ddechrau defnyddio'r un syniadau sylfaenol
a dechrau creu mathau newydd a gwahanol o atebion i broblemau.
Er enghraifft, yn achos pentwr, gallai ydym yn eu cynrychioli pentwr
defnyddio strwythur data fel hyn, byddwn yn cynnig.
Yn yr achos hwn, rwyf wedi datgan yn strwythur, ac yr wyf wedi dweud tu mewn i'r strwythur hwn
llu o rifau ac yna faint amrywiol o'r enw,
ac yr wyf yn mynd i alw y peth hyn pentwr.
Yn awr, pam mae hyn yn gweithio mewn gwirionedd?
Yn achos pentwr, gallwn dynnu hyn yn effeithiol ar y sgrin fel arae.
Dyma fy pentwr. Dyna yw fy rhifau.
A byddwn yn tynnu nhw fel hyn, mae hyn, hyn, hyn, hyn.
Ac yna gennyf rywfaint o ddata aelod arall yma,
a elwir yn maint, felly mae hwn yn maint, ac mae hyn yn rhifau,
ac ar y cyd, y iPad cyfan yma yn cynrychioli un strwythur stac.
Yn awr, yn ddiofyn, maint wedi yn ôl pob tebyg yn rhaid i gael ei ymgychwyn i 0,
a beth sydd y tu mewn o'r holl amrywiaeth o rifau i ddechrau
tro cyntaf i mi dyrannu arae?
Garbage. Pwy a wyr? Ac nid yw'n mewn gwirionedd ots.
Nid oes ots os yw hyn yn 1, 2, 3, 4, 5, yn gyfan gwbl ar hap
trwy lwc ddrwg storio yn fy strwythur oherwydd cyn belled gan fy mod yn gwybod bod y maint y pentwr
yw 0, yna yr wyf yn gwybod programmatically, peidiwch â edrych ar unrhyw un o'r elfennau yn y rhesi.
Does dim ots beth sydd yno.
Peidiwch ag edrych arnynt, fel y byddai goblygiadau o faint o 0.
>> Ond mae'n debyg nawr rwy'n mynd yn ei flaen a rhoi rhywbeth i mewn i'r pentwr.
Wyf i am osod y rhif 5, felly yr wyf yn rhoi rhif 5 yma,
ac yna beth ydw i'n ei roi i lawr yma?
Nawr byddwn yn mewn gwirionedd yn rhoi i lawr 1 ar gyfer y maint,
ac yn awr y pentwr o faint 1.
Beth os byddaf yn mynd yn ei flaen a rhowch y rhif, gadewch i ni ddweud, 7 nesaf?
Mae hyn wedyn yn cael ei ddiweddaru i 2, ac yna byddwn yn gwneud 9,
ac yna mae hyn yn cael ei ddiweddaru i 3.
Ond y nodwedd ddiddorol yn awr y stac yw bod
Rwy'n fod i ddileu'r pa elfen os ydw i eisiau i pop
rhywbeth oddi ar y simnai, fel petai?
Byddai 9 yn y peth cyntaf i fynd.
Sut dylai'r darlun newid os ydw i am i pop elfen oddi ar y pentwr,
yn debyg iawn fel hambwrdd yn Mather?
Yeah. >> [Myfyrwyr] maint Set i 2.
Yn union, i gyd gallaf ei wneud yw gosod maint i 2, a beth ddylwn i ei wneud ag arae?
Nid oes gennyf i wneud unrhyw beth.
Gallwn, dim ond i fod rhefrol, rhowch o 0 yno neu -1 neu rywbeth i ddynodi
nad yw hyn yn werth legit, ond does dim ots oherwydd
Gallaf gofnodi y tu allan i'r amrywiaeth ei hun pa mor hir mae'n
er fy mod yn gwybod dim ond yn edrych ar y ddau elfen gyntaf yn y casgliad.
Yn awr, os byddaf yn mynd ac yn ychwanegu rhif 8 i'r array, sut mae'r llun yn newid nesaf?
Mae hyn yn dod yn 8, ac mae hyn yn dod yn 3.
Rwy'n torri corneli ychydig yma.
Nawr mae gennym 5, 7, 8, ac rydym yn ôl i faint o 3.
Mae hyn yn eithaf syml i'w gweithredu,
ond pan rydym yn mynd i difaru y penderfyniad hwn dylunio?
Pryd mae pethau'n dechrau mynd yn iawn, iawn o'i le? Yeah.
[Ymateb y myfyrwyr Anghlywadwy]
Pan fyddwch eisiau mynd yn ôl a chael yr elfen gyntaf i chi roi i mewn
>> Mae'n troi allan yma hyd yn oed er bod pentwr yn arae o dan y cwfl,
y strwythurau data rydym wedi dechrau siarad am hefyd yn a elwir yn gyffredinol fel
strwythurau data haniaethol lle sut y maent yn gweithredu
yn hollol ar wahân i'r pwynt.
Mae strwythur data fel pentwr i fod i ychwanegu cefnogaeth
gweithrediadau fel gwthio, sy'n gwthio hambwrdd ar y pentwr,
a phop, sy'n cael gwared elfen o'r pentwr, a dyna ni.
Os ydych yn i lawrlwytho rhywun arall cod sydd ar waith eisoes
y peth hyn a elwir yn stac, byddai'r person wedi ysgrifennu
Dim ond dwy swyddogaeth i chi, gwthio a pop, y mae ei unig ddiben mewn bywyd
fyddai i wneud yn union hynny.
Chi neu ef neu hi sy'n gweithredu y rhaglen
byddai wedi bod yn hollol yr un i benderfynu sut i weithredu
semanteg gwthio a neidio o dan y cwfl
neu ymarferoldeb gwthio a neidio.
Ac yr wyf wedi gwneud penderfyniad braidd yn shortsighted yma
drwy weithredu fy pentwr gyda'r strwythur data syml pam?
Pryd mae hyn yn strwythur data egwyl?
Ar ba bwynt yn rhaid i mi ddychwelyd gwall pan fydd y defnyddiwr yn galw gwthio, er enghraifft?
[Myfyrwyr] Os nad oes mwy o le.
Yn union, os oes dim mwy o le, os wyf wedi rhagori ar allu,
sydd i gyd gapiau oherwydd mae'n awgrymu ei fod yn rhyw fath o gyson byd-eang.
Wel, yna Im 'jyst yn mynd i gael i ddweud, "Mae'n ddrwg gennym, ni allaf gwthio arall gwerth
ar y pentwr, "yn debyg iawn fel yn Mather.
>> Ar ryw bwynt, maen nhw'n mynd i gyrraedd y rhan uchaf y cabinet bach.
Does dim mwy o le neu allu yn y stac, a phryd hynny mae rhyw fath o wall.
Mae'n rhaid iddyn nhw roi'r elfen yn rhywle arall, yr hambwrdd yn rhywle arall,
neu unrhyw le o gwbl.
Yn awr, gyda ciw, gallem weithredu ychydig yn wahanol.
Mae ciw yn ychydig yn wahanol yn hynny o dan y cwfl, y gellir ei weithredu
fel array, ond pam, yn yr achos hwn, a wyf yn cynnig
hefyd gael elfen pen yn cynrychioli pen y rhestr,
flaen y rhestr, y person cyntaf yn unol yn y siop Apple, yn ogystal â faint?
Pam mae angen darn ychwanegol o ddata yma?
Meddyliwch yn ôl at yr hyn rhifau yn
os ydw i wedi tynnu fel a ganlyn.
Debyg mae hyn yn bellach yn ciw yn hytrach na simnai,
y gwahaniaeth yw-yn union fel y Apple siop-ciw yn deg.
Y person cyntaf yn unol ar ddechrau'r rhestr, rhif 5 yn yr achos hwn,
ef neu hi yn mynd i gael ei adael i mewn i'r siop gyntaf.
Gadewch i ni wneud hynny.
Gadewch i ni dybio bod hyn yn cyflwr fy ciw ar hyn o bryd, ac yn awr y siop Apple
agor, a'r person cyntaf, rhif 5, yn cael ei arwain i mewn i'r siop.
Sut ydw i'n newid y darlun yn awr yr wyf wedi dad-ciwio y person cyntaf
ar flaen y llinell?
Beth sy'n bod? >> [Myfyrwyr] Newid y ciw.
Newid y pennaeth, hynny 5 diflannu.
Mewn gwirionedd, mae'n fel pe-sut orau i wneud hyn?
Mewn gwirionedd, mae fel bod y boi yn diflannu.
Beth fyddai rhif 7 yn ei wneud mewn siop go iawn?
Byddent yn cymryd cam mawr ymlaen.
>> Ond beth ydym ni wedi dod i werthfawrogi pan ddaw i araeau
a symud pethau o gwmpas?
Dyna fath o wastraff o'ch amser, dde?
Pam mae'n rhaid i chi fod mor rhefrol mwyn cael y person cyntaf
ar ddechrau'r llinell yn gorfforol ddechrau'r darn o gof?
Mae hynny'n gwbl ddiangen. Pam?
Beth allwn i jyst yn cofio yn lle hynny? >> [Anghlywadwy ymateb y myfyrwyr]
Yn union, gallai Fi jyst yn cofio gyda'r pennaeth aelod ychwanegol data
sydd bellach yn bennaeth y rhestr bellach yn 0, yr oedd funud yn ôl.
Nawr, mae'n mewn gwirionedd y rhif 1. Yn y modd hwn, byddaf yn cael optimization bach.
Dim ond am fy mod i wedi dad-ciwio rhywun o linell ar ddechrau'r unol yn y siop Apple
nid yw'n golygu rhaid i bawb symud, a oedd yn galw i gof yn llawdriniaeth llinol.
Gallaf yn hytrach yn treulio amser yn gyson yn unig
ac yn eu cyflawni yna ymateb yn llawer cyflymach.
Ond mae'r pris rwy'n ei dalu yw beth i'w ennill y perfformiad ychwanegol
ac nid yn gorfod symud i bawb?
Yeah. >> [Anghlywadwy ymateb y myfyrwyr]
A all ychwanegu mwy o bobl, yn dda, bod problem yn orthogonal
at y ffaith nad ydym yn symud pobl o gwmpas.
Mae'n dal i fod yn array, felly a ydym yn symud pawb neu beidio-
oh, yr wyf yn gweld beth ydych yn ei olygu, iawn.
A dweud y gwir, yr wyf yn cytuno â'r hyn yr ydych yn ei ddweud ei fod yn bron fel pe
ni fyddwn byth yn yn awr yn mynd i ddefnyddio'r cychwyn y casgliad anymore
oherwydd os byddaf yn dileu 5, yna byddaf yn ei ddileu 7.
Ond dim ond rhoi pobl ar y dde.
>> Mae'n teimlo fel mod i'n gwastraffu gofod, ac yn y pen draw fy ciw ymddatod i ddim o gwbl,
er mwyn i ni dim ond cael pobl cofleidiol,
a gallem feddwl am y casgliad mewn gwirionedd fel rhyw fath o strwythur cylchlythyr,
ond rydym yn defnyddio'r hyn gweithredwr yn C i wneud y math yna o cofleidiol?
[Ymateb y myfyrwyr Anghlywadwy] >> Y gweithredwr modwlo.
Byddai'n blino ychydig i feddwl yn ofalus sut ydych chi'n ei wneud y cofleidiol,
ond gallem ei wneud, ac y gallem ddechrau rhoi pobl yn yr hyn a arferai fod yn y tu blaen y llinell,
ond rydym yn unig cofio gyda newidyn hwn pennaeth sydd bennaeth gwirioneddol y llinell mewn gwirionedd.
Beth os, yn hytrach, ein nod yn y pen draw, fodd bynnag,
oedd edrych i fyny niferoedd, fel y gwnaethom yma ar y llwyfan gyda Anita,
ond mae gwir am gael y gorau o'r holl fyd?
Rydym am soffistigedig yn fwy na amrywiaeth yn caniatáu
oherwydd ein bod am i'r gallu i dyfu yn ddeinamig y strwythur data.
Ond nid ydym am gael troi at rywbeth yr ydym yn nodi
nid yn y ddarlith gyntaf yn algorithm gorau posibl,
bod y chwiliad llinol.
Mae'n troi allan y gallwch, mewn gwirionedd, yn cyflawni'r
neu o leiaf yn agos at cysonyn amser, lle rhywun fel Anita,
os bydd yn configures ei strwythur data beidio â fod yn rhestr cysylltiedig,
Nid yw peidio â bod yn stac, i fod yn ciw, gallai, mewn gwirionedd,
dod o hyd i strwythur data sy'n caniatáu iddi edrych i fyny pethau,
hyd yn oed geiriau, nid yn unig rhifau, yn yr hyn y byddwn yn galw cysonyn amser.
>> Ac yn wir, wrth edrych ymlaen, un o'r psets yn y dosbarth hwn bron bob amser yn
yn gweithredu gwiriwr sillafu, lle
byddwn yn rhoi chi eto rhai geiriau 150,000 Saesneg a'r nod yw
lwytho rhai i mewn cof ac yn gyflym yn gallu ateb cwestiynau ar y ffurflen
yn y gair hwn sillafu'n gywir?
A fyddai'n wir yn sugno os bu'n rhaid i chi ailadrodd drwy bob 150,000 o eiriau i ateb hynny.
Ond, mewn gwirionedd, byddwn yn gweld y gallwn wneud hynny mewn amser iawn, yn gyflym iawn.
Ac mae'n mynd i olygu rhywbeth gweithredu o'r enw tabl hash,
ac er ar yr olwg gyntaf y peth hyn a elwir yn tabl hash yn mynd i
gadewch i ni gyflawni'r rhain amseroedd ymateb cyflym super,
mae'n troi allan bod mewn gwirionedd yn broblem.
Pan ddaw amser i weithredu y peth hyn a elwir yn-unwaith eto, fy mod yn gwneud hynny eto.
Fi yw'r unig un yma.
Pan ddaw amser i weithredu'r peth hyn a elwir tabl hash,
rydym yn mynd i gael i wneud penderfyniad.
Sut y dylai fawr y peth hyn mewn gwirionedd fod?
A phan fyddwn yn dechrau niferoedd mewnosod i mewn i hyn tabl hash,
sut ydym yn mynd i'w storio yn y fath fodd
y gallwn eu cael yn ôl allan mor gyflym ag y cawsom i mewn?
Ond byddwn yn gweld cyn bo hir bod y cwestiwn hwn o
pryd fydd pen-blwydd pawb yn y dosbarth fod yn eithaf bwys yn.
Mae'n troi allan bod yn yr ystafell hon, rydym wedi cael ychydig gannoedd o bobl,
felly mae'r tebygolrwydd bod dau ohonom yn cael yr un pen-blwydd yn ôl pob tebyg yn eithaf uchel.
Beth os nad oedd ond 40 ohonom yn yr ystafell hon?
Beth yw'r tebygolrwydd o ddau o bobl yn cael yr un pen-blwydd?
[Mae myfyrwyr yn] dros 50%.
Yeah, roedd dros 50%. Yn wir, yr wyf hyd yn oed yn dod â siart.
Mae'n troi allan-ac mae hyn yn wir dim ond gipolwg ymlaen preview-
os oes dim ond 58 ohonom yn yr ystafell hon, y tebygolrwydd o 2 ohonom
cael yr un pen-blwydd yn hynod o uchel, bron i 100%,
ac mae hynny'n mynd i achosi criw cyfan o brifo i ni ar ddydd Mercher.
>> Gyda dweud hynny, gadewch i ni ohirio yma. Byddwn yn eich gweld ar ddydd Mercher.
[Cymeradwyaeth]
[CS50.TV]