[Powered by Google Translate] [6. Artikulua: Less erosoa]
[Nate Hardison] [Harvardeko Unibertsitateko]
[Hau da CS50.] [CS50.TV]
Guztiak eskubidea. Ongi etorri atal 6.
Aste honetan, datuen egitura buruz hitz egiten ari gara atalean,
batez ere, aste honetan arazoa spellr
datuak beste egitura esplorazio sorta oso bat du.
Arazoa multzoa joan zaitezke modu ezberdinak sorta bat daude,
eta datu gehiago egiturak buruz badakizu, cool gauza gehiago egin ahal izango duzu.
>> Hargatik Hasteko. Lehenik eta behin pila buruz hitz egin dugu,
pilaketa eta ilara datuen egitura ari garen hitz egingo.
Pilak eta ilarak dira benetan lagungarria grafikoak buruz hitz egiten hasten gara,
Ez ari gara eskubidea, beraz, asko egin orain.
Baina benetan ona CS big datuak oinarrizko egitura bat ulertzen ari dira.
Arazo multzo zehaztapen deskribapena,
tira baduzu, pilak buruzko hitzaldiak betean gisa
jangela erretiluak pila kafetegian duzula jantokiak
non jangela langileek dator eta jangela erretiluak jartzen haiekin garbitu ondoren,
horietako bat bestearen gainean pilatu dituzte.
Eta gero, haurrek janaria lortzen etortzen,
erretiluak eta tira off, lehen top bat, eta gero azpian, eta ondoren dela azpian.
Beraz, eragina, jangela langileak jarri erretilu lehen (a) ren hartu off lortzen da.
(A) ren jangela langileek jarri lehena off afaria lortzen da.
Arazo multzo zehaztapenak, ez baduzu dagoeneko deskargatu daiteke,
mota honen egiturari pila datuak stucture erabiliz modelatu buruz hitz egiten dugu.
>> Beraz, zer lortu dugu hemen, hau da, antzeko zer hitzaldia aurkeztu zen,
hitzaldia izan ezik ints char * s aurrean aurkeztu genuen.
Pila bat azalera zer izango da?
Daniel? Zer dira pila hau gordetzeko?
[Daniel] Strings? >> Kateak ari gara gordetzeko pila honetan, zehatz-mehatz.
Guztiak izan behar duzu pila bat sortzeko array bat da
edukiera jakin bat, kasu honetan,
edukiera txanoak guztietan izango da konstante bat delako.
Eta gero, array gain, jarraipena egin behar dugu array-uneko tamaina da.
Hemen gauza bat kontutan izan cool mota
pilatuak datuak egitura sortuz, beste datu-egitura, array gainean ari gara.
Pilak ezartzeko modu ezberdinak daude.
Ez dugu egin nahiko oraindik, baina zorionez lotutako arazoak zerrenda egin ondoren,
ikusi nola erraz dezakezu lotuta zerrenda baten gainean pila baita inplementatzen duzu.
Baina orain, array dugu makila.
Beraz, berriro ere, guztiak behar dugu array bat eta array-tamaina jarraipena besterik ez dugu behar.
[Sam] Sentitzen dut, zergatik da zuk esan pila kateak gainean?
To me kateak pila barruan daude dirudienez.
[Hardison] Bai. Sortzen ari gara gure datuak array egitura hartzen ari gara -
galdera handi bat da. Beraz, galdera zergatik da, pertsona konektatuta hau ikusten,
zergatik ari zara esaten pila kateak gainean dugu,
Hemen kateak pila barruan daude itxura duelako?
Zein da erabat kasuan.
Zer nengokion ditudan array datu egitura bat eskuratu dugu.
Char * s array bat, kateak array hau lortu dugu,
eta pilatuak datuak egitura sortzeko gehituko dugu.
>> Beraz, pila bat array bat baino pixka bat gehiago konplexua da.
Pila bat eraikitzeko array bat erabili ahal izango ditugu.
Beraz, non pila array baten gainean eraikia dagoela esaten dugu.
Era berean, lehenago esan dudan bezala, pila bat eraikitzeko dugu lotuta zerrenda gainean.
Array bat erabiliz, gure elementuak eduki ordez,
lotutako zerrenda bat erabili izan dugu gure elementuak eduki eta inguruan pila eraikitzeko.
Dezagun adibide pare bat ibiltzeko, kode batzuk begira,
zer ari den benetan gertatzen ari den hemen ikusi ahal izateko.
Ezkerrean, behera bota dut zer eta egitura pila lukeen itxura memorian
edukiera # lau izan definitu.
Gure lau elementu char * array lortu dugu.
Dugu got kateak [0], kateak [1], kateak [2], kateak [3],
eta, ondoren, gure tamaina osokoa azken espazio hori.
Ba al du zentzurik? Ongi da.
Hau da, zer gertatzen da eskubidea zer egiten badut,
nire kodea izango da, egiturari, izeneko s pilatzen dira eta egitura bat besterik ez deklaratzeko.
Hau da, zer gara. Behera Izan ere, planoan memorian aztarna hau.
Lehen galdera da zer dira pila eta egitura horren edukia?
Oraintxe ezer ari dira, baina ez dira guztiz ezer ez.
Zabor mota hau Oraindik dute. Haien ideia ez daukagu.
Noiz pila s aldarrikatzen dugu, ari gara horretan bota memoria gainean.
Mota int i geratuko eta ez da hasieratzean bezalakoa da.
Ez dakizu zer han. Bertan irakurri ahal izango duzu,
baina agian ez da super lagungarria.
One beti gogoratu egin nahi duzun gauza da hasieratu edozein izanda ere hasieratu behar dira.
Kasu honetan, tamaina abiarazi zero izango dugu,
den buelta eman Gurekin oso garrantzitsua izango delako.
Aurrera genezake, eta erakusleak, guztiak, char * s abiarazi,
balio batzuk ulergarria da, ziurrenik null izan.
Baina ez da guztiz beharrezkoa egin dugu.
>> Orain, bi pilak eragiketa nagusiak hauek dira?
Edozein hitzaldia gogoratzen zer egin pilak? Bai?
[Stella] bultzaka eta leihoa? >> Zehazki.
Eta bultzaka leihoa bi pila eragiketa nagusiak hauek dira.
Eta zer ez push egin? >> Zerbait jartzen du goiko aldera
pilaren, eta, ondoren, leihoa hartzen du off.
[Hardison] Zehazki. Beraz, bultzaka pilaren gainean zerbait bultzatzen.
Jangela-langileek jangela erretilu batean jarri eta behera mostradorera bezalakoa da.
Leihoa eta jangela erretilu bat hartzen ari da off pila.
Dezagun zer gertatzen den adibide pare baten bidez oinez
gauzak pila push dugu.
Ginen katea 'kaixo' gure pila gainean bultza nahi izanez gero,
hau da, zein den gure diagrama litzateke itxura gaur egun.
Ikusi zer gertatzen den?
Galtzen gure kateak array lehen elementu sartu ginen
eta gure tamaina Aldaketa upped 1 izan behar dugu.
Beraz, bada, bi diapositiben arteko aldea, hemen 0 izan zen, hemen push aurretik.
Hemen push ondoren.
Push aurretik, push ondoren.
Eta orain, elementu bat izan behar dugu, gure pila.
Katea "hello" da, eta hori da.
Everything array beste, gure kateak array, oraindik zabor.
Ez dugu hasieratu.
Demagun kate beste bultza gure pila aldera.
"Mundu" push une honetan ari gara.
Beraz, "mundu" hemen "hello" gainean doa dezakezu,
eta tamaina Aldaketa igotzen 2.
Orain "CS50", eta hori izango gainean, berriz bultza dezakegu.
Joaten gara itzuli bada, gauzak nola ari gara bultzaka pilaren gainean ikus daiteke.
Eta orain, pop lortu dugu.
Zerbait off pilaren popped dugu, zer gertatu zen?
Edozein ikus diferentzia? Pretty sotila da.
[Student] tamaina. >> Bai, tamaina aldatu egin da.
>> Zer gehiago litzateke espero duzu aldatzeko?
[Student] kateak, too. >> Right. Kateak ere.
Bihurtzen da egiten ari zarenean eta modu honetan,
ari gara, ez delako gure pila elementuak kopiatzeko,
Ez dugu ezer egin, bakarrik erabili ahal izango dugu tamaina
segimendua egiteko, gauzen kopurua gure array
beraz, berriro irekiko dugu, berriro ere decrement besterik ez dugu gure tamaina behera 1.
Benetan joan beharrik gabe eta ezer gainidatzi.
Funky mota.
Bihurtzen da normalean dugun utzi gauzak bakarrik da gutxiago lana delako egin digu.
Atzera joan eta zerbait gainidatzi ez badugu, ondoren, zergatik?
Beraz, bi aldiz off pila irekiko dugu, eta horrela, ez da tamaina decrement pare bat aldiz.
Eta berriro ere, hau da, bakarrik ez delako ari gara gauza gure pila kopiatzea.
Bai? Anima zaitez.
[Ikasle, ulertezina] >> Eta gero, zer gertatzen da zerbait push duzu berriro?
Zerbait bultzatzen dituzte berriro, non ez?
Non ez, joan Basil? Kateak [1] Into >>? >> Right.
Zergatik ez joan kateak [3]?
[Basil] ahaztu ez dagoela ezer kateak delako [1] eta [2]?
[Hardison] Zehazki. Gure pila, funtsean, "ahaztu" zela on ustiategi ezer
kateak [1] edo kateak [2], beraz, "Woot" push,
jartzen besterik ez da elementu sartu kateak [1].
Ba al dago edozein galdera nola lan honetan, oinarrizko maila batean?
[Sam] Beraz, hau ez da inolaz dinamikoa, zenbatekoa dagokionez
edo pilaren tamaina dagokionez?
[Hardison] Zehazki. Hau da, puntua izan zen hura ez zela dinamikoki growning pila bat.
Pila bat, eduki ahal izango ditu, gehienak lau char * s, lau gauzak.
Ginen eta saiatu push bosgarren gauza bat bada, zer egin behar gertatuko dela uste duzu?
[Ikasleak, ulertezina]
[Hardison] Zehazki. Tatuko gauzak zenbaki bat daude.
, Ziurrenik izan da errua seg, zer ginen arabera
hain zuzen ere back-end ginen ezartzeko.
Gainidatzi izan da. Hori da buffer gainezkatzea buruz hitz egin dugun klasean izan da.
Gainidatziak izan daiteke gauza nabariagoa izango litzateke
saiatu ginen gure pila gauza estra bat aurrera eraman nahi izanez gero?
Beraz, buffer gainezkatzea bat aipatu duzu.
Zer izan daiteke gauza idatzi get edo stomped on
gainez aparteko gauza bat bultza saiatzen gara ustekabean bada?
[Daniel, ulertezina] >> posibleak.
Baina, hasiera batean, zer gerta liteke? Laugarren gauza bat push saiatu ginen Zer gertatzen da?
Tamaina ordezka dezake, gutxienez memoria diagrama ditudan dugu lortu.
>> Arazo multzo zehaztapena, hau da, zer behar ezartzeko dugu, gaur egun,
zer nahi ez dugu egin faltsua besterik ez da itzuliko.
Gure push metodoa da boolear bat itzultzeko,
eta balio boolearra egia izango da push bada arrakastasua
eta faltsua ez badugu bultza ezer gehiago pila beteta dagoelako.
Dezagun oraintxe, kode hori pixka bat ibiltzeko.
Hona hemen gure push funtzioa.
Gure pila bat push katea hartu funtzioa pilan jarri.
Egia itzuli da katea ondo bada bultzatu
pilaketa eta false bestela.
Zer Edozein iradokizun hemen lehenengo gauza ona izan daiteke?
[Sam] tamaina berdinen ahalmena bada, orduan itzultzeko gezurra?
[Hardison] Bingo. Nice job.
Tamaina edukiera bada, faltsua itzuliko dugu.
Ezin dugu ezer gure pila gehiago jarri.
Bestela, zerbait pilaren gainean jarri nahi dugu.
Zer da "pilaren goialdean," egongo da?
[Daniel] Size 0? >> Size 0.
Zer da ondoren, pila bat gauza pila goian? Missy, ez dakizu?
[Missy] bat. >> Size bat da, zehazki. Tamaina gehituz mantentzeko,
eta aldi bakoitzean array indizearen tamaina elementu berria ari zara jartzen.
Egin ahal izango ditugu, mota horretako bat-forrua, zentzua badu.
Beraz, gure kateak array lortu dugu, sartzeko tamaina indizea dugu,
eta ari gara gure char * gordetzeko.
Ohartu katea kopiatzea ez gertatzen da hemen,
esleipena memoria dinamikoa ez?
Eta gero Missy ekarri zer egin dugu,
kate array leku egokia dugu gordetzen delako,
eta tamaina Kontatzailea bat da, beraz, hurrengo push prest gaude izan dugun esan zuen.
Beraz, hori egin ahal izango dugu s.size + +.
Puntu honetan, gure array dugu bultzatu. Zer egin behar dugu azken gauza?
[Student] itzuli egia. >> Itzuli egia.
Beraz, nahiko erraza da, pretty simple kodea. Ez da gehiegi.
Behin bilduta duzula zure burua pila nola funtzionatzen duen inguruan,
hau da, pretty simple inplementatzeko.
>> Orain, horren zati bat hurrengo kate bat off pilaren leihoa da.
You guys, hau pixka lan egiteko denbora pixka bat eman dut.
Ia funtsean, zer egin dugu hemen push alderantziz.
Zer egin dut benetan trabatzen.
-Tresnaren bat abiarazi dut hemen, eta aparatuaren
Bota dut arazoa 5 zehaztapena.
Hemen dugu mapan handiago izanez gero, ikus cdn.cs50.net/2012/fall/psets/pset5.pdf at nago ahal izango dugu.
Have you guys kode hau kokapena hemen dago, section6.zip?
Guztiak eskubidea. Egin ez baduzu, hori egiteko eskubidea, gaur egun, oso azkar.
Egin dut, nire terminal-leiho batean.
Benetan egin dut hemen. Bai.
Bai, Sam? >> Zergatik s.string 's tamaina parentesi artean esan = str buruzko galdera bat dut?
Zer da str? Da definitzen nonbait, aurretik edo - oh, char * str?
[Hardison] Bai, zehazki. Argumentua izan zen. >> Oh, ados. Sentitzen dugu.
[Hardison] sartu push katea ari gara zehaztuz
Beste galdera etorri liteke ez garela benetan hemen buruz hitz egin zen
eman izan dugun s izeneko aldagai hori hartu genuen
esparrua eta gurekin izan zen.
Eman zela pila struct honen hartu dugu.
Beraz, atzera bilatzen kode hau push,
stuff ari gara egiten Kate hori got pasa dezakezu
baina ondoren, Bat-batean, s.size ari gara sartzeko, bezala non ez etorriko da?
Begiratzen ari garen atalaren artxiboa kodea
eta, ondoren, stuff zure arazoa zaizu egiten ezartzen du,
gure pila egiturari global aldagai bat egin dugu
beraz, sarbidea izan dezakegu gure hainbat funtzio guztiak
eskuz pasatu inguruan eta pasa erreferentzia izan gabe,
ez da stuff mota guztiak.
Besterik gabe, apur bat iruzurra ari gara, izango bada, gauzak egiteko nicer.
Eta zerbait egiten ari gara hemen dibertigarria delako, errazagoa da.
Askotan, ikusi egin beharko duzu dute handi bat datuak egitura
konpainiarena ari diren programaren barruan.
>> Dezagun atzera jo tresnara.
Ba al denek, arrakastaz lortu section6.zip?
Denek deskonprimitu unzip section6.zip erabiliz?
Atal 6 direktorioan sartu baduzu -
aah, leku osoko
eta hemen zerrendatzen baduzu, ikusiko duzu duzula got hiru c fitxategiak.
Ilara batean, SLL, banaka-lotutako zerrenda da, eta pila bat lortu duzu.
Irekitzen baduzu stack.c
ikusi ditudan Gurekin definitutako egiturari hau eskuratu dezakezu,
zehatza eta egitura besterik ez dugu diapositibak buruz hitz egin zuen.
Lortu dugu gure aldagai global pila,
lortu dugu gure push funtzioa,
eta, ondoren, lortu dugu gure pop funtzioa.
Kodea jarri dut push itzuli diapositiba hemen,
baina zer you guys egin nahi nuke, zure gaitasuna onena
joan eta pop funtzioa ezartzea.
Behin inplementatu duzun, hau konpilatu ditzakezu egiteko pila,
eta, ondoren, exekutatu emaitzak pila exekutagarria
eta hori test kodea honetan guztiak exekutatu egingo dute behera hemen nagusian.
Eta nagusia hartzen du arreta benetan push eta pop deiak egiteko
eta ziur dena ondo pasatzen.
Initializes ere pila tamaina hemen
beraz, ez duzu hori hasieratzeko kezkatu.
Bere gain hartuko duen bezala izan da hasieratu dezakezu
denbora sartzeko pop funtzioa.
Ez duela zentzurik?
Beraz, hemen goaz. Push kodea.
Emango dizut guys 5 edo 10 minutu.
Eta behin-behineko, edozein zalantza izanez gero ari zaren kodifikazioa bitartean,
mesedez eskatu ozen.
Beraz, bada, itsastea puntu bat, besterik ez galdetu.
Let me jakin, besteek jakin dezagun.
Lan egin hurkoari ere.
[Daniel] besterik ez gara pop ezartzeko oraintxe bertan? >> Just pop.
Push ezartzeko kopiatu arren Nahi izanez gero,
, beraz, azterketa funtzionatuko du.
Zaila delako gauzak sartzeko probatzeko
edo, zaila da leihoa gauza pila bat probatzeko ez dago ezer pila hasteko.
>> Zer da pop ustezko itzuli da? Pilaren goialdean elementu.
Ustezko elementu off pilaren goialdean
eta, ondoren, pilaren tamaina decrement
eta, gaur egun, galdu duzun elementuaren gainean.
Eta, ondoren, elementu itzultzeko gainean.
[Ikaslea, ulertezina]
[Hardison] Beraz, zer gertatzen da, ez baduzu? [Ikaslea, ulertezina]
Zer bukatzen happening da seguruenik ari zaren bai sartzeko
elementu bat ez da hasieratu oraindik, beraz, kalkulua
non azken elementua da off.
Hortaz, hona hemen, konturatu baduzu, push, kateak ari gara sartzeko s.size elementu
indize bat berria delako.
Pilaren goialdean berria da.
Pop, berriz, s.size hurrengo espazioa izango da,
espazioa zure pila elementu guztien gainean.
Beraz, goi-elementua ez da s.size
baizik eta, azpian.
>> Beste gauza duzunean egin - pop,
tamaina decrement daukazu.
Gogoratzen itzuliz gero gure little diagrama hemen
benetan, ikusi dugun gertatzen ari den gauza bakarra pop deitzen dugu
tamaina hori jaitsi da, lehenik eta behin, 2, eta ondoren 1.
Orduan elementu berri bat galtzen dugu, joan on litzateke Leku egokia.
[Basil] s.size 2 bada, orduan ez litzateke joan elementu 2,
eta, ondoren, nahi duen elementu pop off nahi duzuna?
Beraz, bada joan dugu >> Hargatik begiratu berriro.
Hau da, gure pila bada, puntu honetan
eta pop deitzen diogu,
goi-gehienak elementu ez den indizea da?
[Basil] 2 egun, baina 3. Pop egingo. >> Right.
Beraz, non gure tamaina 3,, baina indizea 2 elementu pop nahi dugu.
Array zero-indexatzeko duzula off-mota hori tipikoa da.
Beraz, nahi ez duzun hirugarren elementu pop, baina ez da hirugarren elementu indizea 3.
Eta arrazoia ez dugu ken 1 egiten denean bultzaka ari gara
oraintxe delako, konturatu top-gehienak elementu
ginen zerbait pila gainean push puntu honetan,
index 3 bultza nahi genuke.
Eta, beraz, besterik ez da gertatzen tamaina eta indizeak lerro denean bultzaka ari zaren.
>> Who got lan pila bat ezartzeko?
Lan pila bat lortu duzu. Ez duzu pop oraindik lan?
[Daniel] Bai. Baietz uste dut.
>> Programa exekutatzen ari da eta ez faulting seg, inprimatzeko?
Ez du inprimatu "arrakasta" exekutatzen duzun?
Bai. Egin pilatu, exekutatu, bistaratzen da "arrakasta" eta ez du boom joan
guztiak ona da.
Guztiak eskubidea. Goazen tresnara benetan azkar,
eta honen bidez dugu oinez.
Zer ari den gertatzen hemen pop begiratzen badiogu,
Daniel, zer da lehen gauza egiten duzula?
[Daniel] s.size 0 baino handiagoa bada.
[Hardison] Larreina. Eta zergatik egiten duzu?
[Daniel] ziur ez zela pilaren barruan zerbait egiteko.
[Hardison] Eskuin. Ziur s.size 0 baino handiagoa dela ziurtatu probatu nahi duzu;
bestela, zer gerta izan nahi duzu?
[Daniel] Return null? >> Return null, zehazki.
Beraz s.size 0 baino handiagoa bada. Orduan, zer egin dugu?
Zer pila hutsik ez bada egiten dugu?
[Stella] tamaina decrement duzu? >> Tamaina decrement duzu, ados.
Beraz, nola egiten duzu? >> S.size--.
[Hardison] Great. Eta gero, zer egin duzu?
[Stella] Eta gero bueltan s.string esan dut [s.size].
[Hardison] Great.
Bestela null itzultzeko. Bai, Sam?
[Sam] Zergatik ez da behar s.size izan + 1?
[Hardison] Plus 1? >> Bai. >> Eskuratu du.
[Sam] 1 delako hartzen ari zaren pentsatu nuen,
gero itzuli ez dutela eskatu duzu.
[Hardison] Eta hori izan zen, besterik gabe, zer ziren 0 indize osoa gai honetan hitz egiten dugu.
Beraz, mapan handiago badugu berriro hemen.
Guy hau begiratzen badiogu, hemen ikusten dugun pop dezakezu
elementu ari gara leihoa index 2.
>> Beraz, gure tamaina txikitzeko dugu lehenengo eta, ondoren, gure tamaina gure indize bat datorrela.
Ez badugu decrement tamaina lehenengo eta, ondoren, tamaina -1 eta, ondoren, decrement egin behar dugu.
Great. Ona guztiak?
Honi buruzko edozein zalantza argitzeko?
Modu ezberdinak daude, hau baita idazteko.
Izan ere, zerbait egin ahal izango dugu, nahiz eta bat-forrua egin ahal izango dugu.
Bat-line itzulera bat egin ahal izango dugu.
Beraz, benetan ahal izango dugu decrement egiten gara itzuli aurretik.
Beraz jarriz - s.size aurretik.
Horregatik, lerro benetan trinko.
Non arteko aldea. S tamaina eta s.size--
da postfix hori da postfix deitzen duelako dator ondoren s.size--
esan nahi du s.size indizea aurkitzeko helburuak ebaluatu
da Gaur egun, lerro hori exekutatzen denean,
eta, ondoren, hau gertatzen line erabat exekutatu ondoren.
Index s.size elementu sartu ondoren.
Eta hori ez da nahi duguna, nahi dugun decrement lehen gertatuko delako.
Othewise, array sartzeko goaz, modu eraginkorrean, mugetatik kanpo.
Sartzeko elementu benetan sartzeko nahi dugun batez ere ari gara.
Bai, Sam? >> Edo bizkorragoa RAM gutxiago erabiltzeko lerro bat edo ez egiteko?
[Hardison] Bene-benetan, benetan araberakoa da.
[Sam, ulertezina] >> Bai, araberakoa izango da. Konpilatzailea trikimailuak egin dezakezu
aitortzen konpilatzailea lortzeko, normalean, imajinatzen dut.
>> Beraz, pixka bat aipatu dugu hau konpilatzailea optimizazioa stuff buruzko
konpilatzean egin ahal izango dituzu,
eta hori gauza mota konpilatzailea gai irudikatu izan daiteke,
oh bezala, hey, agian, hori guztia egin ahal izango dut bat funtzionamenduan,
tamaina aldagai kargatzean RAM en ez bezala,
decrementing, gordetzeko atzera, eta, ondoren, berriro kargatzen atzera
gainerako eragiketa hau prozesatu.
Baina, normalean, ez, hau da, ez da gauza sort
den programa nabarmen azkarrago egiteko.
Pilak galdera gehiago?
>> Beraz, bultzaka eta leihoa. You guys nahi saiatzeko, hacker edizioa bada,
hacker edizioa egin dugu benetan joan
eta pila hazten dinamikoki.
Erronka dago nagusiki hemen push funtzioa,
irudikatu nahi nola array haziko
mantentzeko, gero eta gehiago-pila elementu bultzaka.
Egia esan, ez da gehiegi osagarriak kodea.
Deiak malloc han behar bezala gogoratu behar duzu, - Just dei bat
eta, ondoren, irudikatu idazketa deitu zaren.
Hori da erronka bat fun Oraindik Interesik baduzue.
>> Baina, oraingoz, dezagun aurrera, eta utzi ilarak buruz hitz egin.
Korritu bidez hemen.
Ilara pilaren anaia itxi bat da.
Beraz, pila, gauzak horrela ziren azken jarri
izan ziren lehenengo gauza da berreskuratu.
Lortu dugu azken hau, lehen izarrekin, edo LIFO, ordena.
Ilaran, berriz, line ari zaren zutik dituzu, espero bezala,
lehen pertsonan lerro ilara sartu, lehenik eta behin,
ilaran eskuratu lehen gauza lortzen da.
Colas ere erabili ohi dira grafikoak aurre ari gara,
atsegin dugu hitz labur pila,
eta ilarak ere erabilgarri dira beste gauza mordo bat.
Gauza bat datorren askotan mantentzen saiatzen ari da, esate baterako,
elementuen zerrenda ordenatuko.
Eta hau egin ahal izango duzu, array bat. Gauzen zerrenda ordenatuko array bat mantendu ahal izango duzu,
baina non lortzen dituen delikatua da gero beti aurkitu
leku egokian hurrengo gauza txertatzeko.
Beraz, bada, 1 zenbakien array duzu 10 bidez,
eta orduan zenbaki 1 100 bidez zabaldu nahi baduzu,
eta zenbaki horiek ari zaren lortzean ausazko ordenean eta guztia mantentzen saiatzen
ordenatuko bidez joan ahala, azkenean aldatzearen asko egin behar izan dute.
Ilarak eta datuak azpiko egitura mota batzuk mota batzuekin,
benetan mantendu dezakezu simple nahiko du.
Ez duzu zerbait gehitzeko, eta, ondoren, reshuffle gauza osoa aldi bakoitzean.
Nor ez barne-elementu inguruko aldatzearen asko egin behar duzu.
Ilara batean, ikusten duzu - ere zaborra du amaieran atalaren kodea
Nik dugun egiturari eman dizula benetan egitura eman genuen pila bat antzekoa da.
>> Bat dago honen salbuespena da, eta salbuespen bat
dugula buruan izeneko osagarriak osokoa honetan
eta hemen burua ilaran buru jarraipena da,
edo ilaran lehenengo elementua.
Pila batekin, pista mantentzeko elementu ginela berreskuratzeko buruzko gai ginen,
edo pilaren goialdean, tamaina soilik erabiliz,
ilara batean, berriz, kontrako muturretan aurre egiteko ari gara.
Tack amaieran gauzak saiatzen ari gara, baina gero gauzak itzultzeko aurrealdean.
Beraz, modu eraginkorrean, burua, ilaran hasieran indizea dugu,
eta tamaina ematen digu ilara amaieran indizea
gauzak berreskuratu ahal izango dugu beraz, burua eta gauzak gehitu buztana.
Pila, berriz, inoiz pilaren goialdean aurre izan dugu.
Inoiz ez dugu pilaren beheko sartzeko.
Gehitu besterik ez ditugu gauzak goian eta off goiko gauza hartu
beraz, ez dugu behar gure struct barruan eremuan extra hori.
Ez duela, oro har, zentzurik?
Guztiak eskubidea. Bai, Charlotte? [Charlotte, ulertezina]
[Hardison] Hori galdera bat da, eta hori izan zen sortu hitzaldia izan zen.
Agian batzuk paseoan ilustratzeko zergatik
ez dugu nahi kateak erabili [0] ilaran buru gisa.
>> Beraz, imajinatu behar dugu gure ilara du ilaran deitu dugu.
Hasieran, besterik ez dugu instantiated,
besterik ez dugu deklaratu, ez dugu ezer hasieratu.
Zabor guztiak. Beraz, jakina ziurtatu hasieratu dugula ziurtatu nahi dugu
bai tamaina eta burua eremuak 0, zentzuzko zerbait izango.
Joan aurretik ere izan dugu eta gure ilaran elementu null.
Eta diagrama fit hau egiteko, konturatu gaur egun gure ilara bakarrik eutsi sakatuta hiru elementu;
gure pila lau eduki sakatuta, berriz, gure ilara hiru bakarrik eutsi sakatuta.
Eta hori besterik ez diagrama fit egiteko.
Lehenik eta behin, gertatzen hemen katea enqueue dugu "hi".
Eta bezala pila egin dugu, ez da ezer, oso desberdina hemen
katea kateak [0] eta gure tamaina 1 Kontatzailea botatzen dugu.
Enqueue dugu "bye" jarri du.
Beraz, honetan parte pila bat itxura.
Off hasi ginen hemen, elementu berriak, elementu berriak, tamaina gordetzen du gora.
Zer gertatzen da puntu honetan zerbait adierazten nahi dugu?
Adierazten nahi dugu, nahi dugun adierazten du elementu da?
Basil] Strings [0]. >> Zero. Zehazki eskuina, Basil.
Lehen katea, hau, "hi" kentzeko nahi dugu.
Beraz, zer izan zen beste gauza aldatu da?
Iragarki zerbait off pilaren popped dugu, tamaina aldatu besterik ez dugu,
baina hemen, gauzak aldatu egiten dela pare bat lortu dugu.
Ez bakarrik tamaina aldatzea,, baina burua aldaketak ez.
Hau da, atzera egingo Charlotte-en puntu lehenago:
zergatik buru hau izan baita?
Ba al du zentzurik gaur egun, Charlotte? >> Kind.
[Hardison] Kind? Beraz, zer gertatu zen dugunean dequeued?
Zer egin burua do gaur egun interesgarria da?
[Charlotte] Oh, delako aldatu - ados. Ikusten dut.
Burua delako non burua kokapena dagokionez aldaketak erakusten.
Jada ez da beti ko zero indizea. >> Bai, zehatz-mehatz.
Zer gertatu zen bada dequeueing handiko elementu
egin zen, eta ez dugu burua eremu honetan
ziren dugu beti delako kate honetan 0 indizea gure ilara buru deituz,
ondoren gainerako ilara behera mugitzeko genuke.
"Bye" filmea strings from [1] strings [0] genuke.
Eta kateak [2] behera to kateak [1].
Eta hau egin nahi genuke elementu zerrenda osoa,
elementuen array osoan.
Eta hori array bat egiten ari gara, eta lortzen oso garestia da.
Beraz, hemen, ez da big aurre. Aski dugu gure array hiru elementu.
Baina izan genuen mila elementuak ilaran edo milioi elementu bat izanez gero,
eta, ondoren, Bat-batean, adierazten sorta bat egiten hasten gara deiak begizta batean,
gauzak ez dira benetan motelduko dabilen guztia behera etengabe.
Badakizu, 1 mugitzeko txanda 1, shift 1, 1 shift.
Horren ordez, hau erabiltzen dugu burua, "erakuslea" deitzen dugu, nahiz eta ez da benetan erakuslea
zentzu hertsian, ez da erakuslea mota bat.
Int * edo char * edo horrelako ezer ez da.
Baina seinalatuz edo, gure ilara burua adieraziz. Bai?
>> [Student] Nola jakin ez adierazten du besterik ez, pop off edozein burua da?
[Hardison] Nola ez adierazten daki nola off pop edozein burua? >> Right, bai.
>> Zer da bilatzen da, besterik gabe, edozein burua eremuan ezarrita.
Beraz, lehenengo kasu honetan, hementxe dugu,
gure burua 0, indizea 0 izango da. >> Right.
[Hardison] dio besterik ez da ados, ondo, indizea 0 elementu, katea "hi" Beraz,
gure ilara burua elementu da.
Beraz, lasaia dela adierazten dugu.
Eta hori elementu lortzen deitzaileari itzuliko izango da.
Bai, Saad? >> Beraz, burua, funtsean, ezartzen ditu, non indizea da ari zaren?
Hau hasiera da? >> Bai. >> Ados.
[Hardison] Hori da gure array Irteeran berria bihurtzeko.
Beraz, zerbait adierazten du, egin behar duzun guztia da sartzeko indize q.head elementu,
eta hori nahi duzun adierazten du elementu izango da.
Horrez gain, tamaina decrement.
Pixka bat ikusiko dugu non, gauzak pixka bat honekin delikatua.
Adierazten dugu, eta orain, berriro enqueue dugu bada,
non egiten dugu enqueue?
Non dago hurrengo elementu ez gure ilaran joan nahi duzu?
Esan katea "CS" enqueue nahi dugu.
Duen indizea sartuko da? [Ikasleak] Strings [2]. >> Bi.
Zergatik 2 eta 0?
[Basil] burua da 1 denez, zerrendaren hasiera bezala, beraz?
[Hardison] Eskuin. Eta zer zerrendaren bukaeran adierazten?
Zer ziren gure ilaran amaiera adierazteko erabiltzen dugu?
Burua gure ilara burua, gure ilara hasieran.
Zein da gure ilara amaiera izango da? [Ikasleak] Tamaina. >> Tamaina, zehazki.
Gure elementu berriak Beraz, tamaina, eta hartuko dugu elementu off off burua.
Hurrengo elementu enqueue dugu, ari gara! Tamaina.
Arren dela, tamaina 1 izan zen, eskuineko [Student] aurretik jarri al duzu?
[Hardison] Eskuin. Beraz, ez nahiko tamaina. Tamaina +, ez +1, baina + burua.
Aldatu dugu burua zenbatekoa dena delako.
Beraz, hemen, orain lortu dugu ilara tamaina 1 indizea 1 hasten diren.
Buztana index 2. Bai?
>> [Student] Zer gertatzen da adierazten kateak [0], eta kateak 'memoria slots
Eginzazu hustu, batez ere, edo, besterik gabe, ahaztuta?
[Hardison] Bai. Zentzu honetan, ari gara ahaztu.
Ziren horietako kopiak gordetzeko
datu ugari egitura askotan beren elementuen kopiak propioak gorde
beraz, pertsona horrek datuak egitura kudeatzeko ez kezkatu
Arrasto horiek guztiak joan buruz.
Datuak egitura guztia dauka, ale guztiak daude,
Ziurtatu dena jarraitzen egokian egiteko.
Hala eta guztiz ere, kasu honetan, datu-egitura horiek, sinpletasuna,
ezer ez dira kopiak egiten ari ditugu gordetzeko.
[Student] Beraz, hau da, etengabeko array -? >> Bai.
Atzera begiratzen dugu bada, zer definizio egitura hau izan da.
Besterik ez da estandarra array bat duzula ikusten,
char * s array bat.
Horrek -? >> Bai, besterik ez nintzen galdetzen
duzu azkenean agortu memoria, hein handi batean,
duzu zure array lekuak hutsik horiek guztiak?
[Hardison] Bai, puntu bat ona da.
>> Zer gertatu den aztertuko dugu puntu honetan,
bete dugu gure ilara, dirudienez.
Baina ez dugu benetan bete gure ilara
dugu tamaina 2 ilara batean hasten delako, baina indizea 1 da,
non gure burua erakuslea delako.
Ziren Atsegin dut esaten, at elementu kateak [0], 0 indizea, ez da benetan bertan.
Ez da gure ilaran jada.
Ez dugu ez traba joan eta gainidazteko dequeued dugu.
Beraz, nahiz eta exekutatzen dugu atsegin memoria badirudi, benetan ez dugu.
Leku da erabili.
Portaera egokia izan dugu, eta saiatu lehenengo adierazten du zerbait
nahi "bye", bye aterako litzateke.
Orain, gure ilara indizea 2 hasten da eta tamaina 1.
Eta orain saiatu gara, eta bada zerbait enqueue berriro ere, esan, 50
50 Leku honetan joan behar index 0
da oraindik delako Gurekin eskuragarri. Bai, Saad?
[Saad] Ba al da hori automatikoki gertatuko?
[Hardison] ez da nahiko gertatuko automatikoki. Math egin behar duzu
lan egin nahi du, baina, funtsean, zer egin dugu, besterik ez dugu bilduta inguruan.
[Saad] Eta hau da erdian zulo bat dauka bada ados?
[Hardison] math lan behar bezala egin dugu bada, ahal izango da.
>> Eta bihurtzen da hori, eta ez da benetan gogorra mod operadorea.
Beraz, Caesar eta kripto stuff bezala egin dugu,
mod erabiliz, gauzak inguruan itzulbiratu ahal izango dugu eta mantendu egingo
eta inguruan inguruan eta inguruan, gure ilara
burua erakuslea inguruan mugitzen mantenduz.
Iragarki tamaina da beti elementu kopurua errespetatuz benetan ilaran barruan.
Eta besterik ez da burua erakuslea mantentzen bidez bizikletaz.
Zer gertatu zen hemen begiratzen badiogu, joaten gara itzuliz gero hasieran,
eta ikusi besterik ez duzu buruan zer gertatzen
zerbait enqueue dugu, ez da ezer gertatu burua.
Beste zerbait enqueued dugu, ez da ezer gertatu burua.
Bezain laster zerbait dequeued dugu, buru-banan igotzen.
Zerbait enqueued dugu, ez da ezer gertatzen buruan.
Zerbait adierazten dugu, Bat-batean burua erabat handitzen da.
Zerbait enqueue dugu, ez da ezer gertatzen buruan.
>> Zer izango litzateke puntu honetan gertatuko ginen zerbait adierazten du berriro?
Pentsamenduak Any? Zer gertatuko litzateke burua?
Zer gertatuko behar burua
badugu beste zerbait adierazten du?
Burua oraintxe indizea 2
horrek esan nahi du ilaran buru dela kateak [2].
[Student] Zein itzultzen 0? >>: 0 itzuli beharko ditu. Itzulbiratu itzuli behar du, inguruan zehazki.
Oraingoz, denbora adierazten deitzen dugun bakoitzean, izan dugu bat gehituz burua,
gehitu bat buruan, gehitu burua, gehitu bat buruan.
Bezain laster, burua erakuslea duten gure array azken indizea lortzen,
gero, itzulbiratu inguruan hasiera-hasieratik izan dugu, itzuli 0.
[Charlotte] Zer pila bat ilaran ahalmena zehazten du?
[Hardison] Kasu honetan, besterik ez dugu izan # definitutako konstante bat erabiliz. >> Ados.
[Hardison] benetako c file, joan eta muck dezakezu apur bat
eta handi edo pixka nahi duzun bezala.
[Charlotte] Beraz, egiten ari zaren ilara batean, nola ez jakin ordenagailua egin nahi duzun
nola big pila izan nahi duzu?
[Hardison] Hori oso galdera bat da.
Modu daude pare bat. Definitzen da sortu aurreko
eta hau esan 4 elementu edo 50 elementu edo 10.000 dituen ilara batean izango da.
Beste modu hacker edizioa folks zer egiten da
sortu eta funtzioak zure ilara hazten dinamikoki gauza gehiago get gehitu gisa sartu beharko
>> [Charlotte] Beraz, lehen aukera, zer sintaxia ez baduzu erabili
programa kontatzeko zer ilara tamaina da?
[Hardison] Ah. Hargatik get out honen.
Stack.c hemen nago oraindik, eta, beraz, besterik ez dut sortu goian Hemen korrituko du.
Eskubide hori ikusten duzu hemen? Hau da, # define edukiera 10.
Eta sintaxi berdina ia zehatza ilara dugun.
Ilara izan ezik, hori dugu got extra struct eremuan hemen.
[Charlotte] Oh, gaitasuna esan nahi du kate gaitasuna pentsatu nuen.
[Hardison] Ah. >> That hitza gehienezko luzera. >> Eskuratu du.
Bai. Gaitasuna hemen, puntu bat.
Eta hau zerbait delikatua da
izendatu dugu hemen char * s array bat delako.
Erakusleak array bat.
Karakteretan array bat da.
Hau da seguruenik, zer ikusi duzun duzun fitxategia zure bufferrak geratuko I / O
denean izan duzun kateak sortuz eskuz pilan.
Hala eta guztiz ere, zer dugu got hemen char * s array bat da.
Beraz, erakusleak array bat da.
Egia esan, mapan handiago itzuliz gero eta begiratzen dugu, zer gertatzen da hemen
Aurkezpenean, benetako elementuak, pertsonaia datuak ikusten duzun
ez da array bertan gordetzen dira.
Zer gure array barruan gordetako hemen pertsonaia datuak erakusle dira.
Ongi da. Beraz, ikusi dugu nola ilara tamaina besterik ez da, pila gustatzen
tamaina beti Gaur egun, elementu kopurua errespetatzen ilaran.
2 enqueues egin ondoren, tamaina 2.
Adierazten du bat egin ondoren tamaina da gaur egun 1.
Enqueue beste egin ondoren tamaina itzuliko da 2.
Beraz, tamaina, zalantzarik gabe, elementu kopurua errespetatzen ilaran,
eta, ondoren, burua mantentzen du bizikleta.
Doa 0-1-2, 0-1-2, 0-1-2.
Eta denbora adierazten du deitzen dugun bakoitzean, burua-erakuslea erabat hurrengo indizea handitzen da.
Eta burua da buruz baino gehiago joan, itzuli inguruan 0 Loops.
Beraz, adierazten du funtzioa idatzi ahal izango dugu.
Eta enqueue funtzioa utzi duzu guys ordez ezartzeko behar dugu.
>> Elementu bat adierazten dugu gure ilara
Daniel egin pilak funtzioa pop idazten hasi ginen lehen gauza izan zen zer?
Norbait oraindik ez du hitz egiten entzun me.
Ikus dezagun, Saad, zer Daniel pop idatzi zuen lehenengo gauza egin zuen bezala gogoratzen duzu?
[Saad] zegoen, izan >> probatu zerbait zen.
[Saad] tamaina 0 baino handiagoa bada. >> Zehazki.
Eta zer zen azterketa hori?
[Saad] Horixe zen array barruan ezer ikusi eta probatzeko.
[Hardison] Bai. Hain zuzen ere. Beraz, ezin duzu ezer pop pila da hutsa bada.
Era berean, ezin duzu adierazten du ezer ilara batean da hutsa bada.
Adierazten du funtzio lehenengo gauza egin behar dugu hemen, ez duzu uste?
[Saad] tamaina da 0 baino handiagoa bada? >> Bai.
Kasu honetan, egia esan dut besterik ez probatu da 0 bada ikusteko.
Da 0 bada, itzuli null ahal izango dugu.
Baina zehatza bera logika.
Eta dezagun honekin jarraitzeko.
Tamaina ez bada, 0, non nahi dugun adierazten du elementu da?
[Saad] burua? >> Zehazki.
Besterik ez dugu tira lehen elementu gure ilaran
elementu burua sartzeko.
Ezer ez crazy.
Horren ondoren, zer egin behar dugu? Zer gertatuko da?
Zein izan da beste gauza buruz hitz egiten adierazten du?
Bi gauza gertatuko, gure ilara aldatu egin delako.
[Daniel] tamaina murriztea. >> Tamaina murrizteko, eta burua handitu behar dugu? Hain zuzen ere.
Burua handitzeko, ezin dugu blindly handitzeko buruan, gogoratu.
Ezin dugu egin queue.head + +.
Mod hau gaitasuna ere sartzen ditugu.
Eta zergatik mod gaitasuna dugu, Stella?
[Stella] inguruan itzulbiratu duenez. >> Zehazki.
Mod gaitasuna dugu berriz biltzeko 0 inguruan delako.
Beraz, gaur egun, puntu honetan, ez zer Daniel esan dezakegu.
Tamaina decrement ahal izango dugu.
Eta gero itzuli ahal izango dugu elementu ilaran goialdean zegoen.
Mota Badirudi gnarly lehen. Galdera bat izan dezakezu. Sentitzen dugu?
>> [Sam] Zergatik lehen ilaran goialdean? Non da hori?
[Hardison] dator behetik laugarren lerrotik.
Probatu dugu ziurtatu gure ilara ez dago hutsik eta gero,
char * tira dugu lehenik eta behin, tira dugu elementu burua indizea eserita
gure array, gure kateak array, >> eta dei lehen?
[Hardison] Eta lehen deialdian. Bai.
Just jarraipena horretan, zergatik ez hori egin behar izan dugu, uste al duzu?
[Sam] Lehenengo bakoitzak q.strings itzuli [q.head]? >> Bai.
>> Mod funtzioa ari dugu q.head-aldakor honetan egiten ari delako,
eta ez dago modurik Horretarako bueltan line barruan ere.
[Hardison] Zehazki. Leku zara. Sam da erabat gelditzea.
Izarrekin tira gure ilaran lehen elementu eta aldagai batean gorde behar izan genuen arrazoia
lerro hau non baizik genuen q.head
ez da hor operadorea mod ez dugu zerbait
eta buruan eragina hartu gabe - lerro bat.
Benetan dugu lehen elementu Beraz, tira, gero egokitu burua,
tamaina doitzeko, eta, ondoren, bota dugu elementu itzultzeko.
Eta hau zerbait etorriko da ikusiko dugun geroago
lotuta zerrendak, play ditugu haiekin.
Sarritan edo ari zaren askatzeaz zerrendak lotuta dauden
hurrengo elementua, hurrengo erakuslea lotuta zerrenda gogoratu behar duzu
uneko bat bota aurretik.
Bestela delako urruntzen bota duzu zer zerrendan utzi informazioa.
Orain, zure-tresnaren baduzu, ireki duzun zaborra du amaieran-x honetan.
Beraz, ireki dut zaborra du amaieran, let me zoom hemen
begira antzeko fitxategi bat duzula ikusiko duzu.
Similar begira fitxategia stack.c duten lehenago izan genuen.
Daukagu ​​gure struct ilara diapositibak definitu besterik ez dugu ikusi.
>> Ditugu gure enqueue funtzioa duzu.
Eta funtzioa adierazten dugu hemen.
Fitxategian funtzioa adierazten da unimplemented
baina jarri dut atzera PowerPoint buruzko horrela idatzi dezakezu, litzaidake nahi baduzu.
Beraz, hurrengo 5 minutu edo beraz, guys enqueue lan
ia besterik ez dago, kontrakoa adierazten du.
Ez duzu buru doitzeko enqueueing ari zaren, baina zer doitzeko behar duzu?
Tamaina. Beraz duzunean enqueue, buru-egonaldiak bereganatzea, tamaina erabat aldatu da.
Baina pixka bat hartu du - mod duten inguruan play izango duzu
figuraren zehazki zer indizea elementu berria txertatuko beharko.
Beraz, emango dizu guys dut pixka bat jarri, adierazten du back diapositiba,
eta you guys gisa galdera, oihukatzen itzazu dugun
guztiak haiei buruzko eztabaida talde bat.
Gainera, don't duzu tamaina - tamaina doitzeko, beti dezakezu
ez tamaina mod inoiz izan al duzu? [Daniel] n. >> Ez duzu tamaina mod, eskuinera.
Tamaina delako beti izango da, you're - suposatuz gauza zaren kudeatzeko modu egokian,
tamaina beti izango da 0 eta 3 artekoa izan behar du.
Nora egin enqueue ari zaren mod behar duzu?
[Student] burua bakarrik. Bakarrik burua >>, zehazki.
Eta zergatik at mod enqueue hasi behar al duzu?
Egoera horretan, mod litzaidake duzu?
[Student] stuff bada espazio at, 1 eta 2. Espazio bezala,
eta, ondoren, zerbait gehitzeko 0 behar duzu.
[Hardison] Bai, zehatz-mehatz. Beraz, zure burua erakuslea amaieran da,
edo, zure tamaina plus zure burua bada handiagoa, edo, hobeto esanda, ilaran inguruan biltzeko.
>> Beraz, egoera honetan ditudan jaiki hemen diapositiba oraintxe,
nahi dut zerbait enqueue oraintxe,
0 indizea zerbait enqueue nahi dugu.
Beraz, bada, non 50 doan, eta enqueue 50 deitzen diot nik,
behera doa han behealdean. Doa indizea 0.
'Hi' dagoeneko dequeued ordezkatzen du.
[Daniel] Ez hori zaindu adierazten du dagoeneko?
Zergatik ez du ezer egin enqueue burua?
[Hardison] Oh, eta, beraz, ez duzu burua aldatzea, sorry.
Mod eragilea erabiltzen denean sartzeko ari zaren duzu
denean sartzeko zaren enqueue nahi duzun elementu
zure ilaran hurrengo elementua.
[Basil] Nik ez dut hori, eta "arrakasta" hartan lortu nuen.
[Daniel] Oh, ulertzen dut zer esaten ari zaren.
[Hardison] Beraz didn't - q.size at besterik ez duzu egin?
[Basil] Bai. Aldatu dut alboetan, ez nuen ezer egiten burua.
[Hardison] ez duzu benetan burua berrezarri ezer izan,
baina indize kateak array sartu,
benetan aurretik joan eta kalkulatzeko hurrengo elementua non dagoen,
pila withe delako, zure pila hurrengo elementu izan da beti.
tamaina dagokion indizea.
Atzera begiratzen dugu gure pila push funtzioa,
izan dugu beti., gure elementu berriak plunk, eskuin indizea tamaina.
Ilaran, berriz, ezin dugu
dugu egoera hau Oraindik bada delako,
enqueued badugu 50 gure Kate berria eskuinera joan kateak [1]
ez dugu egin nahi.
0 indizea Kate berria joan nahi dugu.
>> Ez du inor bai? [Student] galdera bat daukat, baina ez da benetan lotutako.
Zer esan nahi du norbaitek besterik ez deiak erakuslea pred antzeko zerbait esan nahi du?
Zer izen hori laburra da? Izen bat besterik ez da ezagutzen dut.
[Hardison] Pred erakuslea? Ikus dezagun. Zein testuinguruan?
[Student] inserto zen. Geroago eskatu ahal dut nahi izanez gero
ez delako benetan zerikusia duten, baina dut
[Hardison] David txertatze hitzaldia kodea?
Hori tira ahal izango dugu, eta horri buruz hitz egin.
Hurrengo, behin lotutako zerrendak buruz hitz egin dugu.
>> Hargatik benetan azkar enqueue funtzioa itxura begiratu.
Zein izan zen lehenengo gauza pertsona saiatu zure line enqueue egin? Ilara honetan sartzeko?
Zer egin pila bultzaka antzekoa da.
Zer egin, ez duzu Stella?
[Stella, ulertezina]
[Hardison] Zehazki. (== EDUKIERA q.size) bada
Nire giltza leku egokian jarri behar dut itzultzeko faltsua.
Zoom pixka bat. Ongi da.
Orain zer egin behar izan dugun gauza hurrengo?
Just pila bezala, eta leku egokian txertatzen da.
Eta beraz, zer eskuineko leku horretan sartu izan zen?
Pila Indizearen tamaina zen, hau ez da nahiko da.
[Daniel] q.head-edo daukat >> q.strings? >> Bai.
q.strings [q.head + q.size mod EDUKIERA]?
[Hardison] ziurrenik nahi dugu honen inguruan parentesi jarri
beraz, dagokion lehentasuna ari gara eta, beraz, hori guztion cleart.
Eta berdina dela? To str >>? To str. >> Great.
Eta orain zer egin behar dugun azken gauza?
Bezala pila egin dugu. >> Gehikuntza tamaina? >> Gehikuntza tamaina.
Boom. Eta gero, hasierako kodea geroztik itzuli false, lehenespenez
hau aldatzeko benetako guztiak pasatzen bada, eta Dena ondo badoa nahi dugu.
Guztiak eskubidea. Atala informazio asko.
Oraindik ez dugu nahiko baino gehiago da. Benetan azkar banaka-zerrendak lotutako buruz hitz egin nahi dugu.
Hau jarri dut, beraz, atzera jo ahal izango dugu geroago.
Baina goazen berriro gure aurkezpen diapositiba gutxi batzuk gehiago.
Beraz enqueue TODO da, orain egin dugu.
>> Dezagun orain banaka-zerrendak lotutako begirada bat.
Pixka bat gehiago horiei buruz hitz egin dugu hitzaldia.
Zenbat duzu guys demo ikusi non jendea izan dugu
awkwardly zenbaki bakoitzean eta beste ustiategian apuntatzen? >> Zela dut.
>> Zer egin duzu guys deritzozu? Ba hori, espero demystify horiek pixka bat?
Zerrenda bat bihurtzen da, mota honetako dugu nodo bat deitzeko ari gara.
Ilara eta pila, berriz, structs ilara diegu litzaidake pila izan genuen,
pila mota berri horiek ilara izan genuen,
zerrenda bat da, benetan besterik ez osatutako nodo sorta bat.
Era berean, kateak karakteretan sorta bat besterik ez dira lerrokatuta bata bestearen ondoan.
Lotuta zerrenda bat nodo bat besterik ez eta nodo bat eta beste nodo eta nodo beste.
Eta ez nodo guztiak apurtzeko elkarrekin eta haiek gordetzeko contiguously baino
guztiak bata bestearen ondoan memorian,
erakuslea hurrengo hau izatea nodo lekuan gordetzeko aukera ematen digu, ausaz.
Eta gero, alanbre-mota denak batera batetik hurrengo seinalatu.
>> Eta zer abantaila handia izan zen hori array bat baino gehiago izan?
Guztia gordetzeko baino gehiago contiguously itsatsita besterik ez bata bestearen ondoan?
Gogoratzen? Bai? >> Dynamic memoria esleipena?
>> Zer zentzu memoria dinamikoa esleipena?
[Student] horretan mantentzeko, eta handiagoak ez duzu zure array osoa mugitzeko dezakezu?
[Hardison] Zehazki. Beraz, array bat, erdian elementu berri bat jarri nahi baduzu,
espazio guztia filmea egiteko aukera izango duzu.
Eta hitz egin zuen bezala gara ilaran,
horregatik, buru erakuslea hori mantendu dugu,
beraz, etengabe ari gara gauzak aldatzearen.
Lortzen dituen garestia delako duzun got bada, array bat big
eta etengabe ari zaren ausazko insertions horiek egiten.
Zerrenda bat, berriz, guztiak egin behar duzun da nodo berri bat bota,
egokitu erakusleak, eta zu egin.
Zer da hau? Buruz sucks?
Izan ere, hori ez baita erraza lan array gisa alde batera utzi? Bai?
[Daniel] Beno, uste dut askoz zailagoa da elementu jakin bat lotuta zerrendan sartzeko?
[Hardison] ez dezakezu zure zerrendako lotuta erdian elementu arbitrario bat joango da.
Nola egiten duzu horren ordez? >> Gauza osoan zehar duzu.
[Hardison] Bai. Aldi berean, aldi berean bat bidez joan behar duzu.
Handi bat da, mina bat da.
Zer da beste downfall beste.
[Basil] ezin duzu aurrera eta atzera? Norabide batean joan behar duzu?
[Hardison] Bai. Beraz, nola egin hori konpontzeko dugu, batzuetan?
[Basil] bi aldiz-zerrendak lotuta? >> Zehazki. Bi aldiz-zerrendak lotuta daude.
Badira ere sentitzen?
>> [Sam] pred gauza bera
Gogoratu besterik ez dut, ez dago zer pred gauza da?
Ez da bi aldiz, eta banaka artean?
[Hardison] dezagun zer egiten zuen begirada.
Beraz, hemen goaz. Hona hemen zerrenda kodea.
Hemen predptr dugu, hemen. Hau da, zertaz ari zaren hitz egiten?
Beraz, hau da zerrenda libre uzten du eta erakuslea gordetzeko zuen saiatzen ari da.
Hau ez da bi aldiz, banaka lotuta-zerrendak.
Honi buruz gehiago hitz egin ahal izango dugu geroago, hau da, hitz egiten geroztik zerrendan uzten
eta beste gauza batzuk erakutsi nahi dut lehenik.
baina besterik ez da - ptr balio du gogoratzeko
[Student] Oh, Aurreko erakuslea da? >> Bai.
Beraz, orduan ezin dugu Kontatzailea ptr bera free ondoren zer predptr aurretik.
Ezin dugu delako free ptr eta gero deitu ptr = ptr ondoan, ezta?
Txarra izango litzateke.
Hargatik ikus, guy hau itzuli.
>> Zerrendak buruzko beste gauza txarra da array bat, berriz,
besterik ez dugu, bata bestearen ondoan pilatzen dira bere burua elementu guztiak,
Hemen ere sartu erakuslea.
Beraz zatia memoria gehiago erabiltzen ari gara izatea
elementu guztietan ari gara gure zerrendan gordetzeko.
Malgutasuna lortzen dugu, baina kostu bat dator.
Dator denbora kostua hau da,
dator eta memoria kostu hori ere.
Zentzu Time dugun array elementu guztietan bidez joan
indizea 10 bat, edo izan zen indizea 10 array bat aurkitzeko.
>> Just benetan azkar, diagrama dugu, zerrenda horiek,
normalean mantendu dugu zerrenda-burua edo erakuslea zerrendaren lehen
eta hori benetako erakuslea da.
4 byte besterik ez da. Ez da, benetako nodo bera.
Beraz, duela balio int, ez hurrengo erakuslea ez ikusiko duzu.
Literalki erakuslea besterik ez da.
Benetako nodo eta egitura bat da, zerbait seinalatu.
[Sam] izeneko erakuslea nodo? >> Hau da, - no. Nodo mota zerbait erakuslea da.
Nodoa struct erakuslea da. >> Oh, ados.
Eskuineko ezker, kode diagrama.
Ezarri ahal izango ditugu, null, hasteko modu ona da.
Denean diagrama duzu, idatzi bai null gisa edo lerro bat jarri horren bidez gustatzen.
>> One zerrendak lan egiteko modurik errazena,
eta zuk galdetzen dugu ez itxi bai eta erantsi bien arteko desberdintasunak ikusteko,
baina ezeztatu da behin betiko errazagoa da.
Duzunean gunearen aurretik, hau da, non - itxi (7),
eta joan nodo eta egitura sortu
eta lehenengo seinalatu du, eta gaur egun delako, zerrendan dugu,
zerrendaren hasieran egon behar dute.
Itxi (3), nodoa beste sortzen, baina, orain, 3 7a baino lehen dator bada.
Beraz, funtsean ari gara gauzak bultzaka gure zerrenda aldera.
Orain, ikus itxi, batzuetan pertsona deitu bultza dezakezu,
elementu berri bat bultzatzen ari delako zure zerrenda aldera.
Da erraza, halaber, zerrenda baten aurrean ezabatu.
Beraz, jendeak ikusiko du sarritan deitu pop hori.
Eta horrela, pila bat emulatzen lotuta zerrenda bat erabiliz dezakezu.
Whoops. Sentitzen dut, orain append sartzen ari gara. Beraz, hemen (7) jasotako dugu, gaur egun itxi (3).
Beste zerbait zerrendan dugu zerrenda honetan aldera, jasotako badugu (4),
ondoren, 4 izan genuen, eta, ondoren, 3 eta, ondoren, 7.
Orduan, pop eta 4 kendu, remove 3 genezake, kendu 7.
Askotan, intuizioz honi buruz pentsatzen append da.
Beraz diagrammed Nik zer erantsi hemen bezala bilatuko litzateke.
Hemen, erantsita (7) ez du itxura desberdinak edozein
ez delako zerrendan elementu bat besterik ez da.
Eta appending (3) jartzen du amaieran.
Agian oraintxe ikusten dezakezu append trikimailu
dela bakarrik dakigu non zerrendaren hasiera-hasieratik,
zerrendan zehar bide guztiak oinez duzu zerrenda bat eransteko
amaieran, gelditzeko, ondoren, zure nodo eta plunk dena eraiki.
Wire stuff guztiak.
Beraz, itxi, besterik ez dugu honen bidez erauzi benetan azkar,
gunearen aurretik zerrenda bat duzu, nahiko erraza da.
>> Egiten duzu, zure nodo inplikatzeko batzuk memoria esleipena dinamiko.
Beraz, hemen malloc erabiliz eta egitura nodo bat egiten ari gara.
Malloc Beraz, alde batera utzi duelako izango Gurekin memoria geroago erabiltzen ari gara
nahi dugu ez delako memoria hau denbora luzez jarraitasun nahi dugu.
Eta erakuslea bat lortu dugu memoria espazioa besterik ez da esleitu.
Nodo tamaina erabiltzen dugu, ez dugu eremu batzea.
Ez dugu eskuz sortu byte kopurua,
ordez sizeof byte kopurua egokia ari gara ezagutzen dugun erabiltzen dugu.
Ziurtatu gure malloc dei lortu du probatzeko egin dugu.
Hau da, oro har, egin nahi duzun zerbait.
Makina modernoa On, exekutatzen ari da memoria ez da zerbait erraza
ari zaren stuff tona bat ezean esleitzean eta zerrenda handi bat egiteko,
baina ari zaren stuff bada, esan, iPhone bat edo Android bat bezala eraikitzeko,
memoria mugatua baliabide ez duzu, batez ere, zerbait bizia egiten ari zarenean.
Beraz, ona da praktikan.
>> Iragarki ditudan pare bat erabiltzen funtzio desberdinak hemen
duzula ikusten diren berri mota.
Beraz fprintf besterik ez da gogoko printf
korronteak bere lehen argumentua izan ezik inprimatu nahi duzun da.
Kasu honetan, errore estandarraren katea inprimatu nahi dugu
estandarra outstream desberdina da.
Lehenespenez erakusten du, leku berean.
Bistaratzen ere, terminal, baina ahal duzun
komandoak erabiliz buruz, berbideraketak teknikak ikasi duzu
Tommy bideoa buruz ikasi duzu arazo multzo 4, zuzentzeko dezakezu
arlo desberdinetan; gero irten, hementxe, irteerak, zure programa.
Funtsean nagusira itzuli,
erabili dugu irteera izan ezik hemen bueltan ezer egiten ez delako.
Oraindik ez dugu nagusian, eta, beraz, itzuli ez du irten nahi bezalako programa.
Beraz, irteera funtzioa erabiliko dugu, eta errore-kode bat ematen diote.
Ondoren, hemen berria nodo balio-eremua, bere i eremuan ezarri dugu i berdina izan behar du, eta, ondoren, Wire dugu.
Berria nodo hurrengo erakuslea dugu, lehen seinalatu
eta, ondoren, lehen aldiz egingo da orain nodo berria seinalatu.
Kode lerro hauek, benetan nodo berria eraikitzen ari gara.
Ez funtzioa honetan azken bi lerroak, baina lehen ere bai.
Benetan dezakezu tira funtzio batean, helper funtzio bat sartu.
Hori askotan dudana da, tira I funtzio batean,
Eraikitze nodo antzeko zerbait deitzen diot nik,
eta hori mantentzen itxi funtzioa nahiko txikia da, ondoren, 3 lerro besterik ez da.
Nire eraikitze nodo funtzio-dei bat egin dut, eta, ondoren, I alanbre dena sortu.
>> Final gauza erakutsi nahi dut,
append eta hori guztia eta utzi zure dut
Zerrenda bat baino gehiago batetik bestera joateko.
Zerrenda bat baino gehiago batetik bestera joateko modu ezberdinak sorta bat daude.
Kasu honetan, luzera zerrenda bat aurkituko dugu.
Beraz hasten luzera = 0 dugu.
Strlen kate bat idazten oso antzekoa da.
Horixe erakusteko, hau loop eskubidea nahi dut hemen.
Kinda funky dirudi, ez da ohiko int i = 0, i <edozein izanda ere, i + +.
Horren ordez, gure n aldakorra da hasieratzean zerrendaren hasiera izango da.
Eta gero, gure iterator aldagaia ez da berriz, null, jarraitzea dugu.
Hau da, izan ere, konbentzio, gure zerrendaren amaieran null izango da.
Eta gero, Kontatzailea + + egiten ordez,
+ zerrenda lotuta baliokidea + n = n-> hurrengo.
>> Utzi hemen hutsuneak bete dizut denbora gara delako.
Baina hau mantentzeko kontuan zure spellr psets lan egiten duzun bezala.
Loturarik zerrendak, hash taula bat ezartzeko,
behin betiko oso erabilgarri etorriko.
Eta idiom hau izatea gauza baino gehiago begizta bizitza errazagoa, zorionez.
Edozein galdera, azkar?
[Sam] bidaliko bete SLL eta sc?
[Hardison] Bai. Diapositibak bukatu eta SLL pila eta queue.cs bidali dut.
[CS50.TV]