[Powered by Google Translate] [Wiki 6]
[David J. Malan] [Chuo Kikuu cha Harvard]
[Hii ni CS50.] [CS50.TV]
>> Hii ni CS50, na hii ni mwanzo wa Wiki 6,
hivyo michache ya zana mpya sasa inapatikana kwa wewe kuchukua faida ya,
kwanza ambayo inaitwa CS50 Sinema.
Tabia mbaya ni kama wewe ni kama mimi au yeyote wa wenzake kufundisha,
ve pengine kuona mpango ambao mtindo inaonekana kitu kidogo kama hii.
Labda ya kuanza kukata pembe baadhi marehemu wakati wa usiku, au utasikia kuhusika na hivyo baadaye,
na kisha TF au CA huja juu ya wakati wa masaa ya ofisi.
Basi ni vigumu kwetu kusoma.
Naam, kanuni hii ni sahihi syntactically, na itakuwa ni kukusanya, na itakuwa kweli kukimbia.
Lakini ni dhahiri si 5 kwa ajili ya mtindo.
>> Lakini sasa, kama sisi kwenda katika saraka hii hapa-
na taarifa kwamba nina-conditions2.c
na mimi kukimbia amri hii mpya, style50, juu ya conditions2.c faili hii, Ingieni,
taarifa kwamba ni taarifa yangu kuwa imekuwa stylized.
Gedit niliona kwamba faili limebadilishwa kwenye disk,
na ikiwa mimi bonyeza Reload, matatizo yako yote sasa automatiska.
[Applause]
Hiyo ni moja ya mambo ya sisi alifanya mwishoni mwa wiki hii.
Kutambua kwamba ni mkamilifu kwa sababu kuna baadhi ya kanuni
kwamba tu hawataweza kwa stylize kikamilifu,
lakini kutambua hili sasa ni chombo unaweza kuchukua faida ya
ikiwa tu tidy baadhi ya braces zaidi errantly kuwekwa curly na kama.
>> Lakini zaidi ya kulazimisha sasa ni CS50 Check.
Kwa Check CS50, unaweza kweli kufanya vipimo usahihi sawa
juu ya code yako mwenyewe kwamba wenzake mafundisho ni uwezo.
Hii ni mstari amri shirika kwamba anakuja sasa katika appliance
haraka kama wewe kufanya update50 kama kwa
pset 4 specifikationer, na matumizi yake kimsingi kama hii.
Wewe kukimbia check50 amri.
Kisha wewe kupita katika hoja mstari amri, au zaidi kwa ujumla inayojulikana kama kubadili au bendera.
Kwa ujumla, mambo ambayo hyphens wanaitwa kubadili
kwa mpango wa mstari amri, hivyo-c bayana
hundi kwamba unataka kukimbia.
>> vipimo kwamba unataka kukimbia ni kutambuliwa kwa kamba ya kipekee hii,
2012/pset4/resize.
Kwa maneno mengine, hiyo ni kamba tu holela lakini kipekee
kwamba sisi kutumia kipekee kutambua usahihi vipimo pset 4 ya.
Na kisha kueleza bayana nafasi kutengwa orodha ya faili kwamba unataka upload
kwa CS50 Check kwa uchambuzi.
Kwa mfano, kama mimi kwenda katika ufumbuzi yangu hapa kwa resize.c-
napenda kufungua terminal kubwa dirisha-
na mimi kwenda mbele na kukimbia hebu sema check50-c 2012/pset4/resize,
na kisha mimi kwenda mbele na kutaja majina ya files,
resize.c, na kisha hit Enter, ni compresses,
ni uploads, ni hundi, na mimi tu alishindwa rundo zima ya vipimo.
moja katika nyekundu juu kushoto anasema kwamba resize.c na bmp zipo.
Hiyo ilikuwa mtihani. Hiyo ilikuwa swali sisi aliuliza.
Na ni furaha kwa sababu jibu alikuwa uongo.
Nakala nyeupe chini inasema inatarajiwa bmp.h kuwepo, na kwamba tu ya kosa langu.
I forgot upload, hivyo nahitaji upload files wote,
resize.c na bmp.h.
Lakini sasa taarifa yote ya vipimo vingine ni katika njano kwa sababu wao si kukimbia,
na hivyo uso smiley ni wima kwa sababu yeye ni wala furaha wala huzuni,
lakini tuna kurekebisha kwamba suala katika nyekundu kabla wale hundi nyingine kukimbia.
>> Hebu kurekebisha hii.
Hebu zoom nje na rerun hii, wakati huu na pia bmp.h
juu ya mstari amri, Ingieni, na sasa kama kila kitu kitakwenda vizuri,
itakavyo kuangalia na kisha kurudi matokeo ya-kushikilia yako pumzi-
yote ya kijani, ambayo ina maana mimi nina kufanya vizuri kwenye pset 4 hadi sasa.
Unaweza kuona na infer kutoka Nakala maelezo hapa
hasa nini ni sisi kupima.
Sisi majaribio kwanza kufanya files zipo?
Sisi basi kipimo gani kukusanya resize.c?
Kisha sisi majaribio gani si resize BMP 1x1-pixel wakati n, sababu resize, ni 1.
Sasa, kama hawana wazo nini ni n, utakuwa mara moja wewe kupiga mbizi katika pset 4,
lakini kwamba tu ni sanity kuangalia kuhakikisha kwamba wewe si resizing
picha wakati wote kama kigezo resize ni 1.
Kama, kwa kulinganisha, ni resizes pixel 1x1 kwa 1x1 pixel BMP kwa 2x2 usahihi
wakati n ni 2, basi vile vile, mgodi hutengeneza ipasavyo.
>> Kwa kifupi, hii ni maana, moja, kuchukua kuvuka vidole
nje ya equation haki kabla ya kuwasilisha pset yako.
Wewe kujua nini hasa TF yako ya hivi karibuni kujua
wakati wewe kwenda juu ya kuwasilisha baadhi ya seti hizi tatizo,
na pia motisha ya ufundishaji ni kweli kwa kuweka
nafasi mbele yenu ili wakati unajua priori
kwamba kuna mende katika code yako na vipimo ambavyo si kuwa alipita,
unaweza kuweka katika wakati na ufanisi zaidi mbele ili kutatua matatizo hayo
badala ya kupoteza pointi, kupata maoni kutoka TF yako,
na kisha kwenda, "Ahh," kama mimi wanapaswa figured kwamba nje.
Sasa angalau kuna chombo kukusaidia kupata hiyo.
Si kwenda kwa kumweka nje ambapo mdudu ni, lakini itakuambia
nini ni dalili ya hiyo.
>> Sasa kutambua vipimo si lazima kamilifu.
Sababu tu ya kupata full screen ya kijani smiley nyuso
haimaanishi code yako ni kamilifu, lakini haina maana
kwamba ina kupita vipimo fulani eda na spec.
Wakati mwingine sisi si kutolewa hundi.
Kwa mfano, whodunit, moja ya mambo ya pset 4,
ni aina ya kuwakatisha tamaa kama sisi kukupa
jibu kama ni nini, na kuna idadi ya njia kufunua
ambao mtu ni katika kelele kwamba nyekundu.
spec daima bayana katika siku zijazo kwa pset kuendelea 5
nini hundi zipo kwa ajili yenu.
Utagundua kuna hii URL nyeupe chini.
Kwa sasa, hii ni uchunguzi pato.
Kama wewe kutembelea URL kwamba, utapata rundo zima la mambo ujumbe, cryptic
kwamba wewe ni kuwakaribisha kwa kuangalia njia, lakini ni zaidi kwa ajili ya wafanyakazi
ili tuweze kutambua na Debug mende katika check50 yenyewe.
>> Bila wasiwasi, hebu kuendelea na ambapo sisi kushoto mbali.
CS50 maktaba sisi alichukua kwa nafasi kwa muda wa wiki kadhaa,
lakini kisha wiki iliyopita, tulianza peeling nyuma mmoja wa tabaka hilo.
Sisi kuanza kuweka kando string katika neema ya nini badala yake?
[Wanafunzi] Char.
Char *, ambayo imekuwa * Char muda wote huu,
lakini sasa hatuna kujifanya kuwa ni aina data halisi kamba.
Badala yake, ni kuwa kisawe ya aina kwa ajili ya * Char,
na kamba ni mlolongo wa wahusika,
hivyo kwa nini mantiki kuwakilisha masharti kama Char * s?
Nini * Char kuwakilisha katika muktadha wa hii dhana ya kamba?
Yeah >> [Mwanafunzi]. Tabia ya kwanza.
Nzuri, tabia ya kwanza, lakini kabisa tabia ya kwanza.
Ni-[Wanafunzi] mitaani.
Good, anuani ya tabia ya kwanza.
Yote muhimu kuwakilisha string katika kumbukumbu ya kompyuta
ni tu anuani ya kipekee ya Byte wake wa kwanza kabisa.
Huna hata kujua ni muda gani
kwa sababu jinsi gani unaweza kufikiri kuwa nje dynamically?
[Mwanafunzi] Kamba urefu.
Unaweza kuita string urefu, bora, lakini jinsi gani string urefu kazi?
Ni nini nini? Yeah.
[Mwanafunzi] Kuendelea mpaka kupata tabia null.
Yeah, hasa, ni tu iterates na kwa kitanzi, wakati kitanzi,
chochote kutoka * hadi mwisho, na mwisho ni kuwakilishwa
kwa \ 0, kinachojulikana nul tabia, nul,
si kwa kuchanganyikiwa na null, ambayo ni pointer,
ambayo itakuwa katika mazungumzo tena leo.
>> Sisi peeled nyuma ya safu ya GetInt, na kisha sisi alichukua kuangalia GetString,
na kukumbuka kwamba wote wa kazi hizo, au kweli,
GetString, ilikuwa kutumia kazi fulani
kwa kweli kuchanganua, kwamba ni, kusoma au kuchambua, pembejeo mtumiaji.
Na nini ilikuwa kwamba kazi mpya?
Scanf au sscanf. Ni kweli inakuja katika flavors wachache tofauti.
Kuna scanf, kuna sscanf, kuna fscanf.
Kwa sasa, ingawa, hebu kuzingatia moja kwa urahisi zaidi mfano,
na napenda kwenda mbele na kufungua katika appliance
file kama hii, scanf1.c.
Hii ni super rahisi mpango,
lakini kwamba hana kitu ambacho tumekuwa kamwe kufanyika
bila ya msaada wa maktaba CS50.
Hii anapata int kutoka kwa mtumiaji. Jinsi gani kazi?
Naam, katika mstari 16 huko,
taarifa kwamba sisi kutangaza int kuitwa x, na katika hatua hii kwa hadithi,
nini ni thamani ya x?
[Inaudible mwanafunzi majibu]
[David M.] Haki, ambaye anajua, baadhi thamani takataka uwezekano, hivyo katika 17, sisi tu kuwaambia mtumiaji
nipe namba, tafadhali, na hatua 18 ni ambapo anapata kuvutia.
Scanf inaonekana kukopa kutoka wazo printf katika kwamba anatumia kanuni hizi format katika quotes.
% D ni mwendo wa idadi decimal.
Lakini kwa nini mimi kupita katika & x badala ya x tu?
zamani ni sahihi. Yeah.
[Inaudible mwanafunzi majibu]
Hasa, kama lengo la mpango huu, kama GetInt kazi yenyewe,
ni kupata int kutoka kwa mtumiaji siwezi kupita kazi
vigezo vyote nataka, lakini kama si kupita yao kwa kumbukumbu
au kwa anuani au kwa pointer, wote sawa kwa madhumuni ya leo,
basi kazi hiyo haina uwezo wa kubadilisha yaliyomo ya variable kwamba.
Hii itakuwa kupita katika nakala tu kama toleo Buggy ya kubadilishana
kwamba tumekuwa kuongelea mara chache sasa.
>> Lakini badala yake, kwa kufanya & x, mimi nina literally kupita katika nini?
[Mwanafunzi] anuani. >> Anuani ya x.
Ni kama kuchora ramani kwa ajili ya kazi kuitwa scanf na kusema hapa,
hizi ni kwa chunk ya kumbukumbu maelekezo katika kompyuta
kuwa unaweza kwenda kuhifadhi baadhi integer in
Ili sscanf kwa sasa kufanya hivyo
nini operator, kile kipande cha syntax ni kwenda kuwa na kutumia
hata ingawa hatuwezi kuona, kwa sababu mtu mwingine aliandika hii kazi?
Kwa maneno mengine - nini hiyo?
[Mwanafunzi] X kusoma.
Itakuja kuwa baadhi ya kusoma, lakini tu kwa kuzingatia x hapa.
Kama scanf ni kuwa alipita anuani ya x,
syntactically, nini operator ni amefungwa kuwepo mahali fulani
ndani ya utekelezaji wa scanf ili scanf
unaweza kweli kuandika namba 2 kwa anwani hiyo?
Yeah, hivyo *.
Kumbuka kwamba * ni dereference wetu operator, ambayo kimsingi ina maana kwenda huko.
>> Mara tumekuwa mitupu anuani, kama ni kesi hapa,
scanf pengine ni-kama sisi kweli wakatazama chanzo chake code-
ni kufanya * x au sawa na kweli kwenda kwa anwani hiyo na kuweka baadhi ya thamani pale.
Sasa, kama kwa jinsi scanf anapata pembejeo kutoka keyboard,
tutaweza kukitikisa mikono yetu nje kwa leo.
Kudhani tu kwamba mfumo wa uendeshaji inaruhusu sscanf kuzungumza
kwa keyboard mtumiaji, lakini katika hatua hii sasa katika mstari 19,
wakati sisi tu magazeti nje x, inaonekana kuwa kesi
kwamba scanf ameweka int katika x.
Hiyo hasa jinsi scanf kazi, na kukumbuka wiki iliyopita
hiyo hasa jinsi GetString na GetInt na familia yake mengine ya kazi
hatimaye kazi, angalau kwa ugomvi kidogo kama sscanf,
ambayo ina maana Scan string badala ya keyboard.
Lakini hebu tuangalie ugomvi kidogo wa hii.
Katika scanf2, mimi kwa kweli Star up.
Je, ni makosa-na mimi itabidi kuficha maoni ambayo anaelezea kama kiasi-
nini ni vibaya kwa mpango huu, toleo la 2?
Kuwa kama kiufundi kama inawezekana wakati huu.
Inaonekana nzuri sana.
Ni nicely indented, lakini-
sawa, vipi kuhusu hebu kukatia ni chini ya maswali mfupi?
Line 16. Nini mstari 16 katika kufanya Kiingereza sahihi lakini kiufundi?
Kupata kidogo Awkward. Ndiyo, Michael.
[Mwanafunzi] Ni akizungumzia barua ya kwanza ya kamba.
>> Okay, karibu. Hebu tweak kwamba kidogo.
Akizungumzia barua ya kwanza ya kamba, wewe ni kutangaza variable kuitwa buffer
ambayo uhakika na anuani ya kwanza ya kamba,
au tuseme, ambayo uhakika zaidi hasa kwa Char.
Taarifa hiyo si kweli akizungumzia popote kwa sababu hakuna operator zoezi.
Hakuna ishara sawa, hivyo wote sisi ni kufanya ni kugawa variable inayoitwa buffer.
Hutokea kwa kuwa 32 bits sababu ni pointer,
na yaliyomo ya buffer ikatengeneza hatimaye
yana anwani ya Char, lakini kwa sasa, nini buffer yana?
Baadhi tu bogus, ambaye anajua, baadhi ya thamani ya takataka,
kwa sababu sisi si wazi initialized hivyo, hivyo hatupaswi kudhani chochote.
Sawa, hivyo sasa mstari 17 ni-nini mstari 17 nini?
Labda hiyo itakuwa joto hii up.
Ni Prints kamba, sawa?
Ni Prints Kamba tafadhali.
>> Line 18 ni aina ya familiar sasa kwa kuwa sisi tu kuona ugomvi huu
lakini kwa kificho tofauti format, hivyo katika mstari 18,
sisi ni kuwaambia scanf hapa ni anwani ya chunk ya kumbukumbu.
Mimi nataka wewe pete katika kamba, kama alisema kwa% s,
lakini tatizo ni kwamba hatujafanya michache ya mambo hapa.
Nini moja ya matatizo?
[Mwanafunzi] Ni kujaribu dereference pointer null.
Good, null au tu vinginevyo haijulikani kuyatumia.
Wewe ni handing scanf anuani, lakini wewe tu alisema wakati uliopita
kwamba anuani kwamba ni baadhi ya thamani ya takataka kwa sababu hatukuwa kweli hawawajui kwa kitu chochote,
na hivyo wewe ni kuwaambia scanf ufanisi kwenda kuweka kamba hapa,
lakini hatujui ambapo hapa bado ni,
hivyo sisi si kweli zilizotengwa kwa ajili ya kumbukumbu buffer.
Aidha, ni wewe pia hata kuwaambia scanf?
Tuseme hii ilikuwa chunk ya kumbukumbu, na haikuwa thamani ya takataka,
lakini bado uko siyo kuwaambia scanf kitu muhimu.
[Mwanafunzi] wapi ni kweli ni, ampersand.
Ampersand, hivyo katika kesi hii, ni sawa.
Kwa sababu buffer tayari alitangaza kama pointer
na kipande * ya syntax, hatuna haja ya kutumia ampersand
sababu ni tayari anuani, lakini nadhani habari hiyo hapa.
[Mwanafunzi] Jinsi kubwa ni nini?
Nzuri, sisi siyo kuwaambia scanf jinsi kubwa buffer hii ni,
ambayo ina maana hata kama buffer walikuwa pointer,
sisi ni kusema scanf, kuweka kamba hapa,
lakini hapa inaweza kuwa 2 ka, inaweza kuwa 10 bytes, inaweza kuwa megabyte.
Scanf hana wazo, na kwa sababu hii ni chunk ya kumbukumbu
labda, siyo kamba bado.
Ni tu kamba mara moja kuandika herufi na 0 \ kwa kuwa chunk ya kumbukumbu.
Sasa ni baadhi tu chunk ya kumbukumbu.
Scanf si kujua wakati wa kuacha kuandika kwa anwani hiyo.
>> Kama unakumbuka baadhi ya mifano katika siku za nyuma ambapo mimi nasibu typed kwenye keyboard
kujaribu kufurika buffer, na sisi aliyesema juu ya Ijumaa kuhusu hasa ile.
Kama adui fulani injects katika mpango wako neno kubwa sana
au sentensi au maneno basi walikuwa wanatarajia unaweza overrun
chunk ya kumbukumbu, ambayo yanaweza kuwa na matokeo mabaya,
kama kuchukua juu ya mpango mzima yenyewe.
Tunahitaji kurekebisha hii kwa namna fulani.
Hebu zoom nje na kwenda katika toleo 3 ya mpango huu.
Hiyo ni kidogo bora.
Katika toleo hili, taarifa tofauti.
Katika mstari 16, mimi nina tena kutangaza variable kuitwa buffer,
lakini ni nini sasa?
Ni safu ya chars 16.
Hii ni nzuri kwa sababu hii ina maana naweza sasa kuwaambia scanf
hapa ni chunk halisi ya kumbukumbu.
Unaweza karibu kufikiri ya arrays kama kuwa kuyatumia sasa,
hata kama wao siyo kweli sawa.
Wao utakuwa tabia tofauti katika mazingira tofauti.
Lakini ni hakika kwamba kesi buffer inasimamia
16 contiguous chars sababu kwamba ni nini safu ni
na imekuwa kwa muda wa wiki kadhaa sasa.
>> Hapa, Mimi ninakuambia scanf hapa chunk ya kumbukumbu.
Wakati huu, ni kweli chunk ya kumbukumbu,
lakini kwa nini ni mpango huu bado exploitable?
Nini mbaya bado?
Nilivyosema nipe ka 16 lakini-
[Mwanafunzi] Nini kama aina katika zaidi ya 16?
Hasa, nini kama mtumiaji aina katika herufi 17 au wahusika 1700?
Kwa kweli, hebu angalia kama hatuwezi safari juu kosa hili sasa.
Ni bora lakini si kamili.
Hebu kwenda mbele na kukimbia kufanya scanf3 kukusanya mpango huu.
Hebu kukimbia scanf3, Kamba tafadhali: hello, na sisi kuonekana kuwa sawa.
Hebu jaribu moja tena kidogo, hujambo huko.
Okay, wacha kufanya hujambo huko gani leo, Ingiza.
Kupata aina ya bahati hapa, hebu kusema hello kuna jinsi wewe.
Damn yake.
Sawa, hivyo tulipata bahati. Hebu angalia kama hatuwezi kurekebisha hii.
Hapana, si kwenda basi mimi nakala.
Hebu jaribu hii tena.
Haki zote, na kusimama.
Tutaweza kuona jinsi ya muda mrefu mimi unaweza kujifanya kuzingatia wakati bado kufanya hivyo.
Damn yake. Hiyo badala inafaa, kwa kweli.
Kuna sisi kwenda.
Point alifanya.
>> Hii, aibu ingawa pia ni, pia ni moja ya vyanzo ya machafuko makubwa
wakati wa kuandika mipango na mende kwa sababu wao wenyewe yatangaza
tu mara moja kwa wakati mwingine.
Ukweli ni kwamba hata kama code yako ni kabisa kuvunjwa,
inaweza tu kuwa kabisa kuvunjwa mara moja kwa wakati
kwa sababu wakati mwingine, kimsingi ni nini kinachotokea ni mfumo wa uendeshaji kutenga
kidogo zaidi kuliko kumbukumbu haja kweli kwa sababu yoyote,
na hivyo hakuna mtu mwingine ni kutumia kumbukumbu sahihi baada ya chunk yako ya wahusika wa 16,
hivyo kama kwenda kwa 17, 18, 19, na kwa chochote, sio vile mpango kubwa.
Sasa, kompyuta, hata kama haina ajali katika hatua hiyo,
ili hatimaye kutumia idadi Byte 17 au 18 au 19 kwa kitu kingine,
saa ambayo kumweka data yako kwamba kuweka huko, angalau kupita kiasi kwa muda mrefu,
ni kwenda kupata overwritten uwezekano kwa kazi nyingine.
Ni lazima si watabaki intact,
lakini si lazima kusababisha kosa seg.
Lakini katika kesi hii, mimi hatimaye zinazotolewa wahusika kutosha
kwamba mimi kimsingi ilizidi sehemu yangu ya kumbukumbu, na bam,
mfumo wa uendeshaji akasema, "Samahani, hiyo si nzuri, segmentation kosa."
>> Na hebu angalia sasa ikiwa kile bado hapa katika saraka yangu-
taarifa kwamba nina faili hii hapa, msingi.
Ona kwamba hii ni mara ya pili wakamwita dampo msingi.
Ni kimsingi faili kwamba ina maudhui ya kumbukumbu ya mpango wako
katika hatua ambayo ni kugonga,
na tu kujaribu mfano kidogo hapa niende katika hapa
na kukimbia gdb juu ya scanf3 na kisha kubainisha hoja ya tatu iitwayo msingi,
na taarifa hapa kwamba kama mimi kuorodhesha kanuni,
tutaweza kuwa na uwezo kama kawaida na gdb kwa kuanza kutembea kupitia mpango huu,
na siwezi kukimbia na haraka kama mimi hit-kama na amri hatua katika gdb-
haraka kama mimi hit line uwezekano Buggy baada ya kuandika katika kamba kubwa,
Mimi utakuwa na uwezo wa kweli kutambua hapa.
Zaidi juu ya hili, ingawa, katika sehemu katika suala la msingi dumps
na kama hivyo kuwa unaweza kweli poke kuzunguka ndani ya dampo msingi
na kuona kwenye kile line mpango alishindwa wewe.
Maswali yoyote juu ya kisha kuyatumia na juu ya anwani?
Kwa sababu leo, sisi ni kwenda kuanza kuchukua nafasi ya kwamba mambo haya zipo
na sisi kujua hasa nini hao.
Ndiyo.
>> [Mwanafunzi] Jinsi kuja hawakuwa na kuweka ampersand karibu na sehemu-
Nzuri swali.
Jinsi ya kuja sikuwa na kuweka ampersand karibu na safu tabia kama nilivyofanya awali
na zaidi ya mifano yetu?
jibu fupi ni arrays ni kidogo maalum.
Unaweza kufikiri karibu buffer kama kweli kuwa anwani,
na hivyo hivyo tu hutokea kwa kuwa kesi hiyo mraba bracket nukuu
ni urahisi ili tuweze kwenda katika mabano 0, bracket 1,
bracket 2, bila kuwa na matumizi ya nukuu *.
Hiyo ni kidogo ya uongo kwa sababu nyeupe arrays na kuyatumia
ni, kwa kweli, tofauti kidogo, lakini mara nyingi wanaweza lakini si daima kutumika kwa kubadilishana.
Kwa kifupi, wakati kazi ni kutarajia pointer chunk ya kumbukumbu,
unaweza ama kupita anwani zile zilizorudishwa na malloc,
na tutaweza kuona tena malloc kabla ya muda mrefu, au unaweza kupita jina la safu.
Huna kufanya ampersand na arrays kwa sababu wao ni tayari
kimsingi kama anwani.
Hiyo ni ubaguzi moja.
mabano mraba kuwafanya maalum.
>> Unaweza kuweka ampersand karibu na buffer?
Si katika kesi hii.
Hiyo si kazi kwa sababu, tena, wa kesi hii kona
ambapo arrays si kweli kabisa anwani.
Lakini tutaweza labda kuja nyuma na kwamba kabla ya muda mrefu na mifano mingine.
Hebu jaribu kutatua tatizo hapa.
Tuna muundo data kwamba sisi tumekuwa kutumia kwa muda inayojulikana kama safu.
Uchunguzi katika kumweka, kwamba ni nini sisi tu alikuwa.
Lakini arrays kuwa baadhi upsides na downsides.
Arrays ni nzuri kwa nini?
Nini jambo moja kwamba wewe kama-kwa kiasi wewe kama arrays-kuhusu arrays?
Nini nafasi ya juu yao? Nini kulazimisha?
Kwa nini sisi kuanzisha yao katika nafasi ya kwanza?
Yeah.
[Mwanafunzi] Wao wanaweza kuhifadhi data nyingi, na huna kutumia kitu nzima.
Unaweza kutumia sehemu.
Nzuri, pamoja na safu unaweza kuhifadhi data nyingi,
na wewe si lazima kuwa na matumizi yake yote, hivyo unaweza overallocate,
ambayo inaweza kuwa rahisi kama huna kujua mapema jinsi wengi wa kitu kutarajia.
>> GetString ni mfano kamili.
GetString, iliyoandikwa na sisi, hana wazo jinsi wengi chars kutarajia,
hivyo ukweli kwamba tunaweza kutenga chunks ya kumbukumbu contiguous ni nzuri.
Arrays pia kutatua tatizo tuliona wiki kadhaa iliyopita sasa
ambapo code yako kuanza kukabidhi katika kitu hafifu iliyoundwa sana.
Kumbuka kwamba mimi umba muundo mwanafunzi akamwita Daudi,
na kisha kuwa ilikuwa kwa kweli ni mbadala, ingawa,
kwa kuwa kutofautiana kuitwa jina na kuitwa mwingine kutofautiana, nadhani, nyumba,
na mwingine kutofautiana kuitwa ID kwa sababu katika hadithi kwamba mimi basi alitaka kuanzisha kitu kingine
kama Rob katika mpango, hivyo basi niliamua kusubiri dakika,
Nahitaji rename vigezo hivi.
Hebu piga mgodi NAME1 ID1, house1.
Hebu piga Rob wa NAME2, house2, ID2.
Lakini kisha kusubiri dakika, nini kuhusu Tommy?
Kisha sisi alikuwa tatu vigezo zaidi.
Sisi ilianzisha mtu mwingine, nne seti ya variables.
dunia kuanza kupata messy haraka sana,
hivyo sisi ilianzisha structs, na nini kulazimisha kuhusu struct?
Je struct C basi wewe kufanya?
Ni kweli Awkward leo.
Nini? >> [Inaudible mwanafunzi majibu]
Yeah, hasa, typedef inaruhusu kujenga mpya data aina,
na struct, Keyword struct, utapata kurejelea
conceptually kuhusiana vipande vya data pamoja
na baada ya hapo kuwaita kitu kama mwanafunzi.
>> Hiyo ilikuwa nzuri kwa sababu sasa tunaweza mfano
zaidi ya aina ya conceptually thabiti dhana ya mwanafunzi katika variable
badala ya kiholela kuwa moja kwa kamba, moja kwa ID, na kadhalika.
Arrays ni nzuri kwa sababu wao kuruhusu sisi kuanza kusafisha code yetu.
Lakini ni nini negativa sasa wa safu?
Nini unaweza kufanya? Yeah.
[Mwanafunzi] Una kujua jinsi kubwa ni.
Una kujua jinsi kubwa ni, hivyo ni aina ya maumivu.
Wale wa wewe na uzoefu kabla ya programu kujua kwamba katika mengi ya lugha,
kama Java, unaweza kuuliza chunk ya kumbukumbu, hasa safu,
jinsi kubwa ni wewe, na urefu, mali, ili kuzungumza, na kwamba ni kweli urahisi.
Katika C, unaweza hata kuwaita strlen kwenye safu generic
kwa sababu strlen, kama neno ina maana, ni tu kwa masharti,
na wewe wanaweza kufikiri urefu wa kamba kwa sababu ya mkataba huu wa binadamu
ya kuwa na 0 \, lakini safu, zaidi generically, ni tu chunk ya kumbukumbu.
Kama ni safu ya ints, kuna si kwenda kuwa baadhi ya tabia maalum
mwishoni kusubiri kwa ajili yenu.
Una kukumbuka urefu wa safu.
Mwingine upande wa chini ya safu reared kichwa yake katika GetString yenyewe.
Nini mwingine upande wa chini ya safu?
Mheshimiwa, wewe tu na mimi leo.
[Inaudible mwanafunzi majibu] >> Ni nini?
Ni alitangaza juu ya stack.
Okay, alitangaza juu ya stack. Mbona wewe kama hayo?
[Mwanafunzi] Kwa sababu anapata kutumika tena.
Ni anapata kutumika tena.
Sawa, kama kutumia safu kutenga kumbukumbu,
huwezi, kwa mfano, kurudi kwa sababu ni juu ya stack.
Okay, hiyo ni hasara.
Na vipi kuhusu mtu mwingine na safu?
Mara baada ya kuipa, wewe ni aina ya Star kama unahitaji nafasi zaidi
kuliko safu ambayo ina.
>> Kisha sisi kuletwa, wanakumbuka, malloc, aliyetupa uwezo wa dynamically kutenga kumbukumbu.
Lakini nini kama sisi walijaribu dunia tofauti kabisa?
Nini kama sisi alitaka kutatua matatizo ya wanandoa wa wale
hivyo sisi badala-wangu kalamu amelala hapa-
nini kama sisi badala alitaka kimsingi kujenga dunia kwamba hakuna tena kama hii?
Hii ni safu, na, bila shaka, aina hii ya kuzorota kwa mara sisi hit mwisho wa safu,
na mimi sasa hakuna tena nafasi kwa ajili ya mwingine integer au nyingine tabia.
Nini kama sisi aina ya preemptively kusema vizuri, kwa nini sio sisi kupumzika
mahitaji haya kwamba chunks haya yote ya kumbukumbu kuwa contiguous nyuma kwa nyuma,
na kwa nini siyo, wakati mimi haja int au Char,
tu nipe nafasi kwa mmoja wao?
Na wakati mimi haja mwingine, nipe nafasi nyingine,
na wakati mimi haja mwingine, nipe nafasi nyingine.
faida ambayo kwa sasa ni kwamba kama mtu mwingine
inachukua kumbukumbu zaidi ya hapa, hakuna mpango mkubwa.
Nitachukua hii chunk ya ziada ya kumbukumbu hapa na kisha hii moja.
>> Sasa, kupata tu hapa ni kwamba hii karibu anahisi kama mimi na
rundo zima la vigezo tofauti.
Hii anahisi kama vigezo tano tofauti uwezekano.
Lakini nini kama sisi kuiba wazo kutoka masharti
ambapo sisi kwa namna fulani kuhusisha mambo haya pamoja conceptually, na nini kama mimi alifanya hivyo?
Hii ni mshale wangu sana hafifu inayotolewa.
Lakini chukulia kwamba kila moja ya haya chunks ya kumbukumbu
alisema kwa wengine, na hii guy, ambaye hana ndugu kwa haki yake,
hana arrow vile.
Huu kwa kweli ni nini wito orodha zilizounganishwa.
Hii ni mpya data muundo kwamba inaruhusu yetu kutenga chunk ya kumbukumbu,
kisha mwingine, kisha mwingine, kisha mwingine, wakati wowote tunataka
wakati wa mpango, na sisi kumbuka kwamba wao ni wote kwa namna fulani kuhusiana
na chaining literally wote pamoja, na sisi gani kwamba pictorially hapa kwa mshale.
Lakini katika kanuni, nini itakuwa utaratibu kupitia ambayo unaweza namna fulani kuungana,
karibu kama Scratch, mmoja chunk kwa chunk mwingine?
Tunaweza kutumia pointer, haki?
Kwa sababu kwa kweli arrow ambayo inaenda kutoka mraba juu kushoto,
this guy hapa kwa moja hii, inaweza vyenye ndani ya mraba huu
si tu baadhi ints, si tu baadhi Char, lakini kile kama mimi kweli zilizotengwa
kidogo ya ziada nafasi ili kwamba sasa,
kila moja ya chunks yangu ya kumbukumbu, hata ingawa hii ni kwenda gharama yangu,
sasa inaonekana kidogo zaidi mstatili ambapo moja ya chunks ya kumbukumbu
ni kutumika kwa idadi, kama idadi 1,
na kisha kama guy hii inahifadhi idadi 2,
chunk hii nyingine ya kumbukumbu hutumika kwa mshale,
au zaidi concretely, pointer.
Na nadhani kuhifadhi namba 3 ya juu hapa wakati mimi kutumia hii kwa uhakika katika guy kwamba,
na sasa guy hii, hebu tuseme mimi tu wanataka tatu vile chunks ya kumbukumbu.
Mimi itabidi kuchora mstari kupitia njia hiyo, kuonyesha null.
Hakuna tabia ya ziada.
>> Hakika, huu ni jinsi gani tunaweza kwenda kuhusu utekelezaji
kitu ambacho ni wito orodha zilizounganishwa.
orodha wanaohusishwa ni mpya data muundo, na ni jiwe wanazidi kuelekea
kiasi fancier data miundo kwamba kutatua matatizo
pamoja na mistari ya matatizo Facebook-aina na matatizo ya Google-aina
ambapo una data kubwa seti, na tena ni kupunguzwa
kuhifadhi kila kitu contiguously na kutumia kitu kama tafuta linear
au hata kitu kama tafuta binary.
Unataka bora hata mara mbio.
Kwa kweli, mmoja wa Grails Mtakatifu tutaweza kuzungumzia baadaye wiki hii au ijayo
ni algorithm ambaye mbio wakati ni mara kwa mara.
Kwa maneno mengine, ni daima inachukua kiasi hicho bila kujali
jinsi kubwa ya pembejeo ni, na kwamba bila ya shaka kuwa kulazimisha,
hata hivyo zaidi kuliko kitu logarithmic.
Nini hili juu ya screen hapa?
Kila moja ya mistatiri ni nini hasa mimi tu akauchomoa kwa mkono.
Lakini jambo njia yote upande wa kushoto ni variable maalum.
Ni kwenda kuwa pointer moja kwa sababu gotcha moja
na orodha wanaohusishwa, kama mambo haya ni kuitwa,
ni kwamba una hutegemea kwenye mwisho mmoja wa orodha zinazoungwa.
>> Tu kama na kamba, una kujua anuani ya Char kwanza.
Same mpango kwa orodha zilizounganishwa.
Una kujua anuani ya chunk ya kwanza ya kumbukumbu
kwa sababu kutoka huko, unaweza kufikia kila moja nyingine.
Upande wa chini.
Nini bei ni sisi kulipa kwa ajili ya hii versatility ya kuwa dynamically
sizable data muundo kwamba kama sisi milele haja zaidi ya kumbukumbu, faini,
tu kutenga moja zaidi chunk na kuteka pointer kutoka
zamani kwa mkia mpya ya orodha?
Yeah.
[Mwanafunzi] Inachukua kuhusu mara mbili kama vile nafasi.
Inachukua mara mbili kama vile nafasi, ili dhahiri negativa, na tumeona hii
tradeoff kabla kati ya muda na nafasi na kubadilika
ambapo kwa sasa, hatuhitaji 32 bits kwa kila moja ya namba hizi.
Sisi kwa kweli wanahitaji 64, 32 kwa idadi na 32 kwa pointer.
Lakini hey, nina 2 gigabytes ya RAM.
Kuongeza bits nyingine 32 hapa na hapa haionekani kuwa kubwa ya mpango huo.
Lakini kwa seti kubwa data, ni dhahiri zinafikia literally mara mbili zaidi.
Nini mwingine upande wa chini sasa, au kile kipengele gani sisi kutoa up,
kama sisi kuwakilisha orodha ya mambo na orodha wanaohusishwa na si safu?
[Mwanafunzi] Huwezi traverse ni nyuma.
Huwezi traverse ni nyuma, hivyo wewe ni aina ya Star ikiwa wewe unatembea
kutoka kushoto kwenda kulia kwa kutumia kwa kitanzi au kitanzi wakati
na kisha wewe kutambua, "Oh, mimi nataka kwenda nyuma mwanzo wa orodha."
Huwezi kwa sababu hizi kuyatumia kwenda tu kutoka kushoto kwenda kulia kama mishale zinaonyesha.
>> Sasa, unaweza kukumbuka mwanzo wa orodha na kutofautiana nyingine,
lakini hiyo ni utata kukumbuka.
safu, bila kujali jinsi mbali ya kwenda, unaweza daima kufanya bala, bala, bala, minus
na kurudi nyuma kutoka wapi wewe akaja.
Nini Negativa mwingine hapa? Yeah.
[Inaudible mwanafunzi swali]
Unaweza, hivyo ve kweli tu mapendekezo muundo data kuitwa orodha doubly wanaohusishwa,
na kwa kweli, ungependa kuongeza mwingine pointer kwa kila moja ya haya mistatili
kwamba huenda upande mwingine, suala la mafanikio ya ambayo
ni sasa unaweza tembeeni na kurudi,
Kwa upande wa chini ambayo sasa unatumia mara tatu kama kumbukumbu nyingi kama sisi kutumika kwa
na pia kuongeza utata katika suala la code una kuandika kupata haki.
Lakini haya yote ni labda busara sana tradeoffs, kama reversal ni muhimu zaidi.
Yeah.
[Mwanafunzi] Unaweza pia kuwa na 2D zilizounganishwa orodha.
Nzuri, unaweza si kweli kuwa 2D wanaohusishwa orodha.
Ungeweza. Ni si karibu kama rahisi kama safu.
Kama safu, unaweza kufanya bracket wazi, bracket funge, bracket wazi, C. bracket,
na kupata baadhi muundo 2-dimensional.
Unaweza kutekeleza 2-dimensional wanaohusishwa orodha
kama wewe kufanya add-kama wewe mapendekezo-pointer tatu kwa kila moja ya mambo haya,
na kama unadhani kuhusu orodha nyingine kuja saa wewe style 3D
kutoka screen kwetu sote, ambayo ni nyingine tu mlolongo wa aina fulani.
Tunaweza kufanya hivyo, lakini si rahisi kama kuandika bracket wazi, Mabano ya mraba. Yeah.
[Inaudible mwanafunzi swali]
Nzuri, hivyo hii ni kicker halisi.
>> Hizi algorithms kwamba tumekuwa pined juu, kama oh, tafuta binary,
unaweza kutafuta safu ya idadi juu ya bodi ya
au kitabu ya simu ili haraka zaidi kama wewe kutumia kugawanya na kushinda
na kisha tafuta algorithm, lakini tafuta binary required mawazo mawili.
Mmoja, kwamba data alikuwa Iliyopangwa.
Sasa, tunaweza labda kuweka hii Iliyopangwa,
hivyo labda si kwamba wasiwasi, lakini binary tafuta pia alishika
kwamba alikuwa na upatikanaji random kwa orodha ya idadi,
na safu inaruhusu kuwa na upatikanaji random, na kwa upatikanaji random,
I mean kama wewe ni kupewa safu, ni kiasi gani wakati gani kuchukua wewe
kupata bracket 0?
Moja ya kazi, wewe tu kutumia [0] na uko pale pale.
Wangapi hatua gani kuchukua kupata mahali 10?
Hatua moja, wewe tu kwenda kwenye [10] na wewe uko hapo.
Kwa kulinganisha, ni jinsi gani unaweza kupata integer 10 katika orodha wanaohusishwa?
Una kuanza mwanzoni kwa sababu wewe ni tu kukumbuka
mwanzo wa orodha wanaohusishwa, kama kamba ni kuwa ikumbukwe
na anuani ya Char yake ya kwanza, na kwa kujua kwamba int 10
au kwamba tabia 10 katika kamba, una kutafuta nzima damn kitu.
>> Tena, sisi siyo kutatua matatizo yote ya yetu.
Sisi ni kuanzisha ndio mpya, lakini ni kweli unategemea nini wewe ni kujaribu kubuni kwa.
Katika suala la utekelezaji wa hii, tunaweza kukopa kutoka wazo muundo kwamba mwanafunzi.
syntax ni sawa sana, ila sasa, wazo ni kidogo zaidi abstract
kuliko nyumba na jina na kitambulisho.
Lakini napendekeza kwamba tunaweza kuwa na muundo data katika C
kiitwacho nodi, kama neno la mwisho kwenye slide unaonyesha,
ndani ya nodi, na node ni chombo tu generic katika sayansi ya kompyuta.
Ni kawaida inayotolewa kama mduara au mraba au mstatili kama tumekuwa kufanyika.
Na katika muundo huu data, tuna int, n,
hivyo kwamba ni idadi mimi unataka kuhifadhi.
Lakini ni nini hii mstari wa pili, struct nodi * ijayo?
Kwa nini hii ni sahihi, au kile jukumu gani hii kucheza kitu,
hata kama ni kidogo cryptic katika mtazamo wa kwanza?
Yeah.
[Inaudible mwanafunzi majibu]
Hasa, hivyo aina ya nyara * kwamba ni pointer ya aina fulani.
jina la pointer hii ni kiholela ijayo,
lakini tungeweza kuitwa ni kitu chochote tunataka, lakini nini hatua hii pointer?
[Mwanafunzi] nodi Mwingine >> Hasa., Inaelekeza nodi vile mwingine.
>> Sasa, hii ni aina ya udadisi wa C.
Kumbuka kuwa C ni kusoma na juu compiler hadi chini, kushoto na kulia,
ambayo ina maana kama-hii ni tofauti kidogo kutoka na kile sisi alivyofanya kwa mwanafunzi.
Wakati sisi defined mwanafunzi, sisi kweli hawakuwa kuweka neno huko.
Ni tu alisema typedef.
Kisha sisi alikuwa int id, kamba jina, kamba nyumba,
na kisha mwanafunzi chini ya struct.
Tangazo hilo ni tofauti kidogo kwa sababu,
tena, compiler C ni kidogo bubu.
Ni tu kwenda kusoma juu hadi chini,
hivyo kama unafikia line 2 hapa
ambapo ijayo ni alitangaza na anaona, oh, hapa variable iitwayo ijayo.
Ni pointer nodi struct.
compiler ni kwenda kutambua nini ni nodi struct?
Sijawahi kusikia jambo hili mbele,
kwa sababu neno nodi ili si vinginevyo itaonekana
mpaka chini, hivyo kuna hii redundancy.
Una kusema struct nodi hapa, ambayo unaweza kisha kufupisha baadaye
shukrani kwa typedef chini hapa, lakini hii ni kwa sababu
sisi ni referencing muundo yenyewe ndani ya muundo.
Hiyo gotcha moja huko.
>> Baadhi ya matatizo ya kuvutia ni kwenda kutokea.
Sisi tumepewa orodha ya namba. Jinsi gani sisi Insert ndani yake?
Jinsi gani sisi tafuta yake? Jinsi gani sisi kufuta kutoka humo?
Hasa sasa kwamba tuna kusimamia yote ya kuyatumia haya.
You walidhani kuyatumia walikuwa aina ya akili-bending
wakati alikuwa mmoja wao tu kujaribu kusoma int yake.
Sasa tuna kuendesha thamani orodha nzima.
Mbona sisi kuchukua wetu 5-dakika kuvunja hapa, na kisha tutaweza kuleta
baadhi folks juu ya hatua ya kufanya hasa ile.
>> C ni zaidi fun wakati ni alitenda nje.
Ambao wangeweza literally kama kuwa ya kwanza?
Okay, kuja juu juu. Wewe ni wa kwanza.
Ambao wangependa kuwa 9? Okay, 9.
Vipi kuhusu 9? 17?
Bofya hapa kidogo. 22 na 26 katika mstari wa mbele kwamba.
Na kisha vipi kuhusu mtu zaidi ya hapo kuwa alisema saa.
Wewe ni 34. Okay, 34, kuja juu juu.
Kwanza ni zaidi ya hapo. Okay, zote nne za guys wewe.
Na ambao hawakuwa tunasema kwa 9?
Nani ni 9 zetu?
Nani kweli anataka kuwa 9? Haki zote, kuja juu, kuwa 9.
Hapa sisi kwenda.
34, tutaweza kukutana na wewe pale.
Sehemu ya kwanza ni kufanya wenyewe kuangalia kama hiyo.
26, 22, 17, nzuri.
Kama unaweza kusimama mbali na upande, kwa sababu sisi ni kwenda malloc wewe katika wakati huu.
>> Nzuri, nzuri.
Okay, bora, hivyo hebu kuuliza maswali kadhaa hapa.
Na kweli, nini jina yako >> Anita?.
Anita, sawa, kuja juu zaidi ya hapa.
Anita ni kwenda kutusaidia aina ya kutatua moja haki rahisi swali katika kwanza,
ambayo ni jinsi gani unaweza kupata kama au thamani ni katika orodha?
Sasa, taarifa kwamba kwanza, kuwakilishwa hapa na Lucas,
ni kidogo tofauti, na hivyo kipande chake cha karatasi ni makusudi sideways
sababu si kabisa kama mrefu na haina kuchukua kama bits wengi,
ingawa kitaalam ana ukubwa sawa ya karatasi tu kuzungushwa.
Lakini ni tofauti kidogo katika kwamba yeye tu 32 bits kwa pointer,
na wote wa guys hawa ni 64 bits, nusu ya ambayo ni idadi, nusu ya ambayo ni pointer.
Lakini pointer si taswira, hivyo kama wewe guys inaweza fulani awkwardly
kutumia mkono wako wa kushoto na kumweka katika mtu karibu na wewe.
Na wewe ni namba 34. Nini jina lako?
Ari.
Ari, hivyo kweli, kushikilia karatasi katika mkono wako wa kulia na mkono wa kushoto inakwenda moja kwa moja chini.
Wewe kuwakilisha null upande wa kushoto.
>> Sasa picha yetu ya kibinadamu ni sana thabiti.
Hii ni kweli jinsi ya kuyatumia kazi.
Na kama unaweza scrunch kidogo njia hii hivyo mimi nina katika njia yako.
Anita hapa, kupata mimi namba 22,
lakini kudhani kikwazo cha si binadamu wakimshikilia vipande vya karatasi,
lakini hii ni orodha, na wewe tu Lucas kuanza na
kwa sababu yeye ni halisi pointer kwanza.
Tuseme wewe mwenyewe ni pointer, na hivyo wewe pia kuwa na uwezo wa kumweka katika kitu fulani.
Mbona wewe kuanza kwa akionyesha nini hasa ni Lucas akionyesha?
Nzuri, na napenda kutunga hii nje zaidi ya hapa.
Tu kwa ajili ya majadiliano, ngoja nikuondoe up ukurasa tupu hapa.
Jinsi gani unaweza Spell jina yako >> Anita?.
Okay, Anita.
Hebu sema nodi * anita = lucas.
Naam, sisi nisimfikirie wewe lucas. Sisi lazima wito wewe kwanza.
Kwa nini hii ni katika ukweli thabiti na ukweli hapa?
Moja, kwanza tayari ipo.
Kwanza imetengewa ikatengeneza mahali fulani hapa.
Node * kwanza, na ni zimetengwa orodha namna fulani.
Sijui jinsi ya kuwa kilichotokea. Hayo yalitokea kabla ya darasa kuanza.
Hii orodha ya binadamu wanaohusishwa imeanzishwa.
Na sasa katika hatua hii kwa hadithi-hii yote ni kwenda kwenye Facebook inaonekana baadaye-
katika hatua hii ya hadithi, Anita imekuwa initialized kuwa sawa na ya kwanza,
ambayo haina maana kwamba Anita pointi saa Lucas.
Badala yake, anaonyesha kwa nini anasema katika
kwa sababu anuani hiyo hiyo ndani ya bits Lucas ya 32-1, 2, 3 -
sasa ni pia ndani ya bits Anita wa 32-1, 2, 3.
>> Sasa kupata 22. Jinsi gani unaweza kwenda juu ya kufanya hii?
Nini kwamba Point? >> Kwa chochote.
Onesha chochote, hivyo kwenda mbele na kutenda ni nje kama bora unaweza hapa.
Nzuri, nzuri, na sasa wewe ni akionyesha-nini jina lako na 22?
Ramon. >> Ramon, hivyo Ramon klarar 22.
Wewe sasa kufanyika hundi.
Je, Ramon == 22, na kama ni hivyo, kwa mfano, tunaweza kurudi kweli.
Hebu-wakati haya guys kusimama hapa kiasi fulani awkwardly-
basi mimi kufanya kitu kwa haraka kama bool kupata.
Mimi nina kwenda mbele na kusema (node ​​* orodha, int n).
Nitakuwa haki ya nyuma na nyie. Mimi tu kuandika baadhi code.
Na sasa mimi nina kwenda mbele na kufanya hili, nodi * anita = orodha.
Na mimi nina kwenda mbele na kusema wakati (anita = null!).
>> Fumbo hapa ni kupata kidogo aliweka, lakini wakati (anita = null!), je, nataka kufanya?
Mimi haja ya baadhi ya njia ya referencing
integer kwamba Anita ananyoosha saa.
Katika siku za nyuma, wakati tulikuwa miundo, ambayo ni nodi,
sisi kutumika nukuu dot, na sisi bila kusema kitu kama
anita.n, lakini tatizo hapa ni kwamba Anita si struct per se.
Je, ni yeye?
Yeye ni pointer, hivyo kweli, kama tunataka kutumia hii dot nukuu-
na hii ni kwenda kuangalia kwa makusudi kidogo cryptic-
sisi kufanya kitu kama kwenda mkono wa kushoto wa chochote Anita ni akionyesha
na kisha kupata shamba iitwayo n.
Anita ni pointer, lakini nini ni * anita?
Nini kupata wakati kwenda nini Anita ananyoosha saa?
struct, nodi, na node, wanakumbuka, ana shamba iitwayo n
kwa sababu ina, wanakumbuka, haya mashamba 2, karibu na n,
kuwa tuliona wakati ago haki hapa.
>> Kwa kweli kuiga hii katika kanuni,
tunaweza kufanya hii na kusema kama ((* anita). n == n), n kwamba mimi nina kuangalia kwa.
Ona kwamba kazi ilikuwa kupita katika idadi najali.
Kisha mimi unaweza kwenda mbele na kufanya kitu kama kurudi kweli.
Mwingine, kama si kwamba kesi, nini nataka kufanya?
Je, mimi kutafsiri kwa kificho nini Anita akafanya hivyo intuitively kutembea kupitia orodha?
Nifanye nini hapa kuiga Anita kuchukua hatua kwa upande wa kushoto, kuwa hatua kwa upande wa kushoto?
[Inaudible mwanafunzi majibu] >> gani hiyo?
[Inaudible mwanafunzi majibu]
Nzuri, si wazo mbaya, lakini katika siku za nyuma, wakati tumekuwa kufanyika hili, tumefanya anita + +
kwa sababu kwamba ingekuwa kuongeza idadi 1 kwa Anita,
ambayo ingekuwa kawaida kumweka katika mtu mwingine, kama Ramon,
au mtu wa pili wake, au karibu naye mtu chini ya mstari.
Lakini si kwamba nzuri kabisa hapa kwa sababu gani jambo hili kuangalia kama katika kumbukumbu?
Si kwamba. Tuna Disable kwamba.
Inaonekana kama hii katika kumbukumbu, na hata ingawa nimekuwa inayotolewa 1 na 2 na 3 karibu na mtu mwingine,
kama kweli sisi simulate hii-unaweza guys, wakati bado akionyesha watu sawa,
Unaweza baadhi ya wewe kuchukua random hatua nyuma, baadhi yenu hatua random mbele?
>> Fujo Hii bado ni orodha zilizounganishwa,
lakini haya guys inaweza kuwa mahali popote katika kumbukumbu,
hivyo anita + + si kwenda kufanya kazi kwa nini?
Nini katika eneo anita + +?
Nani anajua.
Ni baadhi ya thamani mengine kwamba tu hivyo hutokea kuwa alitia
kati ya wote wa nodi hiyo kwa bahati kwa sababu sisi siyo kutumia safu.
Sisi zilizotengwa kila nodi hiyo mmoja mmoja.
Sawa, kama guys unaweza safi wenyewe nyuma juu.
Hebu kupendekeza kwamba badala ya anita + +, sisi badala kufanya anita anapata-
vizuri, kwa nini sio sisi kwenda chochote Anita ananyoosha saa na kisha kufanya ijayo.?
Kwa maneno mengine, sisi kwenda Ramon, ambaye ameshika namba 22,
na kisha ya pili. ni kama ingawa Anita itakuwa kuiga mkono wake wa kushoto pointer.
Lakini yeye hakutaka kwenda mbali zaidi kuliko Ramon kwa sababu sisi kupatikana 22.
Lakini kwamba itakuwa ni wazo. Sasa, hii ni fujo mungu-kubwa.
Kusema kweli, hakuna mtu milele kumbuka hii syntax, na hivyo nashiriki,
ni kweli kidogo makusudi-oh, wewe hawakuwa kweli kuona kile aliandika.
Hii itakuwa zaidi ya kulazimisha kama naweza. Voilà!
>> Nyuma ya pazia, nilikuwa kutatua tatizo kwa njia hii.
Anita, kuchukua hatua kwa upande wa kushoto,
kwanza, hatuwezi kwenda anuani kwamba Anita ni akionyesha
na ambapo yeye utapata si tu n, ambayo sisi tu checked kwa ajili ya kulinganisha,
lakini pia kupata ijayo - katika kesi hii,
Ramon wa mkono wa kushoto akizungumzia nodi ijayo katika orodha.
Lakini hii ni fujo mungu-kubwa ambayo mimi inajulikana mapema,
lakini zinageuka C unatuwezesha kurahisisha hii.
Badala ya kuandika (* anita), tunaweza badala kuandika tu anita-> n,
na ni exact kitu functionally, lakini ni mengi zaidi Intuitive,
na ni mengi zaidi sambamba na picha kwamba sisi tumekuwa kuchora
muda wote huu kwa kutumia mishale.
>> Mwisho, nini tunahitaji kufanya mwisho wa mpango huu?
Kuna moja mstari wa kanuni iliyobaki.
Kurudi nini?
Uongo, kwa sababu kama sisi kupata njia nzima wakati kitanzi
na Anita ni, kwa kweli, null, kwamba maana akaenda njia yote hadi mwisho wa orodha
ambako alikuwa akionyesha-nini jina yako tena?
Ari. >> Ari wa mkono wa kushoto, ambayo ni null.
Anita ni sasa null, na mimi kutambua wewe ni wamesimama tu hapa awkwardly katika utata
kwa sababu mimi naenda mbali juu monologue hapa,
lakini tutaweza kuhusisha wewe tena katika muda tu.
Anita ni null katika hatua katika hadithi, hivyo kitanzi wakati vipoe,
na tuna kurudi uongo kwa sababu kama yeye got njia yote ya pointer Ari wa null
basi kulikuwa hakuna idadi ya kwamba yeye kutafutwa katika orodha.
Tunaweza safi hii juu pia, lakini hii ni utekelezaji pretty nzuri basi
ya kazi traversal, kupata kazi kwa orodha zinazoungwa.
Ni bado linear tafuta, lakini si rahisi kama + + pointer
au + + variable i kwa sababu sasa hatuwezi nadhani
ambapo kila mmoja wa nodi hiyo ni katika kumbukumbu.
Tuna kwa literally kufuata ya uchaguzi wa breadcrumbs au, hasa zaidi,
kuyatumia, kupata kutoka nodi mmoja hadi mwingine.
>> Sasa hebu jaribu mwingine mmoja. Anita, unataka kurudi hapa?
Mbona sisi kwenda mbele na kutenga mtu mwingine kutoka watazamaji?
Malloc-nini jina yako >> Rebecca?.
Rebecca. Rebecca imekuwa malloced kutoka kwa watazamaji,
na yeye sasa ni hifadhi ya idadi 55.
Na lengo katika mkono sasa ni kwa Anita Insert
Rebecca katika orodha wanaohusishwa hapa katika nafasi yake sahihi.
Njoo hapa juu kwa muda.
Nimefanya kitu kama hiki.
Nimefanya * nodi. Na nini jina yako tena?
Rebecca. >> Rebecca, okay.
Rebecca anapata malloc (sizeof (node)).
Tu kama tumetenga mambo kama wanafunzi na whatnot katika siku za nyuma,
tunahitaji ukubwa wa nodi, hivyo sasa Rebecca
ananyoosha katika nini?
Rebecca ana mashamba mawili ndani yake, moja ambayo ni ya 55.
Hebu kufanya nini, rebecca-> = 55.
Lakini basi rebecca-> ijayo lazima-kama hivi sasa, mkono wake ni aina ya nani anajua?
Ni akionyesha thamani baadhi ya takataka, hivyo kwa nini si kwa hatua nzuri
sisi angalau kufanya hili ili mkono wa kushoto ni sasa katika upande wake.
Sasa Anita, kuchukua ni kutoka hapa.
Una Rebecca baada zimetengwa.
Kwenda mbele na kupata ambapo sisi inapaswa kuweka Rebecca.
Nzuri, nzuri sana.
Okay, nzuri, na sasa tunahitaji wewe kutoa kidogo ya mwelekeo,
hivyo umefikia Ari.
Mkono wake wa kushoto ni null, lakini Rebecca wazi ni mali ya haki,
hivyo ni jinsi gani tunaweza kubadilisha orodha hii wanaohusishwa
ili Insert Rebecca katika mahali sahihi?
Kama unaweza literally hoja ya watu mikono kushoto kuzunguka kama inahitajika,
tutaweza kurekebisha tatizo kwa njia hiyo.
Okay, nzuri, na wakati huo huo, Rebecca wa mkono wa kushoto ni sasa kwa upande wake.
>> Hiyo ilikuwa rahisi mno.
Hebu jaribu kutenga-we're karibu kufanyika, 20.
Okay, kuja juu juu.
20 zimetengwa, hivyo basi mimi kwenda mbele na kusema tena hapa
tumekuwa tu kufanyika nodi * saad.
Tuna malloc (sizeof (node)).
Sisi basi kufanya hivyo halisi syntax kama sisi alifanya mbele kwa 20,
na mimi itabidi kufanya ijayo = null, na sasa ni juu Anita
kuingiza wewe katika orodha wanaohusishwa, kama unaweza kucheza kwamba exact jukumu.
Nitafanya.
Okay, nzuri.
Sasa fikiria kwa makini kabla ya kuanza kusonga mikono kushoto kote.
Wewe kwa mbali got jukumu zaidi Awkward leo.
Ambaye mkononi lisongehswe kwanza?
Okay, kusubiri, mimi nina kusikia baadhi ya hapana.
Kama baadhi folks ingekuwa politely kama msaada kutatua hali ya Awkward hapa.
Ambaye mkono wa kushoto lazima updated kwanza labda? Yeah.
[Mwanafunzi] Saad ya.
Okay, Saad, kwa nini, ingawa?
[Inaudible mwanafunzi majibu]
Nzuri, kwa sababu kama sisi hoja-nini jina yako >> Marshall?.
Marshall, kama sisi hoja mkono wake wa kwanza chini ya null,
sasa tuna literally yatima watu wanne katika orodha hii
kwa sababu alikuwa kitu pekee akionyesha Ramon na kila mtu wa kushoto,
hivyo uppdatering kwamba pointer kwanza ilikuwa mbaya.
Hebu tengua kwamba.
Nzuri, na sasa kwenda mbele na hoja sahihi kushoto akionyesha Ramon.
Hii anahisi redundant kidogo.
Sasa kuna watu wawili akionyesha Ramon, lakini hiyo ni faini
kwa sababu sasa jinsi mwingine kufanya sisi update orodha?
Gani nyingine mkono ana hoja?
Bora, sasa sisi waliopotea yoyote kumbukumbu?
Hapana, hivyo nzuri, hebu angalia kama hatuwezi kuvunja hii mara moja zaidi.
>> Mallocing mara moja ya mwisho, namba 5.
Njia yote ya nyuma, kuja juu chini.
Ni ya kusisimua sana.
[Applause]
Nini jina yako >> Ron?.
Ron, sawa, wewe ni malloced kama namba 5.
Tumekuwa tu ifanyike kificho kwamba ni karibu sawa na hizi
pamoja na haki ya jina tofauti.
Bora.
Sasa, Anita, bahati nzuri kuingiza namba 5 katika orodha sasa.
Nzuri, na?
Bora, hivyo hii ni kweli ya tatu ya kesi tatu jumla.
Sisi kwanza alikuwa mtu mwishoni, Rebecca.
Sisi basi alikuwa mtu katikati.
Sasa tuna mtu tangu mwanzo, na katika mfano huu,
sisi sasa alikuwa kwa update Lucas kwa mara ya kwanza
kwa sababu ya kipengele kwanza katika orodha ya sasa ina uhakika kwenye nodi mpya,
ambao, kwa upande mwingine, ni akionyesha idadi nodi 9.
>> Hii ilikuwa maandamano hugely Awkward, mimi nina uhakika,
hivyo duru kubwa ya applause kwa guys haya ikiwa naweza.
Nicely kufanyika.
Hayo ni yote. Unaweza kuweka vipande yako ya karatasi kama kumbukumbu kidogo.
Ni zinageuka kuwa kufanya hivyo katika kanuni
si kabisa rahisi kama tu kusonga mikono kuzunguka
na akizungumzia kuyatumia katika mambo mbalimbali.
Lakini kutambua kwamba linapokuja wakati wa kutekeleza kitu kama
orodha wanaohusishwa au lahaja yake kama wewe kuzingatia kweli
haya misingi ya msingi, matatizo bite-size mimi kuwa na takwimu nje,
ni hii hii au mkono mkono, kutambua kwamba ni nini vinginevyo mpango uungwana tata
inaweza, kwa kweli, kuwa kupunguzwa kwa vitalu haki rahisi jengo kama hii.
>> Hebu kuchukua mambo katika mwelekeo kisasa zaidi bado.
Sisi sasa kuwa na wazo la orodha zinazoungwa.
Sisi pia kuwa-shukrani kwa maoni nyuma kuna-orodha doubly wanaohusishwa,
ambayo inaonekana karibu sawa, lakini sasa tuna kuyatumia mbili ndani ya struct
badala ya mmoja, na sisi inaweza pengine kuwaita wale kuyatumia uliopita na ujao
au kushoto au kulia, lakini sisi, kwa kweli, haja ya watu hao wawili.
code itakuwa zaidi kidogo wanaohusika.
Anita wangalipata kufanya kazi zaidi hapa jukwaani.
Lakini tungeweza shaka kutekeleza kwamba aina ya muundo.
Katika suala la mbio wakati, ingawa, nini itakuwa wakati mbio
kwa Anita wa kutafuta n idadi katika orodha wanaohusishwa sasa?
Bado kubwa O ya n, hivyo ni hakuna bora kuliko tafuta linear.
Hatuwezi kufanya search binary, ingawa, tena.
Kwa nini ilikuwa ni kwamba kesi? Huwezi kuruka karibu.
Hata ingawa sisi ni wazi kuona binadamu wote juu ya hatua,
na Anita wangeweza eyeballed na kusema, "Hapa ni katikati ya orodha,"
yeye bila kujua kwamba kama yeye walikuwa programu ya kompyuta
kwa sababu neno tu yeye alikuwa na latch juu kwa wakati wa mwanzo wa mazingira
ilikuwa Lucas, ambaye alikuwa pointer kwanza.
Angeweza lazima kuwa na kufuata viungo hizo,
kuhesabu njia yake mpaka yeye kupatikana takribani katikati,
na hata basi, yeye si kwenda kujua wakati yeye kufikiwa katikati
isipokuwa yeye anakwenda njia yote ya mwisho kwa kufikiri jinsi wengi kuna,
kisha backtracks, na kwamba pia itakuwa ngumu kama huna
orodha doubly wanaohusishwa wa aina fulani.
>> Kutatua matatizo ya baadhi ya leo, lakini kuanzisha wengine.
Je kuhusu muundo tofauti kabisa data?
Hii ni picha ya trays katika Mather House,
na katika kesi hii, tuna muundo data tumekuwa pia aina ya tayari kuzungumza juu.
Kuongelea stack katika muktadha wa kumbukumbu,
na kwamba aina ya makusudi jina lake kwa sababu stack katika suala la kumbukumbu
ni ufanisi muundo data ambayo ina zaidi na zaidi stuff layered juu yake.
Lakini jambo kuvutia kuhusu stack, kama ilivyo katika hali halisi,
ni kwamba ni aina maalum ya muundo data.
Ni muundo data ambapo kipengele kwanza katika
ni kipengele mwisho nje.
Kama wewe ni tray kwanza kuwekwa kwenye stack,
wewe ni kwenda kuwa kwa bahati mbaya tray mwisho kuchukuliwa mbali stack,
na kwamba si lazima jambo jema.
Kinyume, unaweza kufikiri juu yake kwa njia nyingine kote,
mwisho katika ni nje ya kwanza.
>> Sasa, je yoyote matukio kuja akili ambapo baada ya stack
data muundo ambapo una kwamba mali
ya mwisho katika, nje ya kwanza, ni kweli kulazimisha?
Ni kwamba jambo zuri? Ni kwamba jambo baya?
Ni dhahiri kitu mbaya kama trays walikuwa si wote kufanana
na wote walikuwa maalum rangi tofauti au whatnot,
na rangi unataka ni njia yote chini.
Bila shaka, huwezi kupata kwamba bila juhudi kubwa.
Una kuanza kutoka juu na kufanya kazi kwa njia yako chini.
Vile vile, nini kama ungekuwa mmoja wa wavulana hawa mashabiki
angojaye hadi usiku wote kujaribu kupata iPhone mistari na hadi
katika mahali kama hii?
Je, si ni kuwa nzuri kama Apple kuhifadhi
walikuwa data stack muundo?
Yay? Bali?
Ni nzuri tu kwa watu ambao show up katika dakika ya mwisho iwezekanavyo
na kisha kupata amelitunda foleni.
Na kwa kweli, ukweli kwamba nilikuwa hivyo kutega kusema foleni
ni kweli sambamba na nini tunataka kuwaita aina hii ya muundo data,
moja katika ukweli ambapo utaratibu gani jambo,
na unataka moja ya kwanza katika kuwa moja ya kwanza nje
kama tu kwa ajili ya haki za binadamu.
Tutaweza ujumla wito kwamba data foleni muundo.
>> Ni zinageuka badala orodha wanaohusishwa, tunaweza kuanza kutumia hizi sawa mawazo ya msingi
na kuanza kujenga aina mpya na tofauti ya ufumbuzi wa matatizo.
Kwa mfano, katika kesi ya stack, tunaweza kuwakilisha stack
kutumia muundo data kama hii, napenda kupendekeza.
Katika kesi hiyo, nimekuwa alitangaza struct, na nimekuwa alisema ndani ya muundo huu
ni safu ya idadi na kisha kuitwa variable kawaida,
na mimi naenda kuwaita jambo hili stack.
Sasa, kwa nini hii kweli kazi?
Katika kesi ya stack, mimi naweza kuchora hili kwa ufanisi kwenye screen kama safu.
Hapa ni stack yangu. Wale ni namba yangu.
Na tutaweza kuteka yao kama hii, hii, hii, hii, hii.
Na kisha mimi na baadhi nyingine data mwanachama hapa,
iitwayo kawaida, hivyo hii ni kawaida, na hii ni idadi,
na kwa pamoja, iPad zima hapa inawakilisha moja stack muundo.
Sasa, kwa default, ukubwa ina ikatengeneza got kuwa initialized 0,
na nini ndani ya safu ya idadi ya awali
wakati mimi kwanza kutenga safu?
Takataka. Nani anajua? Na si kweli jambo.
Haijalishi kama hii ni 1, 2, 3, 4, 5, kabisa nasibu
kwa bahati mbaya kuhifadhiwa katika muundo wangu kwa sababu ya muda mrefu kama mimi kujua kwamba ukubwa wa stack
ni 0, basi mimi kujua programmatically, si kuangalia yoyote ya vipengele katika safu.
Haijalishi nini huko.
Je, si kuangalia yao, kama itakuwa na maana ya kawaida ya 0.
>> Lakini tuseme sasa mimi kwenda mbele na kuingiza kitu kwenye mkusanyiko.
Mimi nataka kuingiza namba 5, hivyo mimi kuweka namba 5 hapa,
na kisha nini mimi kuweka chini hapa?
Sasa mimi ingekuwa kweli kuweka chini 1 kwa ukubwa,
na sasa stack ni ya kawaida ya 1.
Nini kama mimi kwenda mbele na kuingiza namba, hebu sema, 7 ijayo?
Hii basi anapata updated 2, na kisha tutaweza kufanya 9,
na kisha hii anapata updated 3.
Lakini jambo la kuvutia sasa ya stack hii ni kwamba
Natakiwa kuondoa kipengele ambayo kama nataka pop
kitu mbali ya stack, hivyo kusema?
9 itakuwa jambo la kwanza kwenda.
Jinsi lazima picha kubadilika kama nataka pop kipengele mbali stack,
kiasi kama tray katika Mather?
Yeah >> [Mwanafunzi] Set ukubwa wa 2..
Hasa, wote mimi kufanya ni kuweka ukubwa wa 2, na nini mimi na safu?
Sina kufanya kitu chochote.
Mimi naweza, tu kuwa anal, kuweka 0 huko au -1 au kitu kwa ishara ya
kuwa hii si thamani legit, lakini haijalishi kwa sababu
Naweza kurekodi nje ya safu yenyewe ni muda gani
hivyo kwamba mimi kujua tu kuangalia mambo mawili ya kwanza katika safu hii.
Sasa, kama mimi kwenda na kuongeza idadi ya 8 na safu hii, jinsi gani picha kubadili ijayo?
Hii inakuwa 8, na hii inakuwa 3.
Mimi kukata pembe chache hapa.
Sasa tuna 5, 7, 8, na tuko nyuma na ukubwa wa 3.
Hii ni pretty rahisi kutekeleza,
lakini wakati ni sisi kwenda kwa majuto uamuzi huu design?
Wakati kufanya mambo kuanza kwenda sana, vibaya sana? Yeah.
[Inaudible mwanafunzi majibu]
Wakati unataka kwenda nyuma na kupata kipengele kwanza kuweka in
>> Ni zinageuka hapa hata ingawa stack ni safu chini ya Hood,
miundo haya data tumekuwa kuanza kuzungumza kuhusu pia ujumla inayojulikana kama
abstract data miundo ambapo jinsi re kutekelezwa
ni kabisa badala ya uhakika.
muundo data kama stack zinatakiwa kuongeza msaada
shughuli kama vile kushinikiza, ambayo inasukuma kwenye tray stack,
na pop, ambayo kuondosha kipengele kutoka stack, na hiyo ni yake.
Kama ungekuwa na download code za mtu mwingine ambaye tayari kutekelezwa
jambo hili aitwaye stack, mtu kwamba ingekuwa imeandikwa
mbili tu kazi kwa ajili yenu, kushinikiza na pop, ambao lengo pekee katika maisha
itakuwa kwa kufanya hasa kwamba.
Wewe au kwake ambaye kutekelezwa kwamba mpango
ingekuwa kabisa moja ya kuamua jinsi ya kutekeleza
semantiki ya kusukuma na popping chini ya Hood
au utendaji wa kusukuma na popping.
Na mimi kuwa alifanya uamuzi fulani shortsighted hapa
kwa kutekeleza stack yangu na muundo huu rahisi data kwa nini?
Wakati gani data hii kuvunja muundo?
Katika hatua gani unataka Mimi kurudi kosa wakati mtumiaji wito kushinikiza, kwa mfano?
[Mwanafunzi] Kama hakuna nafasi zaidi.
Hasa, ikiwa hakuna nafasi zaidi, ikiwa nimepata ulizidi uwezo,
ambayo ni wote kofia kwa sababu inaashiria kwamba ni baadhi ya aina ya mara kwa mara kimataifa.
Vizuri, basi Mimi tu kwenda na kusema, "Samahani, siwezi kushinikiza thamani nyingine
kwenye stack, "kiasi kama katika Mather.
>> Katika hatua nyingine, wao wanaenda kupiga sehemu ya juu ya baraza la mawaziri kuwa kidogo.
Hakuna nafasi zaidi au uwezo katika stack, ambapo kiwango kuna baadhi ya aina ya makosa.
Wanapaswa kuweka kipengele mahali pengine, tray mahali pengine,
au mahali pa wakati wote.
Sasa, pamoja na foleni, tunaweza kutekeleza tofauti kidogo.
foleni ni tofauti kidogo katika kuwa chini ya Hood, inaweza kutekelezwa
kama safu, lakini kwa nini, katika kesi hii, mimi kupendekeza
na pia kuwa na kipengele kichwa kichwa anayewakilisha ya orodha,
mbele ya orodha, mtu wa kwanza katika mstari katika kuhifadhi Apple, kwa kuongeza ukubwa?
Kwa nini nahitaji kipande ziada ya data hapa?
Fikiria nyuma kwa nini idadi ni
ikiwa nimepata inayotolewa ni kama ifuatavyo.
Tuseme hii ni sasa foleni badala ya stack,
tofauti kuwa-tu kama foleni kuhifadhi-Apple ni haki.
mtu wa kwanza katika mstari katika mwanzo wa orodha, idadi 5 katika kesi hii,
yeye au yeye ni kwenda basi katika kuhifadhi kwanza.
Hebu kufanya hivyo.
Tuseme kwamba hii ni hali ya foleni yangu katika wakati huu katika muda, na sasa kuhifadhi Apple
kuufungua na mtu wa kwanza, namba 5, ni kuongozwa katika kuhifadhi.
Ninawezaje kubadilisha picha sasa kwamba mimi de-queued mtu wa kwanza
mbele ya mstari?
Nini kwamba? >> [Mwanafunzi] Mabadiliko ya foleni.
Mabadiliko ya kichwa, hivyo 5 kutoweka.
Katika hali halisi, ni kama ingawa-jinsi bora ya kufanya hivyo?
Katika hali halisi, ni kana kwamba hii guy kutoweka.
Nini idadi 7 kufanya katika duka halisi?
Wangeweza kuchukua hatua kubwa mbele.
>> Lakini nini sisi kuja kufahamu linapokuja arrays
na kusonga mambo kote?
Hiyo ni aina ya kupoteza muda wako, sawa?
Kwa nini wewe kuwa hivyo anal kama kuwa na mtu wa kwanza
katika mwanzo wa mstari katika mwanzo wa kimwili chunk ya kumbukumbu?
Hiyo kabisa lazima. Kwa nini?
Je, inaweza mimi kumbuka tu badala? >> [Inaudible mwanafunzi majibu]
Hasa, mimi naweza kumbuka tu na hii kichwa data mwanachama ziada
kwamba sasa ni mkuu wa orodha ni tena 0, ambayo ilikuwa ni wakati iliyopita.
Sasa ni kweli namba 1. Kwa njia hii, mimi kupata optimization kidogo.
Kwa sababu tu nimepata de-queued mtu kutoka mstari katika mwanzo wa mstari katika kuhifadhi Apple
haina maana kila mtu ana kuhama, ambayo wanakumbuka ni operesheni linear.
Naweza kutumia muda badala ya mara kwa mara tu
na kufikia basi majibu kwa kasi zaidi.
Lakini mimi nina bei kulipa ni nini kupata kwamba utendaji ziada
na si kuwa na kuhama kila mtu?
Yeah. >> [Inaudible mwanafunzi majibu]
Anaweza kuongeza watu zaidi, vizuri, tatizo kwamba ni orthogonal
na ukweli kwamba sisi siyo shifting watu duniani.
Ni bado safu, hivyo kama au sisi kuhama kila mtu au si-
oh, mimi kuona nini maana, sawa.
Kweli, mimi kukubaliana na unachosema kwa kuwa karibu kama ingawa
tuko sasa kamwe kwenda kutumia mwanzo wa safu hii tena
kwa sababu kama mimi kuondoa 5, basi mimi kuondoa 7.
Lakini mimi tu kuweka watu kwa haki.
>> Ni anahisi kama mimi nina kupoteza nafasi, na hatimaye foleni yangu disintegrates ndani ya kitu!
hivyo tunaweza tu watu iliyomficha
na tunaweza kufikiri wa safu hii kwa kweli kama baadhi ya aina ya muundo mviringo,
lakini sisi kutumia nini operator katika C kufanya aina hiyo ya iliyomficha?
[Inaudible mwanafunzi majibu] >> operator modulo.
Itakuwa annoying kidogo kufikiri kwa jinsi gani unaweza kufanya iliyomficha
lakini tunaweza kufanya hivyo, na sisi inaweza kuanza kuweka watu katika kile kutumika kuwa mbele ya mstari,
lakini sisi kumbuka tu na hii variable kichwa kichwa ambaye halisi ya mstari kweli ni.
Je, iwapo, badala yake, lengo letu hatimaye, ingawa,
ilikuwa kuangalia namba, kama tulivyofanya hapa juu ya hatua kwa Anita,
lakini kweli tunataka bora ya walimwengu wote hawa?
Tunataka zaidi kuliko sophistication safu inaruhusu
sababu tunataka uwezo wa dynamically kukua muundo data.
Lakini hatutaki kuwa na mapumziko kwa kitu ambacho sisi alidokeza
katika hotuba ya kwanza ilikuwa si algorithm mojawapo,
ile ya utafutaji linear.
Ni zinageuka kuwa unaweza, kwa kweli, kufikia
au angalau karibu na wakati mara kwa mara, ambapo mtu kama Anita,
kama yeye configures data wake muundo si kwa kuwa orodha zilizounganishwa,
si kwa kuwa stack, si kwa kuwa foleni, anaweza, kwa kweli,
kuja na muundo data kwamba unamruhusu kuangalia juu ya mambo,
hata maneno, si tu idadi, katika kile Tutamwita wakati mara kwa mara.
>> Na kwa kweli, kuangalia mbele, mmoja wa psets katika darasa hili ni karibu daima
utekelezaji wa spellchecker, ambapo
sisi kukupa tena baadhi 150,000 maneno ya Kiingereza na lengo ni
mzigo wale katika kumbukumbu na kwa kasi na uwezo wa kujibu maswali ya aina
ni neno hili yameendelezwa vizuri?
Na ingekuwa kweli Suck kama alikuwa na iterate kupitia maneno yote 150,000 kujibu.
Lakini, kwa kweli, tutaweza kuona kwamba tunaweza kufanya hivyo katika muda sana, ya haraka sana.
Na itakuja kuhusisha kutekeleza kitu kinachoitwa meza hash,
na hata kama katika mtazamo wa kwanza jambo hili aitwaye meza hash ni kwenda
hebu kufikia haya super mwitikio wa haraka wakati,
zinageuka kuwa kuna ukweli katika tatizo.
Linapokuja wakati wa kutekeleza jambo hili aitwaye-tena, mimi nina kufanya hivyo tena.
Mimi nina moja tu hapa.
Linapokuja wakati wa kutekeleza jambo hili aitwaye meza hash,
sisi itawabidi kufanya uamuzi.
Jinsi kubwa lazima jambo hili kweli kuwa?
Na wakati sisi kuanza idadi ya kuingiza katika meza hii hash,
jinsi sisi kwenda kuhifadhi yao katika namna
kwamba tunaweza kupata yao nyuma nje kwa haraka kama sisi got yao katika?
Lakini tutaweza kuona kabla ya muda mrefu kwamba swali hili
wakati siku ya kuzaliwa ya kila mtu ni katika darasa itakuwa kabisa germane.
Ni zinageuka kuwa katika nafasi hii, sisi tumepewa watu mia kadhaa,
hivyo tabia mbaya kwamba sisi wawili kuwa na siku ya kuzaliwa huo pengine ni pretty juu.
Nini kama kulikuwa na 40 tu ya sisi katika chumba hii?
Je, ni tabia mbaya ya watu wawili kuzaliwa sawa?
[Wanafunzi] Zaidi ya 50%.
Yeah, zaidi ya 50%. Kwa kweli, mimi hata kuletwa chati.
Ni zinageuka-na hii ni kweli tu sneak preview-
kama kuna 58 tu ya sisi katika nafasi hii, uwezekano wa 2 wa kwetu
kuwa na siku ya kuzaliwa huo ni hugely juu, karibu 100%,
na ambayo inaenda kusababisha rundo zima la kuumiza kwa ajili yetu juu ya Jumatano.
>> Kwa kuwa alisema, hebu kuahirishwa hapa. Tutaweza kuona juu ya Jumatano.
[Applause]
[CS50.TV]