[Powered by Google Translate] [Adran 6] [Mwy cyfforddus]
[Rob Bowden] [Harvard University]
[Mae hyn yn CS50.] [CS50.TV]
>> Gallwn pennaeth i'n hadran o gwestiynau.
Yr wyf yn anfon y URL ar gyfer y gofod o'r blaen.
Mae'r ddechrau'r adran o'r cwestiynau yn dweud-
ymddengys nad wyf ddim yn hollol unsick-yn gwestiwn hawdd iawn
dim ond hyn a valgrind?
Beth mae valgrind ei wneud?
Dylai unrhyw un sydd eisiau i ddweud beth valgrind ei wneud?
[Myfyrwyr] Gwiriadau cof gollwng.
Yeah, valgrind yn gwiriwr cof cyffredinol.
It, yn y pen draw, yn dweud wrthych os oes gennych unrhyw ollyngiadau cof,
sydd yn bennaf yr hyn rydym yn ei ddefnyddio ar gyfer oherwydd os ydych am i
gwneud yn dda yn y set broblem neu os ydych eisiau
mynd ar y bwrdd mawr, mae angen i chi gael unrhyw ollyngiadau cof o gwbl,
a rhag ofn bod gennych ollyngiad cof na allwch ddod o hyd,
hefyd yn cadw mewn cof bod pryd bynnag y byddwch yn agor ffeil
ac os nad ydych yn cau, dyna yn gollwng cof.
>> Mae llawer o bobl yn chwilio am rai nod nad ydynt yn rhyddhau
pan mewn gwirionedd, nid oeddent yn cau'r geiriadur yn y cam cyntaf.
Mae hefyd yn dweud wrthych os oes gennych unrhyw annilys darllen neu ysgrifennu,
sy'n golygu os byddwch yn ceisio gosod gwerth
dyna y tu hwnt i ddiwedd y domen ac nid yw'n digwydd i fai seg
ond valgrind dal, fel na ddylech yn ysgrifennu mewn gwirionedd yno,
ac felly nad ydych yn sicr ddylai gael unrhyw un o'r rheini chwaith.
Sut ydych chi'n ei ddefnyddio valgrind?
>> Mae'n gwestiwn cyffredinol o
fath o redeg ac yn edrych ar yr allbwn.
Mae'r allbwn yn llethol llawer o weithiau.
Mae hefyd gwallau hwyl lle os oes gennych rhywbeth mawr o'i le
digwydd mewn cylch, yna bydd yn y pen draw yn dweud, "wallau Way gormod.
Rydw i'n mynd i roi'r gorau i gyfrif yn awr. "
Mae'n bôn allbwn testunol bod rhaid i chi dosrannu.
Yn y pen draw, bydd yn dweud wrthych unrhyw ollyngiadau cof sydd gennych,
faint o flociau, a all fod yn ddefnyddiol oherwydd
os yw'n un unfreed bloc, yna fel arfer mae'n haws i ddod o hyd i
na 1,000 o flociau unfreed.
1000 blociau unfreed yn ôl pob tebyg yn golygu nad ydych yn rhyddhau
eich rhestrau cysylltu'n briodol neu rywbeth.
Dyna valgrind.
>> Nawr rydym wedi ein adran o gwestiynau,
nad oes angen i chi lawrlwytho.
Gallwch glicio ar fy enw a'u tynnu i fyny yn y gofod.
Nawr cliciwch ar mi.
Bydd Revision 1 yn stac, yr ydym yn ei wneud yn gyntaf.
Bydd Diwygiad 2 yn ciw, a bydd Revision 3 yn y rhestr yn unigol cysylltiedig.
Dechrau off gyda'n simnai.
Fel y mae'n dweud yma, pentwr yn un o'r rhai mwyaf sylfaenol,
strwythurau data sylfaenol o wyddoniaeth gyfrifiadurol.
Mae'r enghraifft iawn prototypical yn
y pentwr o hambyrddau yn y neuadd fwyta.
Mae'n bôn pryd bynnag y byddwch yn cael eu cyflwyno i stac,
rhywun yn mynd i ddweud, "O, fel pentwr o hambyrddau."
Stacio yr hambyrddau i fyny.
Yna, pan fyddwch yn mynd i dynnu hambwrdd,
yr hambwrdd cyntaf sy'n cael ei dynnu yw'r un olaf a gafodd ei roi ar y corn.
Mae'r stac hefyd-fel ei fod yn dweud yma-
gennym y segment o gof a elwir yn y pentwr.
A pham mae'n cael ei alw y pentwr?
>> Oherwydd fel data pentwr strwythur,
mae'n gwthio a pops fframiau stac ar y simnai,
lle mae fframiau stac sydd fel galwad benodol o swyddogaeth.
Ac fel pentwr, bydd gennych bob amser i ddychwelyd
o alwad swyddogaeth cyn y gallwch fynd i lawr i mewn i fframiau stac yn is eto.
Ni allwch gael bar galwadau galwadau prif foo a dychwelyd bar yn uniongyrchol brif.
Mae bob amser yn rhaid i ddilyn y pentwr cywir gwthio a popping.
Mae'r ddau gweithrediadau, fel y dywedais, yn gwthio a pop.
Mae'r rhain yn dermau cyffredinol.
Dylech wybod gwthio a pop o ran y pentyrrau ni waeth beth.
Byddwn yn gweld ciwiau yn fath o wahanol.
Nid oes mewn gwirionedd yn cael tymor cyffredinol, ond mae gwthio a pop yn gyffredinol ar gyfer pentyrrau.
Push yn cael ei roi yn unig ar y pentwr.
Pop yn cymryd oddi ar y pentwr.
Ac rydym yn gweld yma, rydym wedi ein corn strwythur typedef,
felly mae gennym llinynnau ** torgoch.
Peidiwch â chael ofn gan unrhyw **.
Mae hyn yn mynd i roi diwedd ar i fyny fod yn amrywiaeth o dannau
neu amrywiaeth o awgrymiadau i gymeriadau, lle
awgrymiadau i gymeriadau yn tueddu i fod llinynnau.
Nid oes raid iddo fod llinynnau, ond yma, maen nhw'n mynd i fod yn llinynnau.
>> Mae gennym amrywiaeth o linynnau.
Mae gennym faint, sy'n cynrychioli faint o elfennau hyn o bryd ar y simnai,
ac yna mae gennym y capasiti, a dyna sut y gall llawer o elfennau ar y pentwr.
Dylai'r gallu dechrau fel rhywbeth mwy nag 1,
ond mae maint yn mynd i ddechrau fel 0.
Yn awr, mae yn y bôn tair ffordd wahanol y gallwch chi feddwl am pentwr.
Wel, mae yna fwy na thebyg, ond y ddau brif ffordd yn
gallwch ei rhoi ar waith drwy ddefnyddio amrywiaeth eang, neu gallwch ei weithredu gan ddefnyddio rhestr cysylltiedig.
Rhestrau cysylltiedig yn fath o ddibwys i wneud pentyrrau o.
Mae'n hawdd iawn i wneud pentwr defnyddio rhestrau cysylltiedig,
felly yma, rydym yn mynd i wneud pentwr defnyddio araeau,
ac yna defnyddio araeau, mae hefyd dwy ffordd y gallwch chi feddwl am y peth.
Cyn, pan ddywedais mae gennym gapasiti ar gyfer y simnai,
fel y gallwn gynnwys elfen ar y pentwr.
>> Mae'r un ffordd y gallai ddigwydd yw cyn gynted ag y byddwch yn taro 10 elfen, yna rydych chi'n ei wneud.
Efallai y byddwch yn gwybod bod yna uchaf rhwymo o 10 pethau yn y byd
na fydd gennych fwy na 10 peth ar eich simnai,
ac os felly gallwch gael uchaf rhwymo ar faint eich pentwr.
Neu fe allech chi gael eich pentwr yn cael ei ddirfawr,
ond os ydych yn gwneud amrywiaeth, mae hynny'n golygu bod bob tro byddwch yn taro 10 elfen,
yna rydych chi'n mynd i gael i dyfu i 20 elfen, a phan fyddwch yn cyflawni 20 elfen,
ydych chi'n mynd i gael i dyfu eich amrywiaeth i 30 elfen neu 40 elfen.
Rydych yn mynd i angen i gynyddu capasiti, a dyna beth ydym yn mynd i'w wneud yma.
Bob tro sengl rydym yn cyrraedd y maint mwyaf o'n simnai,
pan fyddwn yn gwthio rhywbeth arall ymlaen, rydym yn mynd i angen i gynyddu capasiti.
Yma, rydym wedi datgan gwthio fel gwthio bool (torgoch * str).
Str * Torgoch yn y llinyn yr ydym yn eu gwthio ar y pentwr,
a dim ond yn dweud bool a ydym yn llwyddo neu wedi methu.
>> Sut y byddwn yn methu?
Beth yw'r unig amgylchiad y gallwch chi feddwl am
lle y byddai angen i ni ddychwelyd ffug?
Yeah.
[Myfyrwyr] Os yw'n llawn ac rydym yn defnyddio weithredu ffinio.
Yeah, felly sut ydym yn diffinio-efe a atebodd
os yw'n llawn ac rydym yn defnyddio gweithredu ffinio.
Yna byddwn yn bendant yn dychwelyd ffug.
Cyn gynted ag y byddwn yn cyrraedd 10 peth yn yr amrywiaeth, ni allwn ffitio 11, felly rydym yn dychwelyd ffug.
Beth os caiff ei ddirfawr? Yeah.
Os nad ydych yn gallu ehangu yr amrywiaeth am ryw reswm.
Yeah, felly cof yn adnodd cyfyngedig,
ac yn y pen draw, os byddwn yn cadw pethau'n wthio ar y pentwr drosodd a throsodd,
rydym yn mynd i geisio dyrannu amrywiaeth mwy i gyd-fynd
y gallu mwy o faint, a malloc neu beth bynnag rydym yn ei ddefnyddio yn mynd i ddychwelyd ffug.
Wel, bydd malloc dychwelyd null.
>> Cofiwch, bob tro chi erioed wedi galw malloc, dylech fod yn edrych i weld a yw'n
dychwelyd null neu arall sy'n didyniad cywirdeb.
Gan ein bod am gael stac diderfyn,
yr achos yn unig yr ydym yn mynd i gael ei dychwelyd ffug yw os ydym yn ceisio
cynyddu gallu a malloc neu beth bynnag yn dychwelyd ffug.
Yna pop yn cymryd unrhyw ddadleuon,
ac yn dychwelyd y llinyn sydd ar ben y pentwr.
Beth bynnag oedd fwyaf diweddar gwthio ar y pentwr yw'r hyn pop yn dychwelyd,
ac mae hefyd yn tynnu oddi wrth y pentwr.
Ac yn sylwi ei fod yn dychwelyd null os nad oes dim ar y pentwr.
Mae bob amser yn bosibl bod y pentwr yn wag.
Yn Java, os ydych chi'n arfer â hynny, neu ieithoedd eraill,
Gallai ceisio pop o stac gwag yn achosi eithriad neu rywbeth.
>> Ond yn C, null yn fath o lawer o'r achosion sut rydym yn trin y problemau hyn.
Dychwelyd null yw sut yr ydym yn mynd i ddangos bod y pentwr yn wag.
Rydym wedi darparu cod a fydd yn profi ymarferoldeb eich pentwr, yn
gweithredu gwthio a pop.
Ni fydd hyn yn llawer o god.
Byddaf-mewn gwirionedd, cyn i ni wneud hynny, awgrym, awgrym-
os nad ydych wedi ei weld, nid malloc yw'r unig swyddogaeth
sy'n dyrannu cof ar y domen i chi.
Mae yna deulu o swyddogaethau Dyraniad.
Y cyntaf yw malloc, yr ydych yn ei ddefnyddio i.
Yna mae calloc, sy'n gwneud yr un peth â malloc,
ond bydd yn sero popeth allan i chi.
Os ydych chi wedi bod eisiau erioed i osod popeth i null ôl mallocing rhywbeth
dylech fod wedi defnyddio dim ond calloc yn y lle cyntaf yn hytrach nag ysgrifennu
a ar gyfer dolen i sero y bloc cyfan o gof.
>> Realloc yn debyg malloc ac mae ganddo lawer o achosion arbennig,
ond yn y bôn yr hyn y realloc yn ei wneud yn
mae'n cymryd pwyntydd a oedd eisoes wedi'i ddyrannu.
Realloc yw'r swyddogaeth rydych am ei fod yn talu sylw i yma.
Mae'n cymryd pwyntydd oedd eisoes wedi'i dychwelyd o'r malloc.
Lets 'ddeud ydych yn gofyn malloc pwyntydd o 10 bytes.
Yna, yn ddiweddarach rydych yn sylweddoli eich bod am 20 bytes,
felly byddwch yn ffonio realloc ar y pwyntydd gyda 20 bytes,
a bydd realloc yn awtomatig gopïo dros bopeth i chi.
Os ydych yn Dim ond galw malloc eto, fel yr wyf yn cael bloc o 10 bytes.
Nawr mae angen bloc o 20 bytes,
felly os wyf malloc 20 bytes, yna rhaid i mi llaw gopïo dros y 10 bytes o'r peth cyntaf
i mewn i'r ail beth, ac yna rhad ac am ddim y peth cyntaf.
Bydd Realloc trin hynny i chi.
>> Sylwch ar y llofnod yn mynd i fod yn ddi-rym *,
sydd yn unig yw dychwelyd pwyntydd i'r bloc o cof,
yna ddi-rym * ptr.
Gallwch feddwl am * ddi-rym fel pwyntydd generig.
Yn gyffredinol, ni fyddwch yn delio â * ddi-rym,
ond malloc yn dychwelyd * ddi-rym, ac yna mae'n cael ei ddefnyddio yn union fel
hyn mewn gwirionedd yn mynd i fod yn * torgoch.
* Yn ddi-rym blaenorol a oedd wedi ei ddychwelyd gan malloc
yn awr yn mynd i gael ei drosglwyddo i'r realloc, ac yna maint
yw nifer newydd o bytes ydych am ddyrannu, fel bod eich capasiti newydd.
'N annhymerus' yn rhoi i chi munudau, ac yn ei wneud yn ein gofod.
Dechrau gyda Adolygu 1.
'N annhymerus' rhoi'r gorau i chi ar ôl gobeithio am digon o amser i weithredu gwthio,
ac yna byddaf yn rhoi egwyl arall i wneud pop.
Ond mae'n wir nad yw y cod llawer o gwbl.
Mae'r cod y rhan fwyaf, mae'n debyg y pethau ehangu, ymestyn y capasiti.
Iawn, dim pwysau i gael ei wneud yn gyfan gwbl,
ond cyn belled ag y byddwch yn teimlo fel eich bod ar y llwybr cywir, sy'n dda.
>> Oes gan unrhyw un unrhyw god maent yn teimlo'n gyfforddus gyda mi dynnu i fyny?
Yeah, byddaf, ond nid unrhyw un gael unrhyw god gallaf dynnu i fyny?
Iawn, a allwch chi ddechrau, ei gadw, beth bynnag ydyw?
Rwyf bob amser yn anghofio y cam hwnnw.
Iawn, gan edrych ar gwthio,
ydych chi eisiau i egluro eich cod?
[Myfyrwyr] Yn gyntaf oll, yr wyf cynyddu maint.
Amcana efallai y dylwn gael y-beth bynnag, yr wyf cynyddu maint,
ac rwy'n gweld os yw'n llai na'r gallu.
Ac os yw'n llai na'r gallu, yr wyf yn ychwanegu at yr amrywiaeth sydd gennym eisoes.
Ac os na, rwy'n lluosi y gallu gan 2,
ac yr wyf ailddyrannu'r amrywiaeth llinynnau i rywbeth gyda maint allu fwy yn awr.
Ac yna os yw hynny'n methu, mi ddweud wrth y defnyddiwr ac yn dychwelyd ffug,
ac os ei fod yn iawn, yna yr wyf yn rhoi y llinyn yn y fan a'r lle newydd.
>> [Rob B.] Hefyd yn sylwi ein bod yn defnyddio gweithredwr bitwise 'n glws yma
er mwyn lluosi â 2.
Cofiwch, newid y chwith bob amser yn mynd i gael ei lluosi â 2.
Symudiad cywir yn cael ei rhannu â 2 cyn belled ag y byddwch yn cofio ei fod yn golygu
rannu â 2 fel mewn cyfanrif wedi'i rannu â 2.
Gallai fod gwtogi'r amser o 1 yma ac acw.
Ond mae newid a adawyd gan 1 yn cael ei bob amser yn mynd i gael ei lluosi â 2,
oni bai eich bod gorlifo i ffiniau'r cyfanrif, ac yna ni bydd.
Mae sylw ochr.
Rwy'n hoffi ei wneud-hyn, nid yn mynd i newid y codio unrhyw ffordd o gwbl,
ond yr wyf yn hoffi i wneud rhywbeth fel hyn.
Mae'n mewn gwirionedd yn mynd i'w wneud yn ychydig yn hirach.
Efallai nad yw hyn yn wir perffaith i ddangos hyn,
ond yr wyf yn hoffi ei rhannu i mewn i'r blociau o-
iawn, os yw hyn os digwydd, yna yr wyf i'n mynd i wneud rhywbeth,
ac yna y swyddogaeth yn cael ei wneud.
Nid oes angen i mi yna sgroliwch fy llygaid yr holl ffordd i lawr y swyddogaeth
i weld beth sy'n digwydd ar ôl y arall.
Mae'n os bydd hyn os digwydd, yna Fi jyst dychwelyd.
Mae ganddo hefyd y fantais ychwanegol o 'n glws bopeth y tu hwnt i'r
yn awr yn symud i'r chwith unwaith.
Rwyf bellach yn rhaid i-os ydych chi erioed yn agos chwerthinllyd llinellau hir,
yna gall y 4 bytes helpu, a hefyd y rhywbeth mwy chwith yw,
y lleiaf llethu chi'n teimlo os hoffech-iawn, rhaid i mi gofio
Hyn o bryd rwy'n mewn cylch tra tu mewn y tu mewn arall o am ddolen.
Unrhyw le y gallwch wneud ffurflen hon ar unwaith, yr wyf yn fath o fel.
Mae'n hollol ddewisol ac ni ddisgwylir mewn unrhyw ffordd.
>> [Myfyrwyr] ddylid fod o faint - yn y cyflwr yn methu?
Mae'r cyflwr yn methu yma yn ein methu â realloc, felly ydy.
Sylwch sut yn y cyflwr yn methu, yn ôl pob tebyg,
oni bai ein bod pethau ddim yn ddiweddarach, rydym bob amser yn mynd i fethu
ni waeth faint o weithiau rydym yn ceisio gwthio rhywbeth.
Os byddwn yn cadw gwthio, rydym yn cadw maint incrementing,
er nad ydym yn rhoi unrhyw beth ar y pentwr.
Fel arfer nid ydym yn hicyn maint hyd nes y
ar ôl i ni wedi llwyddo i roi ar y corn.
Byddem yn gwneud hyn, dyweder, naill ai yma ac yma.
Ac yna yn hytrach na dweud s.size ≤ gallu, mae'n llai na gallu,
dim ond oherwydd ein bod wedi symud lle mae popeth yn.
>> A chofiwch, yr unig le y gallem o bosibl dychwelyd ffug
yma, lle mae realloc dychwelyd null,
ac os ydych yn digwydd i gofio gwall safonol,
efallai gallech ystyried yr achos hwn a lle rydych eisiau argraffu gwall safonol,
stderr felly fprintf hytrach na dim ond argraffu yn uniongyrchol i allan safonol.
Unwaith eto, nid yw hynny'n ddisgwyliad, ond os yw'n camgymeriad,
printf deipio, yna efallai y byddwch am ei gwneud yn argraffu i wall safonol yn lle y tu allan safonol.
>> Dylai unrhyw un gennych unrhyw beth arall i nodi? Ydw.
[Myfyrwyr] Allwch chi fynd dros y [Anghlywadwy]?
[Rob B.] Ydy, mae'r binariness gwirioneddol ohono neu beth ydyw?
[Myfyrwyr] Felly rydych yn ei luosi â 2?
[Rob B.] Yeah, yn y bôn.
Mewn tir deuaidd, rydym bob amser yn cael ein set o ddigidau.
Symud y chwith erbyn 1 yn y bôn yn mewnosod yma ar yr ochr dde.
Yn ôl i hyn, dim ond gofio bod popeth yn deuaidd
yn rym 2, felly mae hyn yn cynrychioli 2 i'r 0,
y 2 i 1, mae hyn yn 2 i 2.
Drwy fewnosod 0 i ochr dde yn awr, rydym yn unig newid popeth drosodd.
Hyn a arferai fod 2 i 0 yw bellach yn 2 i 1, wedi'i 2 i 2.
Mae'r ochr iawn ein bod fewnosod
o reidrwydd yn mynd i fod yn 0,
sy'n gwneud synnwyr.
Os ydych chi erioed lluoswch nifer gyda 2, nid yw'n mynd i roi diwedd ar i fyny rhyfedd,
felly dylai'r 2 i'r lle 0 yn 0,
a dyma'r hyn wyf yn hanner rhybuddio amdano cyn yw os ydych yn digwydd i symud
tu hwnt i'r nifer o ddarnau mewn cyfanrif,
yna mae hyn 1 yn mynd i roi diwedd ar i fyny yn mynd i ffwrdd.
Dyna yr unig bryder os digwydd i chi yn delio â galluoedd fawr iawn.
Ond ar y pwynt hwnnw, yna rydych chi'n delio gydag amrywiaeth o filiynau o bethau,
Ni allai ffitio i mewn cof beth bynnag.
>> Nawr gallwn gyrraedd pop, sydd hyd yn oed yn haws.
Gallech yn ei wneud yn hoffi os ydych yn digwydd i pop criw cyfan,
ac yn awr rydych yn hanner gallu unwaith eto.
Gallech realloc i grebachu y swm o gof sydd gennych,
ond nid oes rhaid i chi boeni am hynny, felly yr achos realloc yn unig yn mynd i fod
tyfu cof, byth yn crebachu cof,
sydd yn mynd i wneud super pop hawdd.
Nawr ciwiau, sydd yn mynd i fod fel pentyrrau,
ond y drefn y byddwch yn cymryd pethau allan yn cael ei wrthdroi.
Mae'r enghraifft prototypical o ciw yn llinell,
felly rwy'n dyfalu os oeddech yn Saesneg, byddwn wedi dweud
enghraifft prototypical o ciw yn ciw.
Felly, fel llinell, os ydych yn y person cyntaf yn unol,
ydych yn disgwyl i fod y person cyntaf allan o'r llinell.
Os mai chi yw'r person olaf yn ddiweddarach, yr ydych yn mynd i fod y person gwasanaethu diwethaf.
Rydym yn galw y patrwm hwnnw FIFO, tra stac oedd LIFO patrwm.
Mae'r rhai geiriau yn eithaf cyffredinol.
>> Fel staciau ac yn wahanol i arrays, ciwiau nad ydynt fel arfer yn caniatáu mynediad i elfennau yn y canol.
Yma, mae stac, rydym wedi gwthio a pop.
Yma, rydym yn digwydd bod, wedi galw nhw enqueue a dequeue.
Rwyf hefyd wedi clywed arnynt sef newid a unshift.
Rydw i wedi clywed pobl yn dweud gwthio a pop i hefyd yn berthnasol i ciwiau.
Rwyf wedi clywed mewnosod, dileu,
felly gwthio a pop, os ydych yn sôn am staciau, rydych yn gwthio a popping.
Os ydych chi'n sôn am ciwiau, gallwch ddewis geiriau yr ydych am ei ddefnyddio
ar gyfer gosod a thynnu, ac nid oes consensws ar yr hyn y dylid ei alw.
Ond yma, mae gennym enqueue a dequeue.
Yn awr, mae'r strwythur yn edrych bron yn union yr un fath i'r strwythur pentwr.
Ond mae'n rhaid i ni gadw golwg ar y pen.
Amcana ei fod yn dweud i lawr yma, ond pam mae angen y pen?
Mae'r prototeipiau yn y bôn union yr un fath i wthio a pop.
Gallwch feddwl amdano fel gwthio a pop.
Yr unig wahaniaeth yw pop yn dychwelyd-yn hytrach na'r olaf, mae'n dychwelyd y cyntaf.
2, 1, 3, 4, neu rywbeth.
A dyma y dechrau.
Mae ein ciw yn hollol llawn, felly mae pedair elfen ynddo.
Ddiwedd ein ciw ar hyn o bryd 2,
ac yn awr rydym yn mynd i fewnosod rhywbeth arall.
>> Pan ydym am i fewnosod bod rhywbeth arall, yr hyn a wnaethom ar gyfer y fersiwn pentwr
yn cael ei rydym yn ymestyn ein bloc o cof.
Beth yw'r broblem gyda hyn?
[Myfyrwyr] chi symud y 2.
Yr hyn a ddywedais o'r blaen am y diwedd y ciw,
nid yw hyn yn gwneud synnwyr ein bod yn dechrau am 1,
yna rydym eisiau dequeue 1, yna dequeue 3, yna dequeue 4,
yna dequeue 2, yna dequeue hwn.
Ni allwn ddefnyddio realloc yn awr,
neu o leiaf iawn, rhaid i chi ddefnyddio realloc mewn ffordd wahanol.
Ond byddwch yn debyg na ddylai dim ond yn defnyddio realloc.
Rydych yn mynd i gael i manually gopi o'ch cof.
>> Mae yna ddwy swyddogaeth i gopïo cof.
Mae memcopy a memmove.
Hyn o bryd rwy'n darllen y tudalennau dyn i weld pa un yr ydych yn mynd i eisiau ei ddefnyddio.
Iawn, memcopy, mae'r gwahaniaeth yn
bod memcopy a memmove, un yn ymdrin â'r achos yn gywir
lle rydych chi'n copïo i mewn i ranbarth sy'n digwydd i orgyffwrdd y rhanbarth
ydych yn copïo oddi wrth.
Nid Memcopy yn ei drin. Memmove yn ei wneud.
Gallwch feddwl am y broblem fel-
gadewch i ni ddweud yr wyf am ei gopïo y boi,
y pedwar i hyn guy drosodd.
Yn y diwedd, yr hyn y dylai'r casgliad edrych fel
ar ôl y copi yw 2, 1, 2, 1, 3, 4, ac yna rhai pethau ar y diwedd.
Ond mae hyn yn dibynnu ar y gorchymyn yr ydym mewn gwirionedd gopïo,
oherwydd os nad ydym yn ystyried y ffaith bod y rhanbarth rydym yn copïo i mewn i
yn gorgyffwrdd â'r un yr ydym yn yn copïo,
yna efallai y gwnawn fel cychwyn yma, copïwch y 2 yn y lle yr ydym am fynd,
yna symud ein awgrymiadau ymlaen.
>> Nawr rydym yn mynd i fod yma ac yma, ac yn awr rydym am ei gopïo
y boi dros y guy a symud ein awgrymiadau ymlaen.
Beth ydym ni'n mynd i roi diwedd ar i fyny gael yw 2, 1, 2, 1, 2, 1
yn hytrach na'r briodol 2, 1, 2, 1, 3, 4 oherwydd
2, 1 overrode y 3 gwreiddiol, 4.
Memmove ymdrin bod yn gywir.
Yn yr achos hwn, yn y bôn dim ond bob amser yn defnyddio memmove
oherwydd ei fod yn ei drin yn gywir.
Mae'n gyffredinol, nid yw'n perfformio yn waeth.
Y syniad yw yn hytrach na dechrau o'r dechrau ac anfon copi o'r ffordd
fel yr ydym yn unig oedd yma, mae'n dechrau o'r diwedd a gopïau i mewn,
ac yn yr achos hwnnw, ni allwch chi gael problem.
Nid oes unrhyw berfformiad golli.
Bob amser yn defnyddio memmove. Peidiwch byth â phoeni am memcopy.
A dyna lle rydych chi'n mynd i gael i ar wahân memmove
y gyfran lapio o gwmpas eich ciw.
Dim pryderon, os na wnaed yn gyfan gwbl.
Mae hyn yn fwy anodd na gwthio stac,, a pop.
>> Dylai unrhyw un yn cael unrhyw god gallem weithio â nhw?
Hyd yn oed os hollol anghyflawn?
[Myfyrwyr] Yeah, mae'n hollol anghyflawn, er.
Hollol anghyflawn yn iawn cyn belled ag y gallwch chi arbed-y diwygiad?
Yr wyf yn anghofio bod bob tro.
Iawn, anwybyddu beth sy'n digwydd pan mae angen i ni newid maint pethau.
Hollol anwybyddu resize.
Eglurwch y cod hwn.
Rwy'n gwirio yn gyntaf oll os yw'r maint yn llai na'r copi cyntaf o'r holl
ac yna ar ôl hynny, yr wyf mewnosoder-I gymryd pen + maint,
ac rwy'n gwneud yn siŵr ei lapio o amgylch y gallu y rhesi,
ac yr wyf mewnosoder y llinyn newydd yn y sefyllfa honno.
Yna mi gynyddu maint ac yn dychwelyd yn wir.
>> [Rob B.] Mae hyn yn bendant yn un o'r achosion hynny lle rydych yn mynd i eisiau bod yn defnyddio mod.
Unrhyw fath o achos lle rydych wedi lapio o gwmpas, os ydych yn meddwl lapio o gwmpas,
dylai'r meddwl ar unwaith fod yn mod.
Fel optimization gyflym / gwneud un eich cod llinell byrrach,
byddwch yn sylwi bod y llinell yn union ar ôl yr un yma
yn unig yw maint + +, er mwyn i chi gyfuno hynny i mewn i'r llinell, maint + +.
Nawr i lawr yma, mae gennym yr achos
lle nad oes gennym ddigon o gof,
felly rydym yn cynyddu ein gallu gan 2.
Amcana gallech gael yr un broblem yma, ond gallwn ei anwybyddu yn awr,
lle os ydych yn methu i gynyddu eich gallu,
yna rydych chi'n mynd i eisiau i leihau eich gallu gan 2 eto.
Nodyn arall byr yn union fel y gallwch ei wneud + =,
gallwch hefyd wneud << =.
Gall bron unrhyw beth yn mynd cyn hafal, + =, | =, & =, << =.
Torgoch * newydd yw ein bloc newydd o gof.
O, dros yma.
>> Beth yw barn pobl am y math o ein bloc newydd o gof?
[Myfyrwyr] Dylai fod yn ** torgoch.
Gan feddwl yn ôl at ein strwythur i fyny yma,
llinynnau hyn yr ydym yn ailddyrannu.
Rydym yn gwneud storio deinamig gyfan newydd ar gyfer yr elfennau yn y ciw.
Beth ydym ni'n mynd i gael ei neilltuo ar eich llinynnau hyn yr ydym ni'n mallocing ar hyn o bryd,
ac felly newydd yn mynd i fod yn ** torgoch.
Mae'n mynd i fod yn amrywiaeth o linynnau.
Yna, beth yw'r achos o dan yr ydym yn mynd i ddychwelyd ffug?
[Myfyrwyr] A ddylem ni fod yn gwneud y * torgoch?
[Rob B.] Ie, ffoniwch da.
[Myfyrwyr] Beth oedd hynny?
[Rob B.] Rydym yn awyddus i wneud faint o * torgoch oherwydd nad ydym bellach yn-
byddai hyn mewn gwirionedd fod yn broblem fawr iawn oherwydd y byddai sizeof (torgoch) fydd 1.
Sizeof cols * yn mynd i fod yn 4,
felly mae llawer o adegau pan fyddwch yn delio â ints,
rydych yn tueddu i fynd i ffwrdd ag ef oherwydd maint int a maint o * int
ar system 32-bit yn mynd i fod yr un peth.
Ond yma, sizeof (golosg) a sizeof (char *) yn awr yn mynd i fod yr un peth.
>> Beth yw'r amgylchiadau lle byddwn yn dychwelyd ffug?
[Myfyrwyr] Newydd yn null.
Yeah, os yn newydd yn null, byddwn yn dychwelyd ffug,
ac rydw i'n mynd i daflu i lawr yma-
[Myfyrwyr] [Anghlywadwy]
[Rob B.] Yeah, mae hyn yn iawn.
Gallech naill ai wneud 2 waith gallu neu 1 sifft gallu ac wedyn dim ond gosod i lawr yma neu beth bynnag.
Byddwn yn gwneud hynny wrth i ni wedi hynny.
Gallu >> = 1.
Ac nad ydych yn mynd i gael i chi boeni am golli yr 1 lle
oherwydd i chi adael symud erbyn 1, felly mae'r 1 lle o reidrwydd yn 0,
ac felly, symud erbyn 1, rydych yn dal yn mynd i fod yn iawn.
[Myfyrwyr] Oes angen i chi wneud hynny cyn dychwelyd?
[Rob B.] Ydy, mae hyn yn gwneud unrhyw synnwyr o gwbl.
>> Nawr cymryd yn ganiataol ein bod yn mynd i roi diwedd ar i fyny dychwelyd wir hyd y diwedd.
Mae'r ffordd yr ydym yn mynd i wneud y memmoves,
mae angen i ni fod yn ofalus sut yr ydym yn eu gwneud.
Oes gan unrhyw un unrhyw awgrymiadau ar gyfer sut yr ydym yn eu gwneud?
Dyma ein dechrau.
Yn anochel, yn awyddus i ddechrau ar y dechrau unwaith eto
pethau copi ac i mewn o yno, 1, 3, 4, 2.
Sut ydych chi'n gwneud hynny?
Yn gyntaf, rhaid i mi edrych ar y dudalen dyn am memmove eto.
Memmove, trefn dadleuon bob amser yn bwysig.
Rydym am i'n cyrchfan gyntaf,, ail drydedd ffynhonnell maint.
Mae yna lawer o swyddogaethau sy'n gwrthdroi ffynhonnell a chyrchfan.
Cyrchfan, ffynhonnell yn tueddu i fod yn gyson braidd.
Move, beth y mae'n ei dychwelyd?
Yn dychwelyd pwyntydd i gyrchfan, am ba bynnag reswm efallai y byddwch am hynny.
Gallaf llun ei ddarllen, ond rydym yn awyddus i symud i mewn ein cyrchfan.
>> Beth yw ein cyrchfan yn mynd i fod?
[Myfyrwyr] Newydd.
[Rob B.] Ie, a lle yr ydym yn copïo o?
Y peth cyntaf, rydym yn copïo mae'r 1, 3, 4.
Beth yw hyn-1, 3, 4.
Beth yw cyfeiriad y 1?
Beth yw cyfeiriad y bod 1?
[Myfyrwyr] [Anghlywadwy]
[Rob B.] + Pennaeth y cyfeiriad yr elfen gyntaf.
Sut ydym yn cael yr elfen gyntaf yn yr amrywiaeth?
[Myfyrwyr] Ciw.
[Rob B.] Ydy, q.strings.
Cofiwch, yma, ein pen yw 1.
Asio hynny. Fi jyst yn meddwl ei fod yn hudol-
Yma, mae ein pen yw 1. Rydw i'n mynd i newid fy lliw hefyd.
A dyma yw llinynnau.
Mae hyn, gallwn naill ai ysgrifennu fel y gwnaethom dros yma
gyda phenaethiaid + q.strings.
Mae llawer o bobl hefyd yn ysgrifennu ac q.strings [pen].
Nid yw hyn yn wir yn llai effeithlon.
Efallai y byddwch yn meddwl am y peth gan eich bod yn dereferencing ac yna cael y cyfeiriad,
ond y compiler yn mynd i ei gyfieithu i'r hyn oedd gennym o'r blaen beth bynnag, q.strings + pen.
Naill ffordd neu'r llall ydych am i feddwl am y peth.
>> A faint o bytes ydym am ei gopïo?
[Myfyrwyr] Gallu - pen.
Gallu - pen.
Ac yna gallech bob amser yn ysgrifennu nodi enghraifft
i chyfrif i maes os sy'n iawn.
[Myfyrwyr] Mae angen i gael ei rannu 2 yna.
Yeah, felly mae'n debyg y gallem eu defnyddio maint.
Rydym yn dal i gael faint yw-
ddefnyddio maint, mae gennym un maint i 4.
Mae ein maint yw 4. Mae ein pen yn 1.
Rydym eisiau copïo'r rhain 3 elfen.
Dyna'r bwyll gwirio bod maint - pen yn gywir 3.
A dod yn ôl yma, fel y dywedasom o'r blaen,
os ydym yn defnyddio capasiti, yna byddai'n rhaid i ni rannu â 2
oherwydd ein bod wedi tyfu yn barod ein gallu, felly yn lle, rydym yn mynd i ddefnyddio maint.
Bod copïau gyfran honno.
Nawr, rydym angen i chi gopïo y rhan arall, mae'r gyfran sy'n weddill o'r dechrau.
>> Mae hynny'n mynd i mewn i'r hyn memmove sefyllfa?
[Myfyrwyr] maint Plus - pen.
Ie, felly rydym wedi copïo eisoes o ran maint - bytes pen,
ac felly os ydym am gopïo'r bytes gweddill yn newydd
ac yna faint minws-yn dda, y nifer o bytes rydym wedi copïo eisoes mewn
Ac yna pan rydym yn copïo o?
[Myfyrwyr] Q.strings [0].
[Rob B.] Ydy, q.strings.
Gallem naill ai wneud a q.strings [0].
Mae hyn yn sylweddol llai cyffredin na hyn.
Os mai dim ond yn mynd i fod yn 0, yna byddwch yn tueddu i weld q.strings.
Dyna lle'r ydym yn copïo o.
Faint o bytes ydym wedi gadael i gopïo? >> [Myfyrwyr] 10.
Hawl.
[Myfyrwyr] A oes rhaid i luosi 5-10 gwaith yn fwy na maint y bytes neu rywbeth?
Yeah, felly mae hwn yn lle-beth yn union yr ydym yn copïo?
[Myfyrwyr] [Anghlywadwy]
Beth yw y math o beth rydym yn copïo?
[Myfyrwyr] [Anghlywadwy]
Yeah, felly mae'r torgoch * s ein bod yn copïo, nid ydym yn gwybod lle y rhai yn dod.
Wel, lle maent yn cyfeirio at, fel y llinynnau, rydym yn y pen draw gwthio ar y ciw
neu enqueuing ar y ciw.
Pan fydd y rhai yn dod o, nid oes gennym unrhyw syniad.
Rydym yn unig Mae angen i gadw golwg ar * torgoch s eu hunain.
Nid ydym am i gopïo faint - bytes pen.
Rydym yn awyddus i gopïo faint - pen * s torgoch,
felly rydym yn mynd i luosi hyn drwy sizeof (torgoch *).
Yr un i lawr yma, pen * sizeof (torgoch *).
>> [Myfyrwyr] Beth am [Anghlywadwy]?
Mae'r hawl yma?
[Myfyrwyr] Na, isod, ar y maint - pen.
[Rob B.] Mae'r hawl yma?
Rhifyddeg Pointer.
Sut y rhifyddeg pwyntydd yn mynd i'r gwaith yn
'n awtomatig lluosi gan faint y math ein bod yn delio â hwy.
Yn union fel dros yma, newydd + (maint - pen)
yn union gyfwerth â & [size - pennaeth] newydd
hyd nes y byddwn yn disgwyl i hynny weithio yn gywir,
oherwydd os ydym yn delio gydag amrywiaeth int, yna nid ydym yn ei wneud mynegai int-
neu os yw'n maint o 5 a ydych am i'r elfen 4ydd, yna rydym mynegai i mewn i'r
int array [4].
Rydych peidiwch-[4] * faint o int.
Sy'n delio â'r gwaith yn awtomatig, ac mae'r achos hwn
yn llythrennol cyfatebol, felly y gystrawen braced
yn unig yn mynd i gael eu trosi i hyn cyn gynted ag y byddwch yn llunio.
Mae hynny'n rhywbeth mae angen i chi fod yn ofalus o hynny
pan fyddwch yn ychwanegu maint - pen
ydych yn ei ychwanegu nad yw un beit.
Rydych yn ychwanegu un * torgoch, a all fod yn un bytes neu beth bynnag.
>> Cwestiynau eraill?
Iawn, dequeue yn mynd i fod yn haws.
Byddaf yn rhoi munud i weithredu.
O, ac yr wyf yn dyfalu mai dyma'r un sefyllfa lle mae
hyn y mae'r achos enqueue, os ydym yn enqueuing null,
efallai yr ydym am ei ymdrin ag ef, efallai nad ydym yn ei wneud.
Ni fyddwn yn gwneud hynny eto yma, ond un ein hachos stac.
Os byddwn yn enqueue null, efallai y byddwn am ei diystyru.
Dylai unrhyw un gael rhywfaint o god gallaf dynnu i fyny?
[Myfyrwyr] Fi jyst wedi dequeue.
Fersiwn 2 yw bod-iawn.
Ydych am esbonio?
[Myfyrwyr] Yn gyntaf, byddwch yn gwneud yn siŵr bod rhywbeth yn y ciw
a bod y maint yn mynd i lawr 1.
Mae angen i chi wneud hynny, ac yna byddwch yn dychwelyd y pen
ac yna symud y pen i fyny 1.
Iawn, felly mae achos cornel rhaid i ni ystyried. Yeah.
[Myfyrwyr] Os yw eich pen ar yr elfen olaf,
yna nad ydych am pen i bwynt y tu allan y rhesi.
>> Yeah, hynny cyn gynted fel pennaeth yn taro'r diwedd ein amrywiaeth,
pan fyddwn yn dequeue, dylai ein pen yn cael ei modded yn ôl i 0.
Yn anffodus, ni allwn wneud hynny mewn un cam.
Amcana y ffordd y byddwn yn ôl pob tebyg atgyweiria ei fod yn
mae hyn yn mynd i fod yn * torgoch, yr hyn rydym yn dychwelyd,
beth bynnag yw eich enw amrywiol am fod.
Yna, rydym yn awyddus i mod pen gan ein gallu
ac yna dychwelyd RET.
Mae llawer o bobl yma y gallent ei wneud-
hyn yn wir o-you'll gweld pobl ei wneud os pen
yn fwy na gallu, yn gwneud pen - gallu.
A dyna 'jyst yn gweithio ar yr hyn mod yn.
Cynhwysedd Pennaeth = mod yn llawer glanach
o lapio o gwmpas na phe pen yn fwy na pen gallu - allu.
>> Cwestiynau?
Iawn, y peth olaf yr ydym wedi gadael yw ein rhestr cysylltiedig.
Efallai y byddwch yn ei ddefnyddio i rai o'r ymddygiad rhestr gysylltu pe baech yn gwneud
cysylltiedig rhestrau yn eich tablau hash, pe baech yn gwneud tabl hash.
Rwyf yn argymell yn gryf gwneud hash tabl.
Efallai eich bod eisoes wedi gwneud trie,
ond mae cais yn fwy anodd.
Mewn theori, maen nhw'n asymptotically well.
Ond dim ond yn edrych ar y bwrdd mawr,
ac yn ceisio gwneud yn well byth, a byddant yn codi mwy o gof.
Popeth am geisio dod i ben i fyny fod yn waeth ar gyfer mwy o waith.
Mae'n beth David Malan yn ateb bob amser yw
mae e bob amser yn ei swyddi ateb trie, a gadewch i ni weld lle ar hyn o bryd.
Beth oedd ef o dan, David J?
Mae'n # 18, felly nid dyna ofnadwy o ddrwg,
ac mae hynny'n mynd i fod yn un o'r rhai gorau yn ceisio gallwch feddwl
neu un o'r rhai gorau yn ceisio o trie.
Nid yw'n hyd yn oed ei ateb gwreiddiol?
Rwy'n teimlo fel atebion trie yn tueddu i fod yn fwy yn yr ystod o RAM defnydd.
>> Ewch i lawr at y top iawn, ac RAM defnydd yn y digidau sengl.
Ewch i lawr tuag at y gwaelod, ac yna byddwch yn dechrau gweld ceisio
lle rydych yn cael defnydd RAM yn hollol enfawr,
a geisiau yn fwy anodd.
Nid yn gyfan gwbl yn werth yr ymdrech, ond yn brofiad addysgol pe baech yn gwneud un.
Y peth olaf yw ein rhestr cysylltiedig,
ac mae'r rhain yn dri pheth, staciau, ciwiau, a rhestrau cysylltiedig,
unrhyw beth yn y dyfodol chi erioed wedi ei wneud mewn gwyddoniaeth gyfrifiadurol
Bydd cymryd yn ganiataol eich yn gyfarwydd â'r pethau hyn.
Maent yn unig mor sylfaenol i bopeth.
>> Cysylltiedig rhestrau, ac yma yr ydym wedi restr cysylltu unigol yn mynd i fod yn ein rhoi ar waith.
Beth mae cysylltu unigol yn golygu yn hytrach na chysylltu dwbl? Ydw.
[Myfyrwyr] Dim ond yn cyfeirio at y pwyntydd nesaf yn hytrach nag i'r awgrymiadau,
fel yr un o'i blaen ac un ar ei ôl.
Yeah, felly ar ffurf llun, beth wnes i jyst yn ei wneud?
Mae gen i ddau beth. Mae gen i lun a llun.
O ran ffurf llun, mae ein rhestrau cysylltiedig yn unigol,
yn anochel, mae gennym rhyw fath o syniad inni am y pennaeth ein rhestr,
ac yna o fewn ein rhestr, rydym yn unig yn cael awgrymiadau,
ac efallai bod hyn pwyntiau i'w null.
Mae'n mynd i fod yn eich llun nodweddiadol o restr unigol cysylltiedig.
Mae rhestr gysylltiedig ddwbl, gallwch fynd yn ôl.
Os byddaf yn rhoi i chi unrhyw nod yn y rhestr, yna allwch o reidrwydd gael i
unrhyw nod arall yn y rhestr os yw'n rhestr gysylltu ddwbl.
Ond os byddaf yn mynd â chi y nod yn drydydd yn y rhestr ac mae'n rhestr sy'n gysylltiedig unigol,
unrhyw ffordd rydych chi'n byth yn mynd i gyrraedd y nodau cyntaf a'r ail.
Ac mae budd-daliadau a niweidiau, ac un un amlwg
yn eich cymryd mwy o faint, ac mae'n rhaid i chi gadw golwg ar y pethau hyn yn pwyntio yn awr.
Ond dim ond gofalu am gysylltu'n unigol.
>> Mae ychydig o bethau rydym yn mynd i gael eu gweithredu.
Eich nod strwythur typedef, int i: strwythur nod * nesaf; nod.
Y dylid typedef cael ei losgi i mewn i'ch meddyliau.
Dylid Cwis 1 yn hoffi rhoi typedef o nod rhestr cysylltiedig,
a dylech fod yn gallu ysgrifennu arno ar unwaith i lawr y
heb hyd yn oed feddwl am y peth.
Amcana cwestiynau cwpl, pam mae angen strwythur yma?
Pam na allwn ni ddweud * nod?
[Myfyrwyr] [Anghlywadwy]
Yeah.
Yr unig beth sy'n diffinio nod fel peth
yw'r typedef ei hun.
Ond fel y pwynt hwn, pan fyddwn yn fath o dosrannu drwy'r nod strwythur diffiniad,
Nid ydym wedi gorffen ein typedef eto, felly gan nad yw'r typedef wedi dod i ben,
Nid yw nôd yn bodoli.
Ond strwythur nod yn ei wneud, ac mae hyn yn nod yn y fan hon,
gallai hyn hefyd gael ei alw yn ddim arall.
Gallai hyn gael ei alw n.
Gellid ei galw'n nod rhestr cysylltiedig.
Gellid ei alw yn ddim.
Ond mae hyn yn nod strwythur angen galw yr un peth gan fod hyn yn nod strwythur.
Beth ydych yn galw hyn hefyd fod yn fan hyn,
ac felly bod hefyd yn ateb yr ail bwynt y cwestiwn
a dyna pam-a llawer o weithiau pan fyddwch yn gweld structs a typedefs o structs,
byddwch yn gweld structs dienw lle byddwch yn gallu gweld strwythur typedef,
gweithredu, geiriadur strwythur, neu beth bynnag.
>> Pam yma mae angen i ni ddweud nod?
Pam na all fod yn strwythur ddienw?
Mae bron yr un ateb.
[Myfyrwyr] Mae angen i chi gyfeirio ato o fewn y strwythur.
Yeah, o fewn y strwythur, mae angen i chi gyfeirio at y strwythur ei hun.
Os na fyddwch yn rhoi strwythur enw, os ei fod yn strwythur ddienw, ni allwch gyfeirio ato.
Ac yn olaf ond nid lleiaf-y rhain i gyd fod braidd yn syml,
a dylent eich helpu i wireddu os ydych yn ysgrifennu hyn i lawr
eich bod yn gwneud rhywbeth o'i le os nad y mathau hyn o bethau yn gwneud synnwyr.
Yn olaf ond nid lleiaf, pam mae hyn yn rhaid i fod yn * nod strwythur?
Pam na ellir 'i jyst yn ei strwythur nod nesaf?
[Myfyrwyr] Pointer i'r strwythur nesaf.
Dyna anochel hyn yr ydym am.
Gallai byth Pam fod yn nod strwythur nesaf?
Pam mae'n rhaid iddo fod strwythur nod * nesaf? Yeah.
[Myfyrwyr] Mae'n debyg i dolen ddiddiwedd.
Yeah.
[Myfyrwyr] Byddai'n i gyd mewn un.
Yeah, dim ond meddwl am sut y byddem yn gwneud maint neu rywbeth.
Maint a strwythur yn y bôn + neu - rhyw batrwm yma ac acw.
Mae'n bôn yn mynd i fod swm y meintiau o'r pethau yn y strwythur.
Mae'r hawl yma, heb newid unrhyw beth, mae'r maint yn mynd i fod yn hawdd.
Maint y nod strwythur yn mynd i fod maint i + maint nesaf.
Maint i yn mynd i fod yn 4. Maint y nesaf yn mynd i fod yn 4.
Maint y nod strwythur yn mynd i fod yn 8.
Os nad oes gennym y *, gan feddwl am sizeof,
yna sizeof (i) yn mynd i fod yn 4.
Maint y nod strwythur nesaf yn mynd i fod maint i + maint y nod strwythur nesaf
+ Maint i + maint y nod strwythur nesaf.
Byddai'n dychweliad diddiwedd o nodau.
Dyma pam mae hyn yn sut mae pethau yn rhaid i fod.
>> Unwaith eto, yn bendant gofio hynny,
neu o leiaf yn deall ei fod yn ddigon y gallwch fod yn gallu
rheswm trwy yr hyn y dylai edrych.
Mae'r pethau rydym yn mynd i eisiau i'w gweithredu.
Os yw hyd y rhestr-
gallech chi dwyllo a chadw o amgylch
hyd byd-eang neu rywbeth, ond nid ydym yn mynd i wneud hynny.
Rydym yn mynd i gyfrif hyd y rhestr.
Rydym wedi cynnwys, felly dyna y bôn fel chwilio,
felly mae gennym restr gysylltiedig o gyfanrifau i weld a yw hyn cyfanrif yn y rhestr cysylltiedig.
Prepend yn mynd i mewnosoder ar y dechrau y rhestr.
Atodi yn mynd i mewnosoder ar y diwedd.
Insert_sorted yn mynd i fewnosod y sefyllfa didoli yn y rhestr.
Math o Insert_sorted yn cymryd yn ganiataol nad ydych byth yn defnyddio prepend neu atodi mewn ffyrdd drwg.
>> Insert_sorted pan fyddwch yn gweithredu insert_sorted-
gadewch i ni ddweud ein bod wedi ein rhestr cysylltiedig.
Mae hyn yn beth ar hyn o bryd yn edrych fel, 2, 4, 5.
Wyf i am osod 3, felly cyn belled ag y rhestr ei hun yn cael ei datrys eisoes,
mae'n hawdd dod o hyd lle mae 3 yn perthyn.
Yr wyf yn dechrau am 2.
Iawn, 3 yn fwy na 2, felly rwy'n awyddus i gadw i fynd.
O, 4 yn rhy fawr, felly rwy'n gwybod 3 yn mynd i fynd i mewn rhwng 2 a 4,
ac mae'n rhaid i mi osod awgrymiadau a'r holl bethau.
Ond pe na baem yn llym yn defnyddio insert_sorted,
yn hoffi gadewch i 'jyst dweud fy mod prepend 6,
yna fy rhestr cysylltiedig yn mynd i ddod yn hyn.
Mae bellach yn gwneud unrhyw synnwyr, felly ar gyfer insert_sorted, gallwch gymryd yn ganiataol
bod y rhestr yn cael ei datrys, er bod gweithrediadau yn bodoli
sy'n gallu achosi nad yw'n cael ei ddatrys, a dyna ni.
Dod o hyd i gymorth mewnosoder-felly dyna'r prif bethau rydych chi'n mynd i gael eu gweithredu.
>> Am y tro, cymerwch funud i wneud hyd ac yn cynnwys,
a dylai'r rheini fod yn gymharol gyflym.
Bron yn amser cau, felly gall unrhyw un yn cael unrhyw beth i hyd neu gynnwys?
Maent yn mynd i fod bron yn union yr un fath.
[Myfyrwyr] Hyd.
Gadewch i ni weld, adolygu.
Iawn.
Ydych am esbonio?
[Myfyrwyr] Fi jyst creu nod pwyntydd ac yn ymgychwyn i gyntaf, sef ein amrywiol byd-eang,
ac yna rwy'n edrych i weld a yw'n null felly nid wyf yn cael nam seg ac yn dychwelyd 0 os yw hynny'n wir.
Fel arall, yr wyf ddolen drwy, cadw golwg ar cyfanrif mewn
faint o weithiau rydw i wedi cael mynediad i'r elfen nesaf y rhestr
ac yng ngweithrediad gynyddran un hefyd weld yr elfen honno gwirioneddol,
ac yna yr wyf yn barhaus yn gwneud y gwiriad i weld os yw'n null,
ac os yw'n null, yna mae'n terfynu'n rhy gynnar a dim ond yn dychwelyd y nifer o elfennau Rwyf wedi gweld.
>> [Rob B.] A oes unrhyw un gennych unrhyw sylwadau ar unrhyw beth?
Mae hyn yn edrych cywirdeb dirwy ddoeth.
[Myfyrwyr] Nid wyf yn meddwl eich bod angen y nod == null.
Yeah, felly os nod == 0 ffurflen 'dim gwastraff.
Ond os nod == null yna mae hyn-oh, mae mater cywirdeb.
Roedd yn union rydych yn dychwelyd i, ond nid yw'n ran cwmpas ar hyn o bryd.
'Ch jyst angen int i, felly i = 0.
Ond os nod yn null, yna i yn dal yn mynd i fod yn 0,
ac rydym yn mynd i ddychwelyd 0, felly yr achos hwn yn union yr un fath.
Peth arall cyffredin yw cadw'r datganiad
o'r tu mewn nod y ddolen i.
Fe allech chi ddweud-oh, dim.
Gadewch i ni ei gadw fel hyn.
Mae'n debyg y byddwn yn rhoi int i = 0 yma,
yna nod * nod = gyntaf yn fan hyn.
Ac mae hyn yn debyg sut y-gael gwared ar hyn yn awr.
Mae hyn yn debyg sut y byddwn wedi ei hysgrifennu.
Gallech hefyd-yn edrych arno fel hyn.
Mae hyn ar gyfer strwythur dolen i'r dde yma
Dylai fod bron mor naturiol i chi ag ar gyfer int i = 0
i yn llai na hyd i amrywiaeth + +.
Os dyna sut yr ydych ailadrodd dros array, dyma sut yr ydych ailadrodd dros restr cysylltiedig.
>> Dylai hyn fod yn ail natur ar ryw adeg.
Gyda hynny mewn golwg, mae hyn yn mynd i fod bron yr un peth.
Rydych yn mynd i eisiau i ailadrodd dros rhestr cysylltiedig.
Os yw'r nod-Nid oes gennyf unrhyw syniad beth yw gwerth ei alw.
Nôd i.
Os yw'r gwerth ar y nod = i ddychwelyd yn wir, a dyna ni.
Sylwch fod y ffordd yn unig yr ydym byth yn dychwelyd ffug
yw os ydym yn ailadrodd dros y rhestr gyfan sy'n gysylltiedig a byth yn dychwelyd yn wir,
felly dyna beth mae hyn yn ei wneud.
Fel ochr nodiadau ydym yn debyg na fydd yn dod i atodi neu prepend.
>> Nodyn sydyn diwethaf.
Os ydych yn gweld y gair allweddol sefydlog, felly gadewch i ni ddweud statig int cyfrif = 0,
yna rydym yn ei wneud cyfrif + +, gallwch chi yn y bôn meddwl amdano fel newidyn byd-eang,
hyd yn oed er fy mod newydd ei ddweud nad yw hyn yw sut yr ydym yn mynd i weithredu hyd.
Rwy'n gwneud hyn yma, ac yna cyfrif + +.
Unrhyw ffordd y gallwn ni fynd i mewn i nod yn ein rhestr cysylltiedig yr ydym yn ei incrementing ein cyfrif.
Y pwynt o hyn yw yr hyn yr allweddair sefydlog olygu.
Os wyf newydd gael cyfrif int = 0 byddai hynny'n newidyn byd-eang rheolaidd oed.
Pa ddulliau cyfrif int sefydlog yw ei fod yn newidyn byd-eang ar gyfer y ffeil.
Mae'n amhosibl i rai ffeil arall,
hoffi meddwl am pset 5, os ydych wedi dechrau.
Mae gennych ddau speller.c, ac mae gennych dictionary.c,
ac os ydych yn unig yn datgan beth fyd-eang, yna unrhyw beth yn speller.c
Gellir cael mynediad mewn dictionary.c ac i'r gwrthwyneb.
Newidynnau byd-eang yn hygyrch gan unrhyw. Ffeil c,
ond mae newidynnau statig yn unig hygyrch o fewn i'r ffeil ei hun,
felly tu mewn gwiriwr sillafu neu y tu mewn dictionary.c,
mae hyn yn fath o sut y byddwn yn datgan fy amrywiol ar gyfer maint fy amrywiaeth
neu faint o fy nifer y geiriau yn y geiriadur.
Gan nad wyf am ddatgan newidyn byd-eang sy'n unrhyw un wedi cael mynediad i,
Fi 'n sylweddol ond yn gofalu amdano ar gyfer fy ddibenion ei hun.
>> Y peth da am hyn yw hefyd y stwff enw gwrthdrawiad cyfan.
Os yw rhai ffeil arall yn ceisio defnyddio'r newidyn byd-eang o'r enw cyfrif, pethau'n mynd iawn, iawn o'i le,
felly mae hyn yn 'n glws yn cadw pethau'n ddiogel, a dim ond gallwch gael mynediad iddo,
ac na all neb arall, ac os bydd rhywun arall yn datgan newidyn byd-eang o'r enw cyfrif,
yna ni fydd yn amharu ar eich newidyn sefydlog a elwir yn cyfrif.
Dyna beth statig yw. Mae'n amrywio ffeil byd-eang.
>> Cwestiynau ar unrhyw beth?
Mae pob set. Hwyl.
[CS50.TV]