[Powered by Google Translate] [Aste 6] [David J. Malan] [Harvardeko Unibertsitateko] [Hau da CS50.] [CS50.TV] Hau CS50 da, eta hau da Aste 6 Irteeran, Tresna berri pare bat, beraz, abantaila duzun hartzeko aukera dago, lehen CS50 Style deritzo. Odds dira me edo irakaskuntza bekadun edozein atsegin baduzu, seguruenik ikusi duzun estilo honen antzeko zerbait apur bat itxura duten programa bat. Agian txoko batzuk gauez berandu ebaketa hasten zarenean, edo duzu aurre geroago, eta, ondoren, TF edo CA dator, bulego orduetan. Orduan, zaila da gurekin irakurri. Beno, kode hau sintaktikoki zuzena, eta bertan bilduko da, eta benetan exekutatu. Baina zalantzarik gabe, ez da estilo 5. Baina orain, direktorio honetan sartu gara hemen eta konturatu que tengo conditions2.c- eta berri hau komandoa, style50, exekutatu I fitxategi conditions2.c honetan, Sartu, nabarituko dela informatuta me izan delako estilizatu. Gedit nabaritu fitxategia diskoan aldatu egin da, eta egin klik I birkargatu nahi izanez gero, zure arazo guztiak dira gaur egun automatikoa da. [Txalo] Hori asteburu honetan egin dugun gauza bat da. Konturatzen dela Inperfektua kodea batzuk besterik ez du egingo ez da gai primeran estilizatzeko baina konturatzen da orain tresna bat aprobetxatu dezakezu bada bakarrik txukuna kizkur gehiago errantly jarri tirantes batzuk eta antzekoak. Baina gehiago sinesgarria Check CS50 da. CS50 Check, benetan egin dezakezu berean zuzentasuna probak Zure kodea irakaskuntza bekadun gai direla. Hau da komando-lerroko tresna den aparatuaren ahalik eta azkarren egiten duzun bezala per gisa update50 bat pset 4 zehaztapenak, eta erabiltzen da, funtsean hau atsegin dute. Komando check50 exekutatu nahiko duzu. Ondoren, komando-lerroko argumentu bat pasatzen duzu, edo gehiago, oro har, switch bat edo bandera bat bezala ezagutzen. Oro har, gauza marratxoak deitzen dira switch komando-lerroa programa, eta, beraz,-c zehazten egiaztapen nahi duzun exekutatu. Probak nahi duzun exekutatu bakarrean kate hau identifikatu, 2012/pset4/resize. Beste era batera esanda, hori besterik ez arbitrarioa, baina berezia da katea 4-en zuzentasuna pset probak bakarrean identifikatzeko erabiltzen dugu. Eta gero zuriunez bereizitako fitxategi zerrenda zehaztu nahi duzun igo CS50 azterketa egiaztatu. Esate baterako, nire irtenbidea I joan bada hemen for resize.c- utzi ireki leiho-terminal handiagoa eta aurrera joaten naiz eta dezagun exekutatu esan check50-c 2012/pset4/resize eta, ondoren, aurretik joaten naiz eta fitxategi izenak zehazteko, resize.c, eta, ondoren, sakatu Sartu, konprimitzen, it fitxategiak, egiaztatzen da, eta besterik ez dut huts egin du proba sorta osoa. Goiko ezkerreko gorriz dio resize.c eta bmp existitzen. Proba izan zen. Hori da dugun galdera galdetu zen. Eta zorigaiztoko erantzun faltsua delako. Azpiko testua zuria dio bmp.h existitzen espero zen, eta hori, besterik gabe, nire errua. Igo ahaztu dut, beraz, bi fitxategiak igo behar dut, resize.c eta bmp.h. Baina orain konturatu beste proba guztiak horia dute, ez delako exekutatu, eta, beraz, bertikala da smiley face zuen ez pozik ez triste delako, baina gai hori zuzentzeko gorria beste txekeak horiek exekutatu aurretik ditugu. Utzi hau konpontzeko me. Txikiagotzeko me eta berrabiarazi, baina oraingo honetan bmp.h ere komando-lerroan, Sartu, eta guztiak ondo doa bada, eta, ondoren, egiaztatu itzultzeko emaitza-ezazu arnasa berde guztiak, eta horrek esan nahi du, oso ondo egiten ari naiz hain urruti pset 4. Ikus ditzakezu, eta testu deskriptibo infer Hemen zehazki zer dugu probatu da. Probatu ditugu fitxategiak lehen aldiz ez da existitzen? Probatu dugu resize.c konpilatzerakoan ez? Orduan ez tamainaz aldatu ez du 1x1 pixel BMP n, resize faktorea da, eta 1 probatu dugu. Orain, ideia ez duzu zer n izanez gero, behin egingo duzun pset 4 sartu murgiltze baina hori besterik ez da behatu bat egiaztatu ziur Oraindik ez duzula tamainaz aldatu egin resize faktorea irudi bat bada 1. , Aitzitik, 1x1 pixel BMP 1x1 pixel tamaina aldatzen 2x2 behar bezala n 2, orduan, era berean, hortaz eratzen nirea. Azken finean, hau da, bat ekarri, eraman zeharkatu behatzak eskubidea aurretik ekuazioa out aurkeztu zure pset. Dakit zehazki zer zure TF laster jakin ahal izango duzu arazo multzo horietako batzuk aurkezteko, eta, gainera,, motibazio pedagogikoa da benetan jarri zure aurrean aukera beraz, a priori badakizu ez da zure kodea bugs eta probak ez direla ari gainditu, eraginkorra denbora gehiago jarri ahal izango duzu aurrean sortu arazo horiek konpontzeko baino puntu galtzen, zure TF feedback, eta, ondoren, "Ahh," hurrena atsegin dut behar dela. Orain, gutxienez, tresna bat aurkituko duzu laguntzeko. Ez da bug da seinalatu nahi du, baina esango dizu zer da sintomatikoa da. Orain konturatzen probak ez du zertan zehatza. Just delako berdea smiley aurpegiak betetako pantaila bat lortuko duzu ez du esan nahi zure kodea ez da perfektua, baina esan nahi du duela zehaztutako zenbait agindutako probak gainditu. Batzuetan ez dugu askatu txekeak. Esate baterako, whodunit, 4 pset alderdi bat, disappointing mota ematen dizugu erantzun gisa, zer da, eta modu zenbaki bat agerian duten pertsona hori zarata gorria da. Zehaztapenak beti izango da etorkizunean zehaztu pset 5 aurrerantzean zer egiaztatzen du existitzen zuretzat. Zuri URL hau da, behealdean nabarituko duzu. Orain, honek diagnostiko irteera besterik ez da. Bisitatzen duzun URL gero, crazy, críptica mezu sorta osoa bat lortuko duzu ongietorri ari zaren begiratu bitartez, baina, batez ere, langileak eta beraz, diagnostikatu dezakegu bugs arazteko check50 bera. ADO gabe, dezagun non utzi dugu mugitu. CS50 liburutegi aste batzuk eman hartu genuen, baina gero, azken astean, atzera peeling geruza bat hasi ginen. Alde batera jarriz katea zer ordez aldeko hasi dugu? [Ikasleak] Char. * Char, char * izan da denbora honetan guztian, baina, gaur egun ez dugu hori benetako datu-mota string asmoa. Beharrean, era askotako sinonimo izan * char eta kate karaktere-sekuentzia bat da, beraz, zergatik ez du zentzurik char * s strings irudikatzeko? Zer da char * kate bat kontzeptu honen testuinguruan irudikatzeko? Bai. >> [Student] lehen karaktere gisa. Good, lehen karaktere gisa, baina ez da lehenengo pertsonaia. -[Ikasleak] Helbidea da. Good, lehen karaktere helbidea. Katea bat irudikatzeko ordenagailuaren memorian beharrezko hori besterik ez da, bere byte oso lehen helbidea berezia. Ez duzu ere, zenbat denbora da ezagutzeko nola egin dezaket hori delako irudikatu duzu dinamikoki? [Student] String luzera. Kate-luzera, bikaina, baina nola katea luzera lan egiten du deitu ahal duzu? Zer egiten du? Bai. [Student] null karaktere arte. Bai, zehazki, begizta bat besterik ez da iterates, begizta bitartean, * amaieran edozein izanda ere, eta amaiera irudikatzen \ 0, deiturikoak NULUAK pertsonaia, NULUAK null, erakuslea ez da nahastu behar, etorriko da elkarrizketan, berriz, gaur egun. Back zuritu dugu GetInt geruza bat, eta, ondoren, begirada bat hartu genuen GetString eta gogoratzen funtzio horietako bi, edo benetan, GetString izan zen, zenbait funtzio bat erabiliz benetan analizatu, hori, irakurri edo aztertzeko, erabiltzailearen sarrera. Eta zer funtzio berri hori izan zen? Scanf edo sscanf. Batzuk zapore benetan dator. Ez scanf, ez dago sscanf, ez dago fscanf. Oraingoz, ordea, dezagun bat erraz ilustratzen dira, eta utzi aurrera eta ireki aparatuaren hau atsegin fitxategia, scanf1.c. Hau super simple programa bat da, baina zerbait ez da inoiz egin ditudan du CS50 liburutegia laguntzarik gabe. From int bat erabiltzaile bat izaten jarraitzen du. Nola funtzionatzen du? Beno, line 16 dago nabarituko izeneko bat int x aldarrikatu dugula, eta istorioaren puntu honetan, x balioa zer da? [Inaudible ikaslearen erantzuna] [David M.] Eskuin, nork daki, zabor balio batzuk potentzialki, beraz, 17, esan besterik ez dugu erabiltzaileak emadazu zenbaki bat, mesedez, eta urrats 18 non interesgarria lortzen da. Scanf badirudi formatuan kodeak erabiltzen komatxo artean bat printf ideia maileguan. Zenbaki hamartar bat da% d noski. Baina zergatik am pasatuz, eta x ordez x I? Lehenengoak ez da zuzena. Bai. [Inaudible ikaslearen erantzuna] Zehazki, programa honen helburua bada, funtzioa GetInt bera bezala, int bat lortzeko erabiltzailearen funtzioak gainditu ahal I aldagai guztiak, nahi dut, baina ez badut pasatzen erreferentzia edo helbidea edo erakuslea, gaur egungo helburuetarako sinonimo guztiak, ondoren, funtzio hori ez aldagai horren edukia aldatzeko gaitasuna du. Honek kopia bat pasatuko litzateke, swap buggy bertsioa Nik ez dugun hainbat aldiz hitz egin du gaur egun. Baina, horren ordez, eta egiten ari x, literalki dut zer pasatzen? [Student] helbidea. >> X helbidea. Scanf izeneko funtzioa mapa bat marrazten du eta hemen esaten bezalakoa da, horiek ordenagailuan zatia memoria bat dira gordetzeko osoko batzuk sartu duzu? Ordena sscanf hori egiteko zer operadorea, zer pieza sintaxia erabili izan da nahiz eta ez ikusi ahal izango dugu, funtzio hau beste norbaitek idatzi duelako? Beste era batera esanda, zer da hori? [Student] X irakurri. Badira irakurketa batzuk izango da, baina soilik x dagokionez hemen. Scanf gainditu ari bada x helbidea, sintaktikoki, zer operadorea loturik dago nonbait existitzen barruan scanf-en ezarpen scanf benetan idatzi zenbaki bat 2 helbide horretara? Bai, eta, beraz, *. Gogoratu * gure dereference operadorea, funtsean esan nahi du, joan ez dela. Behin duzun entregatu helbide bat da, kasu hemen scanf da ziurrenik-bada bere iturburu inguruan dugu begiratu kodea * x edo baliokidea, benetan helbide horretara joan eta balio batzuk jarri han egiten ari da. Orain, nola lortzen scanf sarrera teklatua, gure eskuetan olatuen dugu gaur egun. Just arduratuko sistema eragilearen hitz egiten uzten sscanf erabiltzailearen teklatu, baina puntu hau orain line 19, denean inprimatu besterik ez dugu x, kasuan badirudi scanf du jarri int x. Hori da zehazki nola scanf funtzionatzen du, eta gogora ekarri azken astean hori zehazki nola GetString eta GetInt eta bere funtzioen beste familia azken finean, lan egiten du, sscanf bezala bariantza txikia izan arren, Horrek esan nahi du, teklatua ordez kate bat eskaneatzeko. Baina dezagun hau bariantza txiki bat begirada bat hartu. Scanf2, benetan izorratu nuen. Zer da oker eta azaltzen duen bezain-comment ezkutatu dut zer oker dago programa hau, 2 bertsioa? Ahalik eta denbora honetan teknikoa. Nahiko ona dirudi. Nicely koska, baina ados, nola dezagun inaustea laburragoa galdera? Line 16. Zer da line English tekniko zehatza, baina 16 egiten? Apur bat awkward eskuratzen. Bai, Michael. [Student] kate baten lehenengo letra seinalatuz. Ados, oso hurbil. Let me apur bat fintzeko. Kate baten lehenengo letra seinalatuz, aldakorra izeneko buffer ari zaren geratuko kate baten helbidea lehen seinalatu edo, hobeto esanda, zehatzago esanda, char bat seinalatu. Ohartu ez da benetan edozein lekutan seinalatuz esleitzeko operadorea ez delako. Ez da berdin ikurra da, eta, beraz, guztiak egiten ari garen variable buffer izenekoa esleitzean, beraz. 32 bit izango da erakuslea bat delako gertatzen da, eta buffer edukiak ustez azkenean char baten helbide bat edukiko du, baina, oraingoz, ez du buffer eduki? Just batzuk akastunak, nork daki, zabor-balio batzuk, dugu ez delako esplizituki hasieratu da, beraz, ez da egin behar dugu bere gain hartzen ezer. Ongi da, eta, beraz, gaur egun linea 17-line 17 ez do? Agian honen bero. Kate bat bistaratzen da, ezta? String mesedez bistaratzen da. Line 18 ezagutzen mota da gaur egun besterik ez dugula ikusi bariantza baina formatu kode desberdin bat da, eta, beraz, 18 linea, scanf ari gara hemen memoria zatia helbidea kontatzea da. Kate batean deitu,% s engaiatuko nahi dut, baina arazoa da ez ditugula gauza pare bat egin hemen. Zer da arazo bat? [Student] dereference null erakuslea da saiatzen ari da. Ona, null, edo, besterik gabe, bestela ezezagun erakusleak. Scanf ari zara gozamenerako helbide bat, baina esan besterik ez duzu une batez ago helbide hau zabor balio batzuk genuen, ez delako benetan esleitu da ezer, eta, beraz, scanf eraginkortasunez kate bat jarri hemen ari zaren kontatzea, baina ez dakigu non hemen oraindik da, beraz, ez dugu benetan bufferrerako memoria esleitu. Gainera, zer ez dira, nahiz eta scanf ere kontatzen duzu? Demagun zatia memoria bat, eta ez zen zabor-balio bat, baina oraindik ez scanf kontatzeko zerbait garrantzitsua. [Student] Non dago benetan, ampersand. Ampersand, eta, beraz, kasu honetan, ongi da. Buffer dagoeneko delako erakuslea gisa deklaratu pieza * sintaxia, ez dugu behar ampersand erabili delako dagoeneko helbide bat, baina uste dut entzun nuen hemen. [Student] Nola handia da? Good, ez gabiltza scanf kontatzea nola big buffer hau da, Horrek esan nahi du, nahiz eta buffer erakuslea scanf esaten ari gara, kate bat jarri hemen, baina hemen, 2 byte izan dadin 10 byte da, megabyte bat izan da. Scanf ideia ez du, eta hori zatia memoria bat delako ustez, ez da kate bat oraindik. Kate bat da idazten duzun karaktere eta zatia memoria hori 0 \ bat behin. Orain zatia memoria bat besterik ez da. Scanf egingo ez daki helbide horretara idatziz gelditzeko. Iraganeko adibide batzuk non teklatua ausaz idatzi dut gogoratzen duzu gainezkatzea buffer bat saiatzen ari da, eta zehazki horri buruz hitz egin zuen ostiralean. Aurkariarekiko bat, nolabait, zure programa sartzen bada hitz bat askoz handiagoa injects Orduan, edo esaldi edo esaldi inbaditu dezakezu zinen espero zatia memoria txarra ondorioak izan ditzake, programa osoa bera baino gehiago hartu, esate baterako. Hau konpondu behar dugu nolabait. Dezagun zooma eta programa honen 3. Bertsioan sartu. Hori da, pixka bat hobeto. Bertsio honetan, nabarituko diferentzia. 16 linea, berriz aldakorra izeneko buffer geratuko naiz, baina zer da orain? 16 karakterera array bat da. Hau ona da, horrek esan nahi du delako dizut scanf hemen memoria zatia benetako bat da. Ia dezakezu array uste erakusleak izateaz orain nahiz Oraindik ez dute benetan baliokidea. Portaera ezberdina izan dute egingo, testuinguru desberdinetan. Baina zalantzarik gabe, kasu buffer hori erreferentzia Alboko 16 karakteretan hori zer delako array bat da eta aste batzuk izan dira gaur egun. Hemen nago, scanf kontatzeko hemen memoria zatia. Oraingo honetan, benetan zatia memoria bat, baina zergatik programa hau oraindik exploitable? Zer gertatzen da oraindik? Esan dut, emadazu 16 baina-bytes [Student] Zer gertatuko da 16 baino gehiago idazten bada? Zehazki, 17 karaktere edo 1.700 karaktere motak? Izan ere, ikus dezagun ezin dugu akats hau gorako bidaia bada gaur egun. Hobea da, baina ez da perfektua. Dezagun aurrera eta make scanf3 programa hau konpilatu. Scanf3 exekutatu me, String mesedez: kaixo, eta ados izan dirudi dugu. Dezagun apur bat longer bat saiatu me, kaixo dago. Ados, dezagun ez kaixo, zer moduz zaude gaur egun, Sartu. Zortea mota eskuratzen hemen, dezagun agurtu, zer moduz. Malditos. Ongi da, eta, beraz, zortea genuen. Dezagun ikusi ahal izango dugu konpontzen ez bada, hau. Ez, ez da me kopiatu utzi du. Dezagun saiatu berriro. Guztiak eskubidea, stand by. Ikusiko dugu zenbat denbora gehiegi sakondu, oraindik hori egiteko, berriz, fokua. Malditos. Hori da, baizik eta hala badagokio, benetan. Bertan dugu. Point eginda. Hau ere, nahiz eta lotsa ere da handia nahasmena iturri bat duten programak bugs idatziz adierazten beraiek delako behin bakarrik, batzuetan pixka bat. Errealitatea da, nahiz eta zure kodea guztiz hautsi bada, izan daiteke bakarrik da guztiz hautsi behin pixka batean batzuetan, funtsean delako, zer gertatzen den sistema eragilearen bideratzen da bat baino gehiago pixka memoria benetan behar, edozein arrazoigatik, eta, beraz, inork ez bestela memoria erabiltzen ari da zure zatia 16 karaktere ondoren, hala badagokio, 17, 18, 19, edozein, ez da, hala nola, big aurre. Orain, ordenagailua, nahiz eta puntu horretan ez du huts egin, baliteke azkenean erabili byte kopurua 17 edo 18 edo 19 beste zerbait, at seinalatu zure datuak jarri duzula, gehiegi luzea izan arren, berridazketa lortzeko izan daitezkeen beste zenbait funtzio. Ez du zertan oso-osorik mantenduko da, baina ez du nahitaez seg matxura bat eragin. Baina kasu honetan, baldin eta, azkenik, I nahikoa karaktere funtsean hori gainditu nire memoria segmentu, eta BAM sistema eragilea, esan zuen: "Barkatu, ez da ona, segmentaziuo hutsegitea". Eta utzi ikusteko zer geratzen da hemen, nire direktorioa nabarituko fitxategi hau behar dut hemen, core. Iragarki hori berriro core dump izeneko. Fitxategi bat da, funtsean, zure programa memorian eduki at kraskatu egin da, eta adibide txikia besterik ez saiatu hemen utzi hemen eta exekutatu gdb scanf3, eta, ondoren, zehaztu izeneko core hirugarren argumentu bat, eta konturatu hemen zerrendatzeko kodea bada, ohikoa den bezala gai gara gdb Programa honen bidez oinez hasteko, eta exekutatu ahal izango dut, eta ahalik eta azkarren dudan bezala hit-komando urratsa gdb- bezain laster potentzialki buggy line hit I Kate handi bat idatzi eta gero, Benetan identifikatzeko hemen ahal izango dut. Gehiago honetan, nahiz eta, core zabortegiak atalean eta beraz, benetan dezakezu Poke inguruan barruan core dump ikusi eta zer line programa huts egin du. Ondoren, erakusleak eta helbideak edozein galdera? Gaur egun delako, emandako gauza horiek existitzen hartzen hasteko goaz eta zehazki zer diren jakin dugu. Bai. [Student] Zergatik ez duzu ampersand bat jarri hurrengo parte- Ona galdera. Zergatik ez dute karaktere array ondoan ampersand bat jarri aurretik egin nuen bezala gure adibideetan gehien? Erantzun laburra da array apur bat bereziak dira. Ia pentsa dezakezu buffer benetan helbide bat izateaz gain, eta, beraz, besterik ez da gertatzen kasu izan kortxetea notazioa onerako da, beraz, parentesia 0, 1 bracket joan gaitezke, parentesirik 2, * idazkera erabili behar izan gabe. Zuri gezurra pixka bat, array-ak eta erakusleak delako dira, hain zuzen ere, apur bat ezberdinak, baina, askotan, baina ez dira beti erabiltzen interchangeably. Labur esanda, funtzio bat erakuslea da espero zatia memoria bat, dezakezu helbide bat pasatu da malloc itzuli zen, eta malloc ikusiko dugu berriro luze baino lehen, edo array baten izena gainditu dezakezu. Ampersand ez duzu egin behar array dira dagoeneko funtsean nahi helbideak. Hori da salbuespen bat. Parentesi artean karratu ditu berezi. Ezin izan ampersand bat jarri bufferraren ondoan? Ez da kasu honetan. Hori ez litzateke lan egiten delako, berriro ere, kasu honetan, izkina non array ez dira nahiko benetan helbideak. Baina, agian, ikusiko dugu itzuli aurretik luze adibide beste. Saiatu dezagun hemen arazoa konpontzeko. Nik dugun datu-egitura array bat bezala ezagutzen denbora batzuk erabiliz ditugu. Puntuan kasuan, zer izan besterik ez dugu. Baina array upsides batzuk eta downsides. Arrayak nice zergatik? Zer da gauza bat gustuko-duen neurrian array array nahi duzu? Zer da haiei buruzko erosoa? Zer da sinesgarria? Zergatik aurkeztu dugu lehenik eta behin? Bai. [Student] datu asko gorde ahal izango dute, eta ez duzu osoa gauza bat erabili. Atal bat erabili ahal izango duzu. Good, array bat datu asko gorde dezakezu, eta ez duzu zertan guztiak erabili ahal izateko,, beraz overallocate dezakezu komenigarria izan daiteke ez baduzu, aldez aurretik daki nola zerbait espero asko. GetString adibide ezin hobea da. GetString, gurekin by idatzi, ez daki zenbat karakteretan espero du, Izan ere, memoria Elkarren ondoko zatiak esleitu ona da. Arrayak Duela pare weeks bat ikusi genuen, gaur egun arazo bat konpontzen non zure kodea hasten da, oso gaizki diseinatutako zerbait devolve. Gogoratu David izeneko ikaslea egitura bat sortu dut, eta orduan izan zen benetan alternatiba bat, nahiz eta, izeneko aldakorreko izena eta, nire ustez, house izeneko beste aldagai bat edukitzea, eta istorioa izeneko ID horretan nahi gero dudalako beste zerbait aurkezteko beste aldagai nahi Rob programa horretan, beraz, ondoren, minutu bat itxaron, erabaki nuen, Aldagai horien izenak aldatu behar dut. Dezagun dei nirea NAME1, ID1, house1. Dezagun deitzen Rob en izena2, house2, ID2. Baina gero, minutu bat itxaron, zer Tommy buruz? Ondoren, hiru aldagai izan genuen. Beste norbaitek, lau aldagai multzo sartu ditugu. Mundua messy oso azkar hasi ziren, beraz structs sartu dugu, eta zer da eta egitura bati buruz sinesgarria? Zer da C eta egitura bat utzi nahi duzu? Benetan awkward da gaur egun. Zer? >> [Inaudible ikaslearen erantzuna] Bai, eta, zehazki, typedef esker, datu-mota berri bat sortu beharko duzu, eta egiturari, struct gako-hitza, aukera ematen enkapsulatu kontzeptualki lotutako datu-pieza elkarrekin eta, hortik aurrera, deitu ikasle bat bezala zerbait. Hori ona izan zen, gaur egun ereduetan dugulako sort askoz gehiago kontzeptualki koherentea ikasle baten ideia aldagai batean baino arbitrarioki kate bat, ID bat izatea, eta abar. Arrayak nice aukera ematen dute martxan garbiketa gure kodea Gurekin delako. Baina arazotxo bat array bat da gaur egun? Zer egin dezaket ez duzu? Bai. [Student] nola big da jakin behar duzu. Nola big da jakin behar duzu, eta, beraz, mota mina bat da, beraz. Duzun dutenek aldez aurretik programazio esperientzia duten hizkuntza asko ezagutu, Java bezala, memoria zatia, zehazki, array bat eskatu ahal izango duzu, nola big-luzera bat, jabetza, eta, beraz, hitz egiten, duzu, eta hori da benetan erosoa. C, ezin duzu, nahiz eta deitu strlen generic array strlen delako, hitza esan nahi du, eta kateak soilik da, eta irudikatu dezakezu kate baten luzera duelako giza konbentzio honetan \ 0, baina array bat izatea, oro, zatia memoria bat besterik ez da. Ints array bat bada, ez da karaktere berezi batzuk izango amaieran zain. Array baten luzera gogoratu behar duzu. Array baten beste arazotxo bat reared bere burua bera GetString. Zer da array bat beste arazotxo bat? Sir, besterik ez duzu eta ni gaur egun. [Inaudible ikaslearen erantzuna] >> zer da? Pila izendatu da. Ados, pila izendatu zuten. Zergatik ez nahi al duzu? [Student] du berrerabili delako. Berrerabili lortzen. Ados, array bat izanez gero, erabili nahi duzun memoria esleitu, ezin duzu, esate baterako, itzultzeko pila delako. Ados, hori desabantaila bat da. Eta nola buruz beste array bat? Esleitu ondoren, mota horretako izorratu leku gehiago behar duzu Oraindik duzu array baino. Ondoren, sartu dugu, abisuaren, malloc, eta horrek eman zigun dinamikoki memoria esleitu gaitasuna. Baina, zer saiatu ginen beste mundu bat badu guztira? Zer gertatzen da pare bat arazo horiek konpondu nahi izan dugu beraz, horren ordez nire dugu pen behera egin du lo- ordez badugu nahi, funtsean, mundu bat sortu jada ez atsegin dute hau? Array bat da, eta, jakina, mota honetako hondatu array behin amaiera! eta jadanik ez dut beste pertsonaia bat beste zenbaki oso edo espazioa. Zer sort-preemptively ongi esan badu, zergatik ez dugu erlaxatzeko baldintza hau memoria zatiak horiek guztiak Alboko itzuli atzera eta zergatik ez, int edo char bat behar dut, emadazu espazio horietako bat? Eta bat behar dut, emaidazu leku bat, eta bat behar dut, emaidazu leku bat. Abantaila da norbaitek bestela hemen memoria, big aurre ez du. Zatia memoria gehigarria hau hartuko dut hemen, eta, ondoren, honako hau. Orain, harrapaketa hemen bakarra da hori ia sentitzen atsegin dut aldagai desberdinen sorta osoa. Bost aldagai desberdinak izan daitezkeen bezala sentitzen du. Baina zer gertatzen da ideia bat lapurtu dugu bada kateak , nolabait dugu horren bidez lotzeko gauza horiek elkarrekin kontzeptualki, eta zer egin nuen bada? Hau da nire oso gaizki marrazten arrow da. Baina demagun memoria zatiak hauen bakoitzean beste azpimarratu, eta lasaia hau, anai-arreba, bere eskubidea ez du, ez du, hala nola, arrow. Izan ere, zer deitzen lotutako zerrenda bat da. Datuak egitura berri honek aukera ematen duen memoria zatia esleitu da, gero beste bat, gero beste bat eta, ondoren, beste edozein momentutan nahi dugun programa batean zehar, eta ari dira nolabait erlazionatutako guztiak gogoratzen dugu literalki kateatzea elkarrekin, eta genuen pictorially hemen gezi bat. Baina kodea, zer bidez, nolabait, izan den konektatu mekanismoa izango litzateke, Scratch ia bezala, zatia beste zatia? Erakuslea erabili izan dugu, ezta? Benetan arrow ezkerreko goiko plazan delako, guy hau hemen honen barruan edukiko plaza honen ez bakarrik ints batzuk, ez soilik char batzuk, baina zer benetan badut esleitu beste tarte txiki bat da, beraz, gaur egun, nire memoria zatiak bakoitzean, nahiz eta hori me kostua du, Gaur egun, itxura apur bat gehiago angeluzuzena non memoria zatien bat zenbaki bat erabiltzen da, 1 zenbakia bezala, eta, ondoren, lasaia honetan zenbaki 2 gordetzen bada, beste zatia memoria, hau da, gezi bat erabiltzen da, edo zehazkiago, erakusle bat. Eta suposatzen dut hemen baino gehiago erabiltzen dut, hau lasaia hartan seinalatu bitartean 3 zenbakia gordetzeko, eta gaur egun lasaia honetan, dezagun nahi dut soilik hiru zatiak, hala nola, memoria. Lerro bat marraztu dut, horren bidez, null adieraziz. Izaera ez da osagarria. Izan ere, hau da, nola gauzatzeko joan gaitezke zerbait deitzen lotutako zerrenda bat. Lotuta zerrenda bat datuak egitura berri bat da, eta hurrats harrizko norabidean datuak askoz fancier egitura arazoak konpontzeko hasi Facebook-mota arazoak-lerroak eta Google-mota arazoak zehar non erraldoi datuak multzo duzu moztu, eta jada ez da guztia gordetzeko contiguously eta bilaketa lineala antzeko zerbait erabili edo, are gehiago, bilaketa bitarra antzeko zerbait. Are hobeto exekutatzen ari aldiz nahi duzu. Izan ere, eta, Grails Santuaren bat geroago, aste honetan edo hurrengo buruz hitz egin dugu. duen algoritmo bat exekutatzen ari da etengabe. Beste era batera esanda, denbora kopuru bera hartzen du beti kontutan hartu gabe nola big sarrera da, eta hain zuzen ere, izango litzateke sinesgarria, are gehiago, zerbait logaritmikoa baino. Zer da hau? Pantailan hemen? Laukizuzenak bakoitzak zehazki zer eskua marraztu dut. Baina gauza ezker modu berezi aldagai bat da. Bakar erakuslea izango da egingo Gotcha bat delako lotuta zerrenda batekin, gauza horiek deitzen dira, lotuta zerrenda mutur gainean zintzilik duzula. Just kate bat bezala, char lehen helbidea jakin behar duzu. Same zerrendak lotutako asko. Memoria lehen zatia helbidea jakin behar duzu bertatik delako, beste behin iritsiko dezakezu. Arazotxo. Zer prezioa ordainduz dinamikoki edukitzea aldakortasuna sizable datuak egitura dugu inoiz memoria gehiago behar izanez gero, isuna, besterik ez, bat edo gehiago zatia esleitu eta erakuslea bat marraztu zerrenda berria buztana zaharra? Bai. [Student] buruz bi aldiz ere espazioa hartzen du. Bi leku handia hartzen du, beraz, behin betiko arazotxo bat, eta ikusi dugu denboran eta espazioan eta malgutasuna arteko aurretik denerako non gaur egun, ez behar dugu zenbaki horiek bakoitzeko 32 bit. Benetan behar dugu, 64, 32 eta 32 zenbakia erakuslea. Baina hey, 2 RAM gigabyte daukat. Hemen beste 32 bit eta hemen gehitzea ez dirudi hori aurre big. Baina datuak handiak multzo, gehitzen du behin betiko it up literalki bitan askoz. Zer arazotxo bat da orain, edo zer film luzea ematen diogu, zerrenda bat lotuta, eta ez da array bat dugu gauza zerrendak ordezkatzen bada? [Student] ezin duzu zeharkatuko du atzeraka. Ezin duzu zeharkatuko du atzeraka, mota horretako izorratu Oraindik zauden oinez bada, beraz ezkerretik eskuinera loop edo, berriz, begizta bat erabiliz eta, ondoren, konturatzen zara "Oh, zerrendaren hasieran itzuli nahi dut". Ezin duzu erakusleak horiek ezkerretik eskuinera bakarrik delako joan geziak adierazten. Orain, zerrendaren hasiera gogoratzeko beste aldagai bat, baina hori konplexutasuna kontuan mantentzeko. Array bat, eta ez du axola noraino joan, beti izango duzu ken, ken, ken, ken eta atzera jo nondic duzu izan zen. Zer da arazotxo bat da hemen? Bai. [Inaudible ikasleak galdera] , Ezin duzu, beraz, Zuk benetan just izeneko bi aldiz lotuta zerrenda bat datuak egitura bat proposatu eta, hain zuzen ere, erakuslea beste gehitu nahi duzun laukizuzenak horien bakoitzaren duten beste norabidean doa, goitik zeharkatuko atzera eta aurrera dezakezu, gaur egun, eta horietatik arazotxo hiru aldiz ari zaren memoria ere erabiltzen dugu eta, gainera, konplexutasun kodea dagokionez gehituz eskuinera idatzi behar duzu. Baina horiek guztiak dira, agian, oso moduzko tradeoffs, berraztertzeko garrantzitsua da. Bai. [Student] ere ez duzu bat 2D lotutako zerrendan. Ona, ezin duzu benetan 2D lotuta zerrenda. Asmoz. Ez da ia array bat bezain erraza. Array bat bezala, parentesia irekita, parentesia itxi, parentesia irekia, parentesia itxi egin duzu, eta 2 dimentsioko egitura batzuk lortuko duzu. 2 dimentsiotako zerrenda lotuta ezartzeko dezakezu gehigarri gisa proposatu-a hirugarren erakuslea gauza horietako bakoitzean, ez bada Beste zerrenda bat buruz uste baduzu 3D style datozen pantaila guztiok, nolabaiteko beste kate bat besterik ez da. Egin izan dugu, baina ez da parentesirik, kortxetea idazten bezain erraza. Bai. [Inaudible ikasleak galdera] Ona, eta, beraz, hau da benetako kicker bat da. Nik dugun baino gehiago, oh bezala, bilaketa bitarra pined algoritmoak hauek, taula gainean zenbakiak array bat bilatu dezakezu edo telefono-liburu bat, beraz, askoz ere azkar erabiltzen baduzu, zatitzea eta konkistatzeko eta bilaketa algoritmo bitar bat, baina bi hipotesi bitarra bilatu behar. One, datuak horrela antolatu zen. Orain, zentzuzkoa mantendu ahal izango dugu hau horrela antolatu, beraz, agian hori ez da kezka, baina bitarra ere bilatzen ditu, bere gain hartu zuen izan duzula ausazko zenbakien zerrendan sartzeko, eta array bat ematen dio ausazko sarbidea izan behar duzu, eta sarbidea ausazko Zu array bat ematen bazaio, zenbat denbora eramango du esan nahi dut parentesirik 0? Dute, erabili besterik ez duzu [0], eta bertan zaude. Zenbat urrats kokapena 10 lortu du? Urrats bat, [10] besterik ez duzu joan eta han duzu. Por el contrario, nola lortu lotuta zerrendan osokoa 10ean duzu? Hasieran hasi behar duzu soilik gogoratuz lotuta zerrenda hasieran, kate bat bezalakoa gogoratu ari da bere lehen char helbidea, eta 10ean int hori aurkitu edo kate batean karaktere 10ean ez dela, madarikatua gauza osoa bilatu behar duzu. Berriz ere, ez dugu gure arazo guztiak konpontzeko. Berriak sortzen ari gara sartuz, baina benetan zer diseinatzeko saiatzen ari zaren araberakoa izango da. Hau gauzatzeko dagokionez, ideia bat maileguan hartzeko aukera izango dugu, ikaslearen egitura hori. Sintaxia oso antzekoa da, eta gaur egun izan ezik, ideia apur bat gehiago abstraktu etxea eta izena eta IDa baino. Baina C egitura datuak bat izan dugula proposatzen dut deitzen den nodoa, diapositiba azken hitza iradokitzen nodo baten barruan, eta nodo bat besterik ez da informatika edukiontzi orokorra. Normalean zirkulu edo lauki edo laukizuzen Nik egindako marraztuta. Eta datuak egitura honetan, int, n dugu, beraz, kopurua gorde nahi dut. Baina zer gertatzen da bigarren lerroan, struct nodo * hurrengo da? Zergatik da zuzena, edo zer gauza rol joko honek, nahiz eta pixka bat críptica da hasiera batean? Bai. [Inaudible ikaslearen erantzuna] Zehazki, eta, beraz, spoils sort * dela nolabaiteko erakuslea. Erakuslea honen izena da arbitrarioki hurrengo baina deitu genezake ezer nahi dugu, baina zer da erakuslea puntu honek? [Student] nodo beste. >> Zehazki, adierazi beste nodo, hala nola. Orain, C. jakin-mina sort Gogoratu C konpiladore bat goitik behera irakurri, ezkerretik eskuinera, Horrek esan nahi du, hau da, ikasleak zer egin dugu pixka bat. Ikasle bat definitu dugu, ez dugu ez hitz bat jarri bertan. Esan besterik ez da typedef. Ondoren, int id, izena katea, katea etxea izan genuen, eta, ondoren, eta egitura, beheko ikaslea. Aitorpen honek apur bat desberdina da, izan ere, berriz, C konpiladorea da apur bat muda. Besterik ez da goitik behera irakurri du, hala badagokio 2 linea iristen da hemen non hurrengo izendatu zuten, eta ikusten, oh, hemen izeneko hurrengo aldagai bat da. Egitura nodo bat erakuslea da. Konpilatzailea da zer eta egitura nodo bat dela jabetuko da? Gauza hau lehenago inoiz ez dut entzun, nodo hitza agian ez delako bestela agertzen behean arte, eta, beraz, hau da erredundantzia. Struct nodo hemen esan nahi duzu, eta gero laburtu ahal izango duzu beranduago typedef esker behera hemen, baina hori delako egitura bera barruan egitura ari gara erreferentzia. Hori bat Gotcha dago. Interesgarri arazo batzuk sor. Zenbaki-zerrenda bat lortu dugu. Nola sartu dugu? Nola bilatu dugu? Nola ezabatu dugu? Batez ere, gaur egun dugun erakusle horiek guztiak kudeatzeko. Erakusle ziren kontuan-flexiones sort uste duzu duzunean, horietako bat besterik ez int bat irakurri nahian. Orain, zerrenda oso bat merezi manipulatzeko behar dugu. Zergatik ez gure 5 minutuko break hartuko dugu hemen, eta, ondoren, ekarri dugu Eszenatokira igo folks batzuk zehazki horretarako. C askoz gehiago fun denean jokatu izarrekin da. Zeini literalki lehena izateko? Ongi da, goazen gora. Lehen zaude. Who 9 izan nahi? Ados, 9. Nola 9 buruz? 17? Un poco de clique hemen. Aurrean errenkada horretan 22 eta 26. Eta gero, nola han norbait buruz ari azpimarratu. 34 zaude. Ados, 34, iritsi da. Lehenengoa han da. Ados, you guys lau. Eta nor ez esatea 9 dugu? Nor da gure 9? Nor benetan 9 izan nahi du? Eskubidea, zatoz, 9. Hemen goaz. 34, zu ezagutzeaz dugu baino gehiago dago. Begiratu horrela zuek lehen zatia da. 26, 22, 17, ona. Off duzu stand bada alde ari gara une batean malloc delako. Ona. Ados, bikaina, beraz galdetu, galdera pare bat hemen. Eta benetan, zer da zure izena? >> Anita. Anita, ados, zatoz hona. Anita konpontzeko sort digu bat lehen nahiko simple galdera laguntzeko, joan, hau da, nola egin ala ez, balio bat zerrendan aurkituko dituzu? Orain, konturatu lehen, hemen irudikatzen Lucas, apur bat desberdina da, eta beraz, bere paper nahita alboetara ez delako nahiko altuera du eta ez du bit askok bezala, nahiz eta teknikoki besterik ez berritzean paper tamaina bera du. Baina pixka bat ezberdinak 32 bakarrik erakuslea bit zuen zuen, eta guys horiek guztiak 64 bits, erdiak kopurua da, erdia erakuslea da. Baina erakuslea ez dago irudikatuta, eta, beraz, you guys Could zertxobait awkwardly erabili zure ezkerreko pertsona duzu ondoan seinalatu. Eta zenbaki 34 Oraindik duzu. Zein da zure izena? Ari. Ari, eta, beraz, benetan, eduki eskuineko eskua papera, eta ezkerreko zuzen behera doa. Ezker null ordezkatzen duzu. Orain gure giza irudia da oso koherentea. Hau da, benetan, nola erakusleak lan. Eta pixka bat izanez gero scrunch Modu honetan, beraz, ez naiz zure bidea. Anita hemen, niri 22 zenbakia, baina bere gain hartzen ez gizakiak sortu eusten paper pieza Murrizketak baina hori zerrenda bat da, eta besterik ez duzu Lucas hasi Lehenengo erakuslea da literalki delako. Demagun erakuslea dira bakarrik, eta, beraz, zuk ere, zerbait seinalatu gaitasuna. Zergatik ez da zehazki zer Lucas seinalatuz seinalatuz duzu? Ona, eta utzi hau enact ni hemen. Just dezagun, eztabaidak eztabaida, tira me hemen orri zuri bat. Nola zure izena ortografia duzu? >> Anita. Ados, Anita. Demagun nodo * Anita = lucas. Beno, ez duzu lucas deitu behar dugu. Deitu behar dugu. Zergatik Izan ere, errealitatea hemen koherentea da hau? Bat, lehen existitzen da dagoeneko. Lehenengoa izan da esleitu ustez nonbait hemen. Nodo * lehen aldiz, eta izan da esleitu zerrenda bat nolabait. Ez dakit nola gertatu zen. Hori gertatu klasea hasi baino lehen. Gizakien lotuta zerrenda hau sortu egin da. Eta orain ipuin-hau da, Facebook-en itxuraz joan puntu honetan geroago- istorioa Puntu honetan, Anita lehenengo berdinak izan da hasieratu horrek ez du esan nahi Anita Lucas puntu. Izan ere, adierazi zer adierazi du helbide berean barruan Lucas 32 bit delako - 1, 2, 3 - da gaur egun, halaber, Anita 32 bit barruan - 1, 2, 3. Orain aurkitu 22. Nola litzateke hau egiten al duzu? Zer da? >> Edozein Point hori. Edozein Seinalatu, eta, beraz, aurrera eta antzeztea onena hemen ahal izango duzu. Ona, ona, eta gaur egun ari zaren seinalatuz at-Zein da zure izena 22? Ramon >> Ramon, Ramon da ustiategi 22, beraz. Txeke bat egiten duzu. Ez du Ramon == 22, eta hala bada, esate baterako, itzultzeko egia ahal izango dugu. Utzidazu bitartean guys horiek stand hemen zertxobait awkwardly utzi zerbait egin me boolearra bezala azkar aurkitzeko. Aurretik joan eta esan noa (nodo * zerrenda, int n). Eskuinera itzuli dut you guys. Kodea batzuk idatzi dut. Eta orain aurrera joan eta hau, nodoen * Anita = zerrenda egin dut. Eta aurrera joan eta esan noa (Anita! = NULL) bitartean. Metafora hemen dago eta apur bat luzatu lortzean, baina (Anita! = NULL), berriz, egin nahi dut? Erreferentziatutako modu batzuk behar dut osokoa Anita dela seinalatuz. Iraganean, egiturak izan dugu, nodo bat da, dot idazkera erabili dugu, eta antzeko zerbait esan nahiko genuke anita.n, baina hemen arazoa da Anita ez dela struct per se. Zer da? Erakuslea du, eta, beraz, benetan, nahi dugu puntu hau erabili nahi izanez gero notazioa eta hori nahita apur bat bilatzeko críptica zerbait egin behar dugu, edozein izanda ere Anita ezkerreko joan atsegin seinalatuz eta, ondoren, n izeneko eremuan. Anita da erakuslea da, baina zer da * Anita? Zer joan zer da Anita seinalatuz aurkitu duzu? Struct A, nodo bat, eta nodo, abisuaren, n izeneko eremuan du, izan ere, gogora ekarri, 2 eremu horiek, eta hurrengo n ikusi dugun une bat duela hemen. Benetan imitatu kode hau egin ahal izan genuen eta esan ((* Anita) n == n), n naiz I bila. Oharra funtzioa buruzko zaintzen dut kopurua gainditu zen. Ondoren, aurrera I eta zer bueltan benetako antzeko zerbait. Bestela, ez bada kasua, zer egin nahi dut? Nola zer Anita egin beraz, intuizioz zerrendan zehar oinez kodea itzuli dut? Zer egin behar egin behar dut hemen urrats hori hartu Anita, ezker, urrats hori ezkerreko simulatzeko? [Inaudible ikaslearen erantzuna] >> Zer da hori? [Inaudible ikaslearen erantzuna] Ona, ez da ideia txarra, baina iraganean, egin dugu hau egin dugu Anita + + 1 zenbakia gehitu lukeelako Anita, normalean hurrengo pertsona seinalatu, Ramon bezala, edo pertsona zion ondoan, edo hurrengo zion pertsona behera line. Baina hori ez da nahiko ona hemen zer gauza hau ez dituelako memorian itxura? Ez. Desgaitu behar dugu. Itxura hau atsegin du memoria, eta nahiz eta 1 eta 2 eta 3 itxi bat marrazten dut, benetan simulatu dugu bada hau, guys oraindik berean pertsona seinalatuz, batzuk hartzen ausazko urratsa atzera, batzuk ausazko aurrerapauso bat da? Nahastea, hau da, oraindik ere, lotutako zerrenda bat, baina guys horiek edozein lekutan memoria izan liteke, beraz, Anita + + ez dago zergatik lan? Zer kokapena Anita + +? Nork daki. Beste balio batzuk besterik ez da, beraz, gertatzen interposed nodo horiek kasualitatez guztien artean ez dugulako array bat erabiliz. Nodo horietako bakoitza banan-banan esleituko dugu. Ados, you guys zuei garbitzeko bada itzuli du. Anita + +, ez dugu ordez Anita ordez proposatzen me lortzen ondo, zergatik ez joan hemendik Anita seinalatuz dugu, eta ondoren egin. hurrengoa? Beste era batera esanda, Ramon, 22 zenbakia da eusten joan gara, eta, ondoren, hurrengo da bagina bezala Anita kopiatzea zuen ezkerreko erakuslea. Baina ez zuen joan urrunago aurkitu dugu, Ramon baino 22 delako. Baina ideia izango litzateke. Orain, hau jainko-awful nahaspila bat da. Zintzotasunez, inork ez du inoiz gogoratzen sintaxia hau, eta beraz, zorionez, Egia esan, apur bat nahita-oh, ez duzu benetan zer I idatzi. Gehiago sinesgarria izango litzateke, ahal izango banu. Voila! Eszenak atzean, arazoa konpontzeko modu hau. Anita, ezker urrats hori hartzeko, lehenik eta behin, helbidea ez gara Anita dagoela seinalatuz eta non aurkituko du, ez bakarrik n, konparazio-en mesedetan besterik ez dugu checked, baina ere izango aurkituko dituzu hurrengo kasu honetan, Ramon ezkerreko zerrendako hurrengo nodo seinalatuz. Baina hori jainko-awful nahastea, lehenago aipatzen dut, hau da, baina C aukera ematen dizu errazteko gurekin bihurtzen da. Horren ordez idatziz (* Anita) ordez, ezin dugu besterik gabe idatzi Anita-> n, eta gauza bera zehatza da funtzionalki, baina asko intuitiboagoa da, eta askoz gehiago irudian koherentea izan ditudan marrazten da Denbora horretan guztian geziak erabiliz. Azkenik, zer egin behar dugu programa honen amaieran? Kodea gainerako lerro bat da. Itzuli zer? Gezurra, izan ere, oro har bidez iritsi bada loop bitartean eta Anita da, hain zuzen ere, null, horrek esan nahi du modu guztiak joan zen zerrendaren bukaeran non zuen seinalatuz-Zein da zure izena berriro? Ari. >> Ari ezkerreko, hau da, null. Anita da gaur egun null, eta konturatzen naiz hemen ari zaren zutik awkwardly Limbo egingo dut off delako bakarrizketa bat hemen, baina inplikatzeko dugu berriro une bat besterik ez. Anita null istorioa puntu hartan, berriz, begizta bukatzen da, beraz, eta faltsua itzuli behar dugu Ari null erakuslea lortu zuen modu guztiak galtzen delako ondoren, ez zen zerrendan ez duela bilatzen. Hau sortu garbitu ahal izango dugu ere, baina hau nahiko ona ezartzea da, ondoren zeharkako funtzio bat, lotuta zerrenda funtzioa aurkitu. Oraindik da lineala bilatu, baina ez da + + erakuslea bezain erraza edo + + i aldagai bat ezin dugulako asmatzen non nodo horietako bakoitzak memorian. Literalki breadcrumbs pista jarraitu behar dugu, edo zehatzago esanda, erakusleak, bat nodo batetik bestera joateko. Orain dezagun saiatu beste bat. Anita, ez itzuli hemen nahi al duzu? Zergatik ez aurretik joaten gara eta beste pertsona bat publikoaren esleitu? Malloc-Zein da zure izena? >> Rebecca. Rebecca. Rebecca izan da publikoaren malloced eta orain, zuen 55 zenbakia gordetzeko. Eta esku helburua da Anita sartu Zerrenda lotuta hemen bere leku egokia sartu Rebecca. Goazen hemen une bat baino gehiago. Zerbait egin hau atsegin dute. Egin dut nodo *. Eta zer da zure izena berriro? Rebecca. >> Rebecca, ados. Rebecca malloc (sizeof (nodo)) lortzen. Bezala banatzen dugu iraganean, ikasle eta whatnot bezalako gauzak nodoaren tamaina behar dugu, eta, beraz, orain, Rebecca zer seinalatuz? Rebecca ditu bere barruan bi eremuak, eta horietako bat da 55. Egin dezagun zer, Rebecca-> = 55. Baina orduan Rebecca-> hurrengo behar-nahi oraintxe, eskua nork daki mota da? Zabor balio batzuk da, seinalatuz, beraz, zergatik ez da neurri ona gutxienez, hau da, beraz, ezkerreko bere alde dago orain. Anita orain, eraman ezazu hemendik. Rebecca izan esleitu behar duzu. Anima zaitez eta aurkitu non Rebecca jarri behar dugu. Ona, oso ona. Ongi, ona da, eta gaur egun norabide apur bat eman behar dugu, beraz, iritsi zara Ari. Bere ezkerreko null, baina Rebecca argi eta garbi eskubidea da, beraz, nola ez lotuta zerrenda hau aldatu behar dugu Rebecca sartu ahal izateko, dagokion tokian? Ezin duzu, literalki bada mugitu pertsonen ezkerreko eskuak behar bezala inguruan, arazoa konpondu dugu horrela. Ongi, ona da, eta bestalde, Rebecca ezkerreko da orain bere alboan. Hori izan zen oso erraza da. Dezagun saiatu esleitzean-we're ia egin, 20. Ongi da, goazen gora. 20 esleituko dira, beraz aurrera eta berriro esan hemen besterik ez dugu egin nodo * Saad. Malloc ditugu (sizeof (nodo)). Dugu zehatza sintaxia bera 20 baino lehenago egin genuen, eta hurrengo = NULL egin dut, eta orain da Anita sartu lotuta zerrenda, hori zehatza berean rol play balute. Exekutatu. Ongi, ona da. Orain uste arretaz ezkerreko eskuak mugituz inguruan hasten zara aurretik. Lortu urrun by awkward rola gaur egun. Whose eskuz mugitu behar da lehenengo? Ados, itxaron, ez bere entzumen dut. Folks batzuk adeitsuki bada awkward egoera konpontzen laguntzeko. Whose ezkerreko lehen eguneratu behar agian? Bai. [Student] Saad. Ados, Saad, zergatik, baina? [Inaudible ikaslearen erantzuna] Ona, mugitu zer badugu, zure izena? >> Marshall. Marshall, mugitu eskuan lehenengo behera null literalki dugu zerrenda honetan lau pertsona umezurtz izan zen Ramon eta ezkerreko denek zuzentzen duen gauza bakarra delako, beraz erakuslea eguneratzeko lehen txarra zen. Dezagun desegin dela. Ona, eta gaur egun, aurrera eta mugitu dagokion ezkerreko Ramon seinalatuz. Txiki hau erredundante bat sentitzen du. Gaur egun, bi pertsona Ramon seinalatuz, baina isuna Gaur egun, delako nola bestela zerrenda eguneratu dugu? Beste alde batetik mugitu? Bikain, orain memoria edozein galdu dugu? Ez da, beraz, ona da, ikusi ahal izango dugu, apurtu ez bada, hau behin gehiago. Azkena denbora Mallocing, multzoko 5. Itzuli modu guztiak, behera etorri dira. Oso zirraragarria da. [Txalo] Zein da zure izena? >> Ron. Ron, ados, zauden multzoko 5 malloced. Besterik ez dugu exekutatu kodea duten horiei ia berdina beste izen batekin. Bikain. Orain, Anita, zorte ona zenbaki 5 txertatu zerrendan. Ona, eta? Bikain, eta, beraz, hau da, benetan hiru kasu osoaren herena. Lehen aldiz izan dugu norbait amaieran, Rebecca. Erdian norbait izan dugu. Orain norbait behar dugu, hasiera-hasieratik, eta adibide honetan, Lucas eguneratu lehen aldiz izan dugu Zerrendako lehenengo elementua duelako nodo berri bat seinalatu, Izan ere, aldi berean, kopurua nodo 9 seinalatuz. Izugarri awkward manifestazio bat izan zen, ziur nago, guys horiek Kopako txalo handi bat ahal izango banu. Nicely done. Hori da dena. Memoria apur bat gorde dezakezu zure paper pieza. Bihurtzen da egiten kode ez da besterik gabe, eskuak mugituz inguruan bezain erraza eta erakusleak, gauza ezberdinak seinalatuz. Baina konturatzen denean antzeko zerbait ezartzeko orduan lotuta zerrenda edo aldaera bat benetan aukera zabaltzeko horiek oinarrizko oinarriak, ziztadak-tamaina arazoak irudikatu behar dut, eskua hau edo eskuko hau da, konturatzen zer dela bestela oso programa konplexuak daiteke, hain zuzen ere, eraikin nahiko simple hau atsegin bloke murriztu. Dezagun gauzak ere sofistikatuagoa norabidean. Lotuta zerrenda nozioa dugu. Halaber, iradokizuna atzera-bi aldiz lotuta zerrenda esker, begiratzen ia berdina da, baina gaur egun bi erakusle dugu eta egitura, barruan ordez, eta seguruenik ezin diegu erakusleak duten aurreko eta hurrengo edo ezkerrera edo eskuinera, baina, ez dugu hain zuzen ere, behar horietako bi. Kodea apur bat gehiago parte hartzeko prest dauden pertsonek izango litzateke. Anita lan gehiago egin behar izan zuen agertokian. Baina, zalantzarik gabe izan dugu egitura-mota hori ezartzeko. Iraupena dagokionez, baina, denborak aurrera egin du zer izango litzateke n zenbaki bat aurkitzeko lotuta zerrenda batean Anita? Oraindik big n O, beraz, ez da bilaketa lineala baino hobea da. Ezin dugu egin bitar bilaketa, nahiz eta, berriro ere. Zergatik sortu zen kasua dela? Ezin duzu inguruan jauzi. Nahiz eta, jakina, ikusi dugu agertokian gizakiak guztiak, eta Anita eyeballed aukera izan da, eta hau esan du: "Hemen zerrendaren erdian," ez zuen ezagutzen zuen programa informatiko zuen gauza bakarra izan latch delako eszenatokia Irteeran Lucas izan zen, lehenengo erakuslea izan zen. Nahitaez izan zen, lotura horiek jarraitu, bere modu kontatuta aurkitu ditu gutxi gorabehera erdialdera arte, eta orduan ere, ez zuen denean zuen, erdi-erdian iritsi jakin nahi du bide guztiak ez doa zuen amaiera irudikatu nahi du zenbat daude, ondoren backtracks, eta hori ere gogorra izango litzateke izan ez baduzu Nolabaiteko zerrenda bi aldiz lotuta. Arazo batzuk argitzen ditugu gaur egun, baina beste batzuk sartuz. Datuak ezberdinak egitura guztiz zer? Mather House erretiluak argazki bat da, eta, kasu honetan, datu-egitura dugu, halaber, mota horretako dagoeneko buruz hitz egiten dugu. Pila bati buruz hitz egin dugu memoria testuinguruan, eta hori sort nahita izeneko memoria termino pila bat delako eraginkortasunez da datu-egitura hori, gero eta gehiago stuff gainean geruzadun du. Baina pila bat buruz gauza interesgarri, kasu da errealitatea, Datuen egitura mota berezi bat dela. Datu-egitura bat da, zeinaren bidez lehenengo elementu azken elementua da. Lehenengo erretilu pila gainean jarri behar bada, zoritxarrez izan zaren azken erretilu hartu beharreko off pila eta hori ez da gauza ona izan behar da. Aitzitik, ahal izango duzu uste beste modu inguruan, azken lehen out da. Orain, ez eszenatoki pila bat izatea non edozein etortzen burura non jabetza duten datu-egitura out lehen, azken, sinesgarria benetan? Gauza ona da hori? Gauza txarra da hori? Behin betiko da txarra erretiluak ez ziren bada guztiak berdin-berdina eta kolore ezberdinak bereziak edo whatnot ziren, eta nahi duzun kolorea, behealdean modu guztiak. Jakina, ezin duzu lortu ahalegin handia gabe. Goitik hasi eta zure modu lan behera duzu. Era berean, zer ziren fan boys hauetako bat bada duten itxaroten gaueko iPhone eta lerro bat sortu nahian hau bezalako leku bat? Ez litzateke polita izango da Apple dendan ziren pila bat datuak egitura? Yay? Berriz? Ona erakusten duten pertsonen sortu da posible azken momentuan eta, ondoren, hari pultsatuzko off ilaran. Eta, hain zuzen ere, Izan ere, hori izan zen, beraz, gogoa ilara esan da benetan deitu datuen egitura mota hau genuke koherentea, errealitate bat non ordena ez materia, eta lehena lehena izan nahi duzun bada bakarrik giza zuzentasuna mesedetan. Oro har, ilaran datuak egitura deitu dugu. Bihurtzen da zerrendak lotuta gain, oinarrizko ideia horiek berak erabiliz eta hasi berriak eta irtenbide mota ezberdinak sortzeko arazoak. Esate baterako, pila baten kasuan, pila bat irudikatu izan dugu datu hau atsegin egitura bat erabiliz, proposatuko nuke. Kasu honetan, izendatu dut eta egitura bat, eta egitura honen barruan Nik esan zenbaki-array eta gero izeneko tamaina aldakorra da, eta gauza pila bat deitu dut. Orain, zergatik ez hau benetan lan? Pila baten kasuan, modu eraginkorrean hau array bat pantailan marraztu izan nuen. Hemen, nire pila da. Dutenek nire zenbakiak dira. Eta haien marraztu dugu hau, hau, hau, hau, hau. Eta gero, beste zenbait datu-kide izan dut hemen, deitzen den tamaina, eta, beraz, tamaina da, eta, hau da, zenbakiak, eta kolektiboki, osoa iPad Hemen pila bat egitura adierazten du. Orain, lehenetsia, tamaina du ustez lortu: 0 hasieratu eta zer barruan zenbaki-array hasiera batean denean lehen esleitu I array bat? Garbage. Nork daki? Eta ez du benetan axola. Ez du axola bada 1, 2, 3, 4, 5, erabat ausaz Zorte txarra nire egitura gordetako hain luze dudalako ezagutzen, pilaren tamaina 0 da, orduan programazioaren ezagutzen dut, ez array edozein elementu bilatzeko. Ez du axola zer da bertan. Ez begiratu, 0 tamaina inplikazioa izango litzateke. Baina demagun orain aurrera dut eta zerbait sartu pila. 5 zenbakia sartu nahi dut, beraz, multzoko 5 jarri dut hemen, eta, ondoren, zer behera jarri dut hemen? Orain benetan nuke jarri 1 tamaina eta, gaur egun, pila tamaina 1. Zer I joan aurretik eta zenbakia sartu, utzi diotenez, 7 hurrengoa? Ondoren lortzen 2 eguneratu, eta, ondoren, 9 egin dugu, eta, ondoren, hori lortzen 3 eguneratu da. Baina orain pila honen Ezaugarri interesgarria da Suposatzen duen elementu ezabatu nahi dut pop dut zerbait off pilaren, eta, beraz, hitz egiten? Lehenik eta behin, joan 9 izango litzateke. Zer egin behar irudian aldatu nahi dut elementu pila bat pop off askoz Mather erretilu bat nahi? Bai. >> [Student] Ezarri tamaina 2. Zehazki, ez dut ezarri tamaina 2, eta zer egiten dut array batera? Nik ez dut ezer egin. Izan dut, besterik gabe, anal izan, jarri 0 bat edo -1 edo zerbait adierazten hau ez dela egiaztatzeko balio bat, baina ez du axola delako Array bera zenbat denbora da kanpo grabatu ahal dut ezagutzen dut array honetako lehenengo bi elementu bakarrik begiratzen. Orain, joan behar dut eta 8 zenbakia array hau gehitzeko, argazkia nola ez aldatzeko hurrengoa? 8 bihurtzen da, eta hori bihurtzen da 3. Zenbait txoko bat naiz ebaketa hemen. Orain 5, 7, 8, dugu, eta 3 tamaina bat gara. Hau da, pretty simple inplementatzeko, baina diseinua erabaki hau damutuko dugu? Noiz gauzak hasteko oso, oso oker joan? Bai. [Inaudible ikaslearen erantzuna] Atzera joan eta lehen elementu sartu jarri nahi duzun Bihurtzen da, nahiz eta pila bat kanpaia azpian array bat da, buruz hitz egiten hasi dugu horiek datuen egitura ere, oro har, ezagutzen dira gisa abstract datuak egitura horren bidez nola inplementatu erabat puntua gain da. Pila bat bezala egitura bat da ustezko laguntza gehitzeko push, pila gainean erretilu bat bultzatzen bezalako eragiketak, eta pop, elementu bat kentzen pila, eta hori da. Zinen kodea beste norbaiten dagoeneko inplementatu deskargatu nahi baduzu izeneko gauza pila bat, pertsona horrek idatziko zukeen bakarrik bi funtzioak, bultza eta pop, bere bizitzaren helburu bakarra , zehazki horretarako izango litzateke. Duzu, edo bere nor inplementatu programa hori erabat bat izan zen nola ezartzea erabaki bultzaka eta leihoa kanpaia azpian semantika edo bultzaka leihoa funtzionalitatea. Eta egin ditut hemen zertxobait shortsighted erabakia nire pila ezartzea datuak simple egitura honetan zergatik? Datu egitura break? Zein amaitzen errore bat itzuliko da erabiltzaileak deiak push, esate baterako daukat? [Student] egonez gero, leku gehiago ez da. Zehazki, ez dago ez leku gehiago badu, Nik badut gainditu edukiera, txanoak guztiak iradokitzen globalaren etengabeko nolabaiteko delako. Beno, eta gero besterik ez dut izan, esan "Barkatu, ezin dut push balioa beste pila gainean, "askoz Mather bezala. Uneren batean, goiko zati txiki kabinete hit ari dira. Ez dago leku gehiago edo edukiera pila da, eta akats-mota batzuk. Elementu beste nonbait jarri behar dute, erretiluan beste nonbait, edo ezerezetik. Orain, ilara batean, ezartzea da genezake apur bat ezberdina izan. Ilara A apur bat kanpaia azpian, hau da, inplementatu daiteke hainbat array bat, baina zergatik, kasu honetan, naiz proposatuz. zerrenda burua ordezkari buru-elementu bat ere izan, zerrendaren aurrean, Apple dendan lehen lerroan pertsona, tamainaren gain? Zergatik datuak pieza gehigarri bat behar dut hemen? Pentsa zer zenbakiak Nik marrazten honela badu. Demagun hau da, gaur egun pila bat ordez ilara batean, , Apple denda-ilara atsegin ezberdintasuna izatea-besterik ez da azoka. Line zerrendaren hasiera lehen pertsonan, kasu honetan 5. Zenbakian, zuen dendan sartu behar utzi lehen. Egin dezagun hori. Demagun nire ilara egoera hori da une honetan, eta gaur egun Apple dendan irekiko da, eta lehen pertsonan, 5, dendan sartu zuzentzen du. Nola argazkia aldatu dut dut de-ilaran lehen pertsonan lerroaren aurrean? Zer da hori? >> [Student] Aldatu ilaran. Aldatu burua, eta, beraz, 5 desagertzen da. Egia esan, nahiz eta-how onena da hau egiteko? Egia esan, nahiz eta gisa lasaia lotura desagertzen da. Zer izango litzateke multzoko 7 benetako dendan? Big urrats bat eman zuten aurrera. Baina, zer dute eskertzen gara orduan array eta gauzak mugitzen inguruan? Mota zure denbora galtze bat da, ezta? Zergatik beraz, anal izan behar duzu lehenengo pertsona izan gisa memoria zatia Irteeran fisikoki lerroaren hasieran? Erabat alferrikako. Zergatik? Zer izan gogoratzen dut ordez? >> [Inaudible ikaslearen erantzuna] Zehazki, aski izan dut datu osagarriak kide burua gogoratu zerrenda burua jada ez da 0, duela une bat izan zen. Orain benetan da kopurua 1. Modu honetan, optimizazioa apur bat lortuko dut. Just delako dut de-ilaran lerrotik norbait lerroaren hasieran Apple dendan ez du esan nahi denek du, mugitzeko zein oroitzapen lineal eragiketa bat da. Ordez etengabe gastatu ahal izango dut denbora soilik lortu eta gero, askoz azkarrago erantzun bat. Baina ordaindu dut prezio osagarria performantzia irabazteko eta inork ez du mugitzeko beharrik? Bai. >> [Inaudible ikaslearen erantzuna] Jende gehiago gehitu ahal izango da, bai, arazo hori ortogonalak Izan ere, ari gara ez pertsona aldatzearen inguruan. Oraindik array bat da, eta, beraz, ala guztiek ez mugitzeko gara, edo ez- oh, zer esan nahi duzu ikusten dut, ados. Egia esan, ados ia nahiz da esaten ari zaren ari gara orain, inoiz ez array honen hasieran gehiago erabili kendu I 5 bada, eta, ondoren, 7 kendu dut. Baina jarri besterik ez dut jendea eskubidea. Dut espazioa alferrik galtzen bezala sentitzen da, eta azkenean nire ilara ezer ez guztietan disintegrates beraz izan dugu pertsona wraparound eta array honen benetan uste izan dugu nolabaiteko egitura zirkular gisa, baina zer eragilea erabiltzen dugu C wraparound sort hori egin ahal izateko? [Inaudible ikaslearen erantzuna] >> modulo operadorea. Txiki gogaikarriak izango litzateke bidez pentsatu behar nola egin wraparound egin duzu, baina egin izan dugu, eta pertsona jarriz lerroa aurrean erabili genezake, baina hau buru aldagaia linea benetako buru benetan besterik ez dugu gogoratzen. Zer izanez gero, horren ordez, gure helburua, azken finean, nahiz eta, Zenbakiak bilatzeko, egin dugun bezala, hemen Anita duten etapa, baina benetan nahi dugu mundu horiek guztiak? Sofistikazio gehiago array baino aukera ematen nahi dugu nahi dugulako, datu egitura dinamikoki hazten gaitasuna. Baina ez dugu nahi, zerbait jotzea, adierazi dugun Lehenengo hitzaldia izan zen ez da optimoa algoritmo bat, bilaketa lineal. Bihurtzen da hori, hain zuzen ere, lortu edo, gutxienez, etengabeko denbora itxi, beraz Anita bezalako norbait, konfiguratzen ez bada, bere datuak egitura lotutako zerrenda bat izango da, pila bat ez da, ez da ilara batean, ezin izan du, hain zuzen ere, etorri datuak egitura bat bilatzeko bere gauzak, nahiz eta hitz, ez bakarrik zenbakiak, zer denbora konstante deitu dugu. Eta, hain zuzen ere, aurrera begira, klase honetan psets bat da, ia beti spellchecker bat ezartzeko, horren bidez ematen diogu berriro 150.000 English hitz batzuk eta helburua da horiek kargatu memoria sartu eta azkar formularioa galderei erantzun ahal izango Hitz hau idatzita dagoela? Eta benetan litzateke zurrupatu izan 150.000 hitz guztietan barrena, batetik bestera joateko duten erantzun. Baina, hain zuzen ere, ikusi behar dugu, denbora oso-oso azkar dugu. Eta gauzatzeko zerbait hash taula bat izeneko parte hartzea da, eta nahiz eta hasiera batean hash taula bat izeneko gauza hau da, joan gaitezen lortzeko horiek super azkar erantzun aldiz, bihurtzen da, hain zuzen ere, arazo bat da. Izeneko-berriro gauza hau ezartzeko orduan, egiten ari naiz berriro. Bakarra nago hemen. Berau izeneko gauza hau gauzatzeko denbora hash taula bat, erabaki bat egin behar dugu. Nola big behar gauza hau benetan? Eta zenbakiak txertatu hash taula batean hasten gara, nola gorde modu bat, hala nola, ditu gara itzuli bezain laster genuen hauek? Baina ikusiko dugu aurretik, galdera hau luzea guztion urtebetetzea klase nahiko germane da izango. Bihurtzen da gela honetan, lortu dugu, batzuk ehun pertsona, odds beraz, gutako bi urtebetetzea bera nahiko altua da, ziur aski. Zer bada ez ziren bakarrik gurekin 40 gela honetan? Zer dira bi pertsona urtebetetzea bera izatea odds? [Ikasleak]% 50 baino gehiago. Bai,% 50 baino gehiago. Izan ere, nahiz eta ekarri dut taula bat. -Eta bihurtzen da, hau da, benetan besterik ez Sneak preview ez da soilik 58 gela honetan, 2 probabilitatea gurekin urtebetetzea bera izatea da izugarri altua da, ia% 100, eta hori minik Gurekin sorta oso bat sor asteazkenean. Dela esan zuen, dezagun adjourn hemen. Asteazkenean ikusiko dugu. [Txalo] [CS50.TV]