1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Java 6] 2 00:00:02,000 --> 00:00:04,000 [David J. Malan] [Universiteti i Harvardit] 3 00:00:04,000 --> 00:00:08,000 [Kjo është CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:12,000 >> Kjo është CS50, dhe ky është fillimi i javës 6, 5 00:00:12,000 --> 00:00:16,000 kështu që një çift i veglave të reja janë tani në dispozicion për ju për të përfituar nga, 6 00:00:16,000 --> 00:00:19,000 e para e cila është quajtur CS50 Style. 7 00:00:19,000 --> 00:00:22,000 Shanset janë në qoftë se ju jeni si mua apo ndonjë prej shokëve të mësimdhënies, 8 00:00:22,000 --> 00:00:26,000 ju ndoshta keni parë një program të cilit stil duket një diçka të vogël si kjo. 9 00:00:26,000 --> 00:00:30,000 Ndoshta ju filloni prerë disa qoshet vonë gjatë natës, ose ju do të merren me atë më vonë, 10 00:00:30,000 --> 00:00:32,000 dhe pastaj një ose TF CA vjen mbi gjatë orarit të punës. 11 00:00:32,000 --> 00:00:34,000 Atëherë kjo është e vështirë për ne për të lexuar. 12 00:00:34,000 --> 00:00:38,000 E pra, ky kod është syntactically saktë, dhe ajo do të hartojë, dhe kjo vërtetë do të kandidojë. 13 00:00:38,000 --> 00:00:40,000 Por kjo nuk është aspak një 5 për stilin. 14 00:00:40,000 --> 00:00:45,000 >> Por tani, në qoftë se ne do të shkojmë në këtë directory këtu- 15 00:00:45,000 --> 00:00:48,000 dhe të vëreni se unë kam conditions2.c- 16 00:00:48,000 --> 00:00:55,000 dhe unë të drejtuar këtë komandë të re, style50, në këtë conditions2.c fotografi, Enter, 17 00:00:55,000 --> 00:00:57,000 vini re se kjo është informuar mua se ai ka qenë i stilizuar. 18 00:00:57,000 --> 00:01:00,000 Gedit vënë re se skeda është ndryshuar në disk, 19 00:01:00,000 --> 00:01:08,000 dhe në qoftë se unë klikoni ringarkoni, të gjitha problemet tuaja janë të automatizuar tani. 20 00:01:08,000 --> 00:01:15,000 [Duartrokitje] 21 00:01:15,000 --> 00:01:17,000 Kjo është një nga gjërat që kemi bërë këtë fundjavë. 22 00:01:17,000 --> 00:01:20,000 Të kuptojë se kjo është e papërsosur, sepse ka disa kodi 23 00:01:20,000 --> 00:01:23,000 se ai thjesht nuk do të jetë në gjendje të stilizoj të përkryer, 24 00:01:23,000 --> 00:01:26,000 por të realizuar këtë është tani një mjet që ju mund të përfitojnë nga 25 00:01:26,000 --> 00:01:33,000 në qoftë se vetëm për të ndreq disa prej teksteve më të errantly vendosur kaçurrel dhe si. 26 00:01:33,000 --> 00:01:36,000 >> Por më bindës tani është CS50 Kontrollo. 27 00:01:36,000 --> 00:01:39,000 Me CS50 kontrolloni, ju në fakt mund të kryejnë testet e njëjta saktësisë 28 00:01:39,000 --> 00:01:42,000 në kodin tuaj se miqtë mësimore janë në gjendje për të. 29 00:01:42,000 --> 00:01:44,000 Kjo është një linjë komande të shërbimeve që vjen tani në aplikim 30 00:01:44,000 --> 00:01:46,000 sa më shpejt që ju të bëni një update50 si per 31 00:01:46,000 --> 00:01:49,000 pset 4 specifikimet, dhe ta përdorni atë në thelb si kjo. 32 00:01:49,000 --> 00:01:51,000 Ju drejtuar check50 komandës. 33 00:01:51,000 --> 00:01:56,000 Pastaj ju të kalojë në një argument command line, ose më në përgjithësi njihet si një switch ose një flamur. 34 00:01:56,000 --> 00:01:58,000 Në përgjithësi, gjërat që kanë hyphens janë quajtur një kaloni 35 00:01:58,000 --> 00:02:02,000 në një program command line, ashtu-c specifikon 36 00:02:02,000 --> 00:02:04,000 kontrollet që ju dëshironi për të kandiduar. 37 00:02:04,000 --> 00:02:07,000 >> Testet që ju dëshironi për të kandiduar janë të identifikohet në mënyrë unike nga ky varg, 38 00:02:07,000 --> 00:02:10,000 2012/pset4/resize. 39 00:02:10,000 --> 00:02:13,000 Me fjalë të tjera, kjo është vetëm një varg arbitrar, por unike 40 00:02:13,000 --> 00:02:18,000 që ne i përdorim për të identifikuar teste unike 4 pset e korrektësi. 41 00:02:18,000 --> 00:02:21,000 Dhe pastaj ju specifikoni një listë të ndara hapësirë ​​e dosjeve që ju doni të ngarkoni 42 00:02:21,000 --> 00:02:24,000 të CS50 Kontrollo për analizë. 43 00:02:24,000 --> 00:02:29,000 Për shembull, nëse unë shkoj në zgjidhjen e mia këtu për resize.c- 44 00:02:29,000 --> 00:02:31,000 më lejoni të hapur një terminal të madh dritare 45 00:02:31,000 --> 00:02:42,000 dhe unë të shkojnë përpara dhe të drejtuar, le të themi check50-c 2012/pset4/resize, 46 00:02:42,000 --> 00:02:46,000 dhe pastaj të shkojnë përpara dhe të përcaktojë emrat e dosjeve, 47 00:02:46,000 --> 00:02:49,000 resize.c, dhe pastaj goditi Enter, ajo fasha, 48 00:02:49,000 --> 00:02:53,000 Ngarkimet ajo, ajo kontrollon, dhe unë vetëm ka dështuar një bandë e tërë e testeve. 49 00:02:53,000 --> 00:02:59,000 Një në të kuqe në të majtë të lartë dhe thotë se resize.c PKM ekzistojnë. 50 00:02:59,000 --> 00:03:01,000 Kjo ishte test. Kjo ishte pyetja e kemi kërkuar. 51 00:03:01,000 --> 00:03:04,000 Dhe kjo është e pakënaqur, sepse përgjigja ishte e rreme. 52 00:03:04,000 --> 00:03:08,000 Teksti i bardhë poshtë ai thotë se pritet bmp.h të ekzistojë, dhe se është thjesht faji im. 53 00:03:08,000 --> 00:03:11,000 Kam harruar të ngarkoni atë, kështu që unë duhet të ngarkoni fotografi të dy, 54 00:03:11,000 --> 00:03:14,000 resize.c dhe bmp.h. 55 00:03:14,000 --> 00:03:17,000 Por tani të gjithë e vërejnë analizat e tjera janë në të verdhë për shkak se ata nuk kanë drejtuar, 56 00:03:17,000 --> 00:03:21,000 dhe kështu fytyra smiley është vertikale, sepse ai është i lumtur as as i trishtuar, 57 00:03:21,000 --> 00:03:25,000 por ne kemi për të korrigjuar këtë çështje në të kuqe para se ato kontrolle të tjera do të kandidojë. 58 00:03:25,000 --> 00:03:27,000 >> Më lejoni të rregullojmë këtë. 59 00:03:27,000 --> 00:03:30,000 Më lejoni të zoom jashtë dhe kjo përsëritje, këtë herë me bmp.h edhe 60 00:03:30,000 --> 00:03:34,000 në rreshtin e komandave, Enter, dhe tani nëse të gjitha shkon mirë, 61 00:03:34,000 --> 00:03:38,000 ajo do të kontrolluar dhe pastaj të kthehen një rezultat i-mbajnë frymën tuaj- 62 00:03:38,000 --> 00:03:42,000 të gjitha jeshile, që do të thotë unë jam duke bërë me të vërtetë mirë në pset 4 deri më tani. 63 00:03:42,000 --> 00:03:44,000 Ju mund ta shikoni dhe konkludoj nga teksti përshkrues këtu 64 00:03:44,000 --> 00:03:47,000 pikërisht ajo që është ne testuar. 65 00:03:47,000 --> 00:03:49,000 Ne testuar parë nuk ekzistojnë fotografi? 66 00:03:49,000 --> 00:03:51,000 Ne pastaj testuar bën përpilojnë resize.c? 67 00:03:51,000 --> 00:03:58,000 Pastaj ne nuk e testuar atë ndrysho një 1x1-pixel BMP, kur n, faktori resize, është 1. 68 00:03:58,000 --> 00:04:01,000 Tani, në qoftë se ju nuk kanë idenë se çfarë është n, ju do të sapo ju të zhyten në pset 4, 69 00:04:01,000 --> 00:04:04,000 por që thjesht është një mendje e shëndoshë kontrolloni për t'u siguruar që ju nuk jeni duke ndryshuar 70 00:04:04,000 --> 00:04:08,000 një imazh në të gjitha nëse faktori resize është 1. 71 00:04:08,000 --> 00:04:14,000 Nëse, nga ana tjetër, ajo madhësinë e një pixel në një PKM 1x1 1x1 2x2 pixel me korrekte 72 00:04:14,000 --> 00:04:19,000 kur n është 2, atëherë në mënyrë të ngjashme, minave formon përputhje me rrethanat. 73 00:04:19,000 --> 00:04:22,000 >> Me pak fjalë, kjo është menduar për të, një, të marrë kalimit gishtat 74 00:04:22,000 --> 00:04:25,000 nga ekuacioni të drejtë para se të dorëzojnë pset tuaj. 75 00:04:25,000 --> 00:04:28,000 Ju do të dini saktësisht se çfarë TF juaj së shpejti do të dini 76 00:04:28,000 --> 00:04:30,000 kur ju shkoni në lidhje me dorëzimin e disa nga këto grupe problemesh, 77 00:04:30,000 --> 00:04:34,000 dhe motivimi pedagogjike është me të vërtetë për të vënë 78 00:04:34,000 --> 00:04:37,000 mundësi në frontin e ju në mënyrë që kur ju e dini a priori 79 00:04:37,000 --> 00:04:39,000 se ka bugs në kodin tuaj dhe teste që nuk janë duke kaluar, 80 00:04:39,000 --> 00:04:43,000 ju mund të vënë në më shumë kohë efektive deri përpara për të zgjidhur këto probleme 81 00:04:43,000 --> 00:04:45,000 në vend se të humbni pikë, të merrni reagime nga TF tuaj, 82 00:04:45,000 --> 00:04:48,000 dhe pastaj të shkojnë, "Ahh," si unë duhet të ketë realizuar artistikisht se jashtë. 83 00:04:48,000 --> 00:04:50,000 Tani të paktën ka një mjet për t'ju ndihmuar të gjeni se. 84 00:04:50,000 --> 00:04:52,000 Kjo nuk do të vinte në dukje ku bug është, por ajo do të ju them 85 00:04:52,000 --> 00:04:54,000 çfarë është simptomatike e saj. 86 00:04:54,000 --> 00:04:57,000 >> Tani e kuptojnë se testet nuk janë domosdoshmërisht shteruese. 87 00:04:57,000 --> 00:04:59,000 Vetëm për shkak se ju të merrni një ekran të plotë të gjelbër fytyrat smiley 88 00:04:59,000 --> 00:05:02,000 nuk do të thotë kodi juaj është e përkryer, por kjo do të thotë 89 00:05:02,000 --> 00:05:06,000 se ajo ka kaluar teste të caktuara të përshkruara nga spec. 90 00:05:06,000 --> 00:05:08,000 Ndonjëherë ne nuk do të lëshojë çeqe. 91 00:05:08,000 --> 00:05:10,000 Për shembull, roman policor, një nga aspektet e pset 4, 92 00:05:10,000 --> 00:05:15,000 është lloj zhgënjyese, nëse ju japim 93 00:05:15,000 --> 00:05:18,000 përgjigje si për atë që është, dhe ka një numër mënyrash për të zbuluar 94 00:05:18,000 --> 00:05:21,000 kush është personi në atë zhurmë e kuqe. 95 00:05:21,000 --> 00:05:24,000 Spekulim gjithmonë do të specifikojë në të ardhmen për pset vazhdim 5 96 00:05:24,000 --> 00:05:26,000 ajo kontrollon ekzistojnë për ju. 97 00:05:26,000 --> 00:05:28,000 Ju do të vëreni se kjo URL e bardhë në pjesën e poshtme. 98 00:05:28,000 --> 00:05:30,000 Tani për tani, kjo është vetëm prodhimi diagnostike. 99 00:05:30,000 --> 00:05:33,000 Nëse ju vizitoni këtë URL, ju do të merrni një bandë e tërë e çmendur, mesazhe të fshehta 100 00:05:33,000 --> 00:05:36,000 se ju jeni të mirëpritur për të parë përmes, por kjo është kryesisht për stafin 101 00:05:36,000 --> 00:05:41,000 kështu që ne mund të diagnostikojnë dhe debug mete në check50 vetë. 102 00:05:41,000 --> 00:05:46,000 >> Pa zhurmë, le të shkojë në të ku ne u ndërpre. 103 00:05:46,000 --> 00:05:48,000 CS50 bibliotekë morëm për të dhënë për disa javë, 104 00:05:48,000 --> 00:05:52,000 por pastaj javën e kaluar, kemi filluar lëkurë përsëri një nga shtresat e saj. 105 00:05:52,000 --> 00:05:55,000 Ne kemi filluar duke lënë mënjanë vargun në favor të asaj që në vend? 106 00:05:55,000 --> 00:05:57,000 [Studentët] Char. 107 00:05:57,000 --> 00:05:59,000 * Char, e cila ka qenë një char * gjithë këtë kohë, 108 00:05:59,000 --> 00:06:03,000 por tani ne nuk duhet të pretendojë se kjo është një e vërtetë të dhënave string lloji. 109 00:06:03,000 --> 00:06:06,000 Përkundrazi, kjo është një sinonim i terezi për * char, 110 00:06:06,000 --> 00:06:09,000 dhe një vargu është një sekuencë e karaktereve, 111 00:06:09,000 --> 00:06:14,000 kështu që pse nuk ka kuptim për të përfaqësuar vargjet si char * S? 112 00:06:14,000 --> 00:06:20,000 Çfarë bën një * char përfaqësojnë në kuadër të këtij koncepti të një varg? 113 00:06:20,000 --> 00:06:23,000 Po. >> [Student] Karakteri i parë. 114 00:06:23,000 --> 00:06:25,000 Mirë, karakteri i parë, por jo mjaft karakteri i parë. 115 00:06:25,000 --> 00:06:27,000 Kjo është e-Studentet [] Adresa. 116 00:06:27,000 --> 00:06:29,000 Mirë, adresa e karakter e parë. 117 00:06:29,000 --> 00:06:33,000 Të gjitha që është e nevojshme për të përfaqësuar një varg në kujtesën e një kompjuteri 118 00:06:33,000 --> 00:06:36,000 është vetëm adresa unike e bajt saj të parë. 119 00:06:36,000 --> 00:06:38,000 Ti as nuk duhet të dinë se sa kohë është 120 00:06:38,000 --> 00:06:42,000 sepse si mund të kuptoj se nga dinamike? 121 00:06:42,000 --> 00:06:44,000 [Student] Gjatësia String. 122 00:06:44,000 --> 00:06:48,000 Ju mund të telefononi gjatësinë varg, të shkëlqyer, por si e bën punën length string? 123 00:06:48,000 --> 00:06:50,000 Çfarë e bën atë të bëjë? Po. 124 00:06:50,000 --> 00:06:52,000 [Student] Do të mbajë deri sa ju të merrni karakterin null. 125 00:06:52,000 --> 00:06:54,000 Po, pikërisht, ajo vetëm iterates me një për lak, ndërsa loop, 126 00:06:54,000 --> 00:06:57,000 çfarëdo nga * në fund, dhe fundi është përfaqësuara 127 00:06:57,000 --> 00:07:01,000 nga \ 0, e ashtuquajtura karakter nul, nul, 128 00:07:01,000 --> 00:07:05,000 nuk duhet të ngatërrohet me null, e cila është një akrep, 129 00:07:05,000 --> 00:07:07,000 i cili do të dalë në bisedë përsëri sot. 130 00:07:07,000 --> 00:07:11,000 >> Ne peeled përsëri një shtresë e GetInt, dhe pastaj ne mori një vështrim në getString, 131 00:07:11,000 --> 00:07:14,000 dhe kujtojnë se të dyja këto funksione, apo me të vërtetë, 132 00:07:14,000 --> 00:07:18,000 GetString, ishte duke përdorur një funksion të caktuar 133 00:07:18,000 --> 00:07:21,000 që në fakt analizimi, që është, lexuar apo analizuar, input të përdoruesit. 134 00:07:21,000 --> 00:07:25,000 Dhe çfarë ishte se funksioni i ri? 135 00:07:25,000 --> 00:07:27,000 Scanf ose sscanf. Ajo në fakt vjen në një shije të ndryshme. 136 00:07:27,000 --> 00:07:31,000 Ka scanf, ka sscanf, ka fscanf. 137 00:07:31,000 --> 00:07:35,000 Për tani, megjithatë, le të përqëndrohet në një më të lehtë të ilustruar, 138 00:07:35,000 --> 00:07:38,000 dhe më lejoni të shkoj përpara dhe të hapur deri në aplikim 139 00:07:38,000 --> 00:07:41,000 një fotografi si kjo, scanf1.c. 140 00:07:41,000 --> 00:07:43,000 Ky është një program super të thjeshtë, 141 00:07:43,000 --> 00:07:46,000 por që bën diçka që ne kurrë nuk kam bërë 142 00:07:46,000 --> 00:07:48,000 pa ndihmën e bibliotekës CS50. 143 00:07:48,000 --> 00:07:51,000 Kjo merr një int nga një përdorues. Si funksionon kjo gjë? 144 00:07:51,000 --> 00:07:53,000 E pra, në përputhje 16 atje, 145 00:07:53,000 --> 00:07:56,000 vini re se ne deklarojë një int x quajtur, dhe në këtë moment në histori, 146 00:07:56,000 --> 00:07:58,000 çfarë është vlera e x? 147 00:07:58,000 --> 00:08:00,000 [Përgjigja e padëgjueshme Student] 148 00:08:00,000 --> 00:08:02,000 [David M.] E drejta, kush e di, disa vlera mbeturinat potencialisht, kështu që në 17, ne vetëm tregoni përdorues 149 00:08:02,000 --> 00:08:06,000 më jepni një numër, ju lutem, dhe hap 18 është vendi ku ajo merr interesante. 150 00:08:06,000 --> 00:08:11,000 Scanf duket për të marrë hua një ide nga printf në atë që përdor këto kode format në thonjëza. 151 00:08:11,000 --> 00:08:13,000 % D është sigurisht një numër decimal. 152 00:08:13,000 --> 00:08:21,000 Por pse jam unë duke kaluar në & X në vend të vetëm x? 153 00:08:21,000 --> 00:08:24,000 Ish është e saktë. Po. 154 00:08:24,000 --> 00:08:26,000 [Përgjigja e padëgjueshme Student] 155 00:08:26,000 --> 00:08:31,000 Pikërisht, në qoftë se qëllimi i këtij programi, si GetInt funksion vetë, 156 00:08:31,000 --> 00:08:34,000 është për të marrë një int nga përdorues që unë mund të kalojë funksione 157 00:08:34,000 --> 00:08:38,000 të gjithë variablat që unë dua, por në qoftë se unë nuk e kalojnë duke iu referuar 158 00:08:38,000 --> 00:08:41,000 ose adresën ose nga treguesin, të gjitha sinonime për qëllime sotme, 159 00:08:41,000 --> 00:08:46,000 pastaj se funksioni nuk ka aftësinë për të ndryshuar përmbajtjen e atij variabli. 160 00:08:46,000 --> 00:08:49,000 Kjo do të kalojë në një kopje të vetëm si në versionin buggy të swap-it 161 00:08:49,000 --> 00:08:51,000 se ne kemi biseduar për disa herë tani. 162 00:08:51,000 --> 00:08:54,000 >> Por në vend, duke bërë dhe x, unë jam vërtetë kalon në çfarë? 163 00:08:54,000 --> 00:08:57,000 [Student] Adresa. >> Adresën e x. 164 00:08:57,000 --> 00:09:01,000 Është si tërhequr një hartë për funksionin quajtur scanf dhe duke thënë këtu, 165 00:09:01,000 --> 00:09:04,000 këto janë drejtime në një copë të kujtesës në kompjuter 166 00:09:04,000 --> 00:09:07,000 që ju mund të shkoni të ruajë disa integer in 167 00:09:07,000 --> 00:09:10,000 Në mënyrë që sscanf tani bëni që 168 00:09:10,000 --> 00:09:13,000 atë operatori, ajo pjesë e sintaksës është ajo do të duhet të përdorin 169 00:09:13,000 --> 00:09:19,000 edhe pse ne nuk mund ta shohim atë, sepse dikush tjetër ka shkruar këtë funksion? 170 00:09:19,000 --> 00:09:21,000 Me fjalë të tjera - çfarë është ajo? 171 00:09:21,000 --> 00:09:23,000 [Student] X lexuar. 172 00:09:23,000 --> 00:09:27,000 Nuk do të jetë disa lexim, por vetëm në lidhje me x këtu. 173 00:09:27,000 --> 00:09:30,000 Nëse scanf është duke u kaluar adresën e x, 174 00:09:30,000 --> 00:09:35,000 syntactically, çfarë operatori është i detyruar të ekzistojë diku 175 00:09:35,000 --> 00:09:38,000 brenda e zbatimit scanf në mënyrë që scanf 176 00:09:38,000 --> 00:09:42,000 në fakt mund të shkruani një numër 2 në atë adresë? 177 00:09:42,000 --> 00:09:44,000 Yeah, kështu që *. 178 00:09:44,000 --> 00:09:47,000 Kujtojnë se * është operatori ynë dereference, i cili në thelb do të thotë të shkojnë atje. 179 00:09:47,000 --> 00:09:50,000 >> Pasi të keni dorëzuar një adresë, siç është rasti këtu, 180 00:09:50,000 --> 00:09:53,000 scanf është ndoshta, nëse ne fakt shikuar përreth saj burimor kod- 181 00:09:53,000 --> 00:09:59,000 është duke bërë * x ose e barabartë me të vërtetë të shkuar në atë adresë dhe të vënë disa vlera atje. 182 00:09:59,000 --> 00:10:02,000 Tani, si për mënyrën se si scanf merr input nga tastiera, 183 00:10:02,000 --> 00:10:04,000 ne do të tundë duart tona për sot. 184 00:10:04,000 --> 00:10:07,000 Vetëm të supozojmë se sistemi operativ lejon sscanf për të folur 185 00:10:07,000 --> 00:10:11,000 në tastierën e përdoruesit, por në këtë pikë tani në linjë 19, 186 00:10:11,000 --> 00:10:14,000 kur ne thjesht të shtypura nga x, ajo duket të jetë rasti 187 00:10:14,000 --> 00:10:17,000 scanf se ka vënë në një int x. 188 00:10:17,000 --> 00:10:19,000 Kjo është pikërisht se si scanf punon, dhe kujtojnë javën e kaluar 189 00:10:19,000 --> 00:10:25,000 kjo është pikërisht se si getString dhe GetInt dhe familja e saj e tjera të funksioneve 190 00:10:25,000 --> 00:10:28,000 përfundimisht punon, megjithëse me grindje të lehtë si sscanf, 191 00:10:28,000 --> 00:10:31,000 që do të thotë të skanoni një varg në vend të tastierës. 192 00:10:31,000 --> 00:10:33,000 Por le të marrin një vështrim në një grindje të vogël të kësaj. 193 00:10:33,000 --> 00:10:37,000 Në scanf2, unë në fakt dehur. 194 00:10:37,000 --> 00:10:42,000 Çfarë është e gabuar dhe unë do të fsheh koment që shpjegon sa- 195 00:10:42,000 --> 00:10:47,000 çfarë është e gabuar me këtë program, version 2? 196 00:10:47,000 --> 00:10:55,000 Të jetë aq teknike të jetë e mundur këtë kohë. 197 00:10:55,000 --> 00:10:57,000 Ajo duket goxha e mirë. 198 00:10:57,000 --> 00:11:03,000 Është prerë bukur, por- 199 00:11:03,000 --> 00:11:07,000 rregull, si për le të krasitësh atë poshtë për pyetje të shkurtra? 200 00:11:07,000 --> 00:11:17,000 Line 16. Çfarë është duke bërë linjës 16 në anglisht të saktë, por teknike? 201 00:11:17,000 --> 00:11:20,000 Getting pak vështirë. Po, Michael. 202 00:11:20,000 --> 00:11:25,000 [Student] Është vënë në shkronjën e parë të një varg. 203 00:11:25,000 --> 00:11:27,000 >> Mirë, afër. Më lejoni të shkulje se pak pak. 204 00:11:27,000 --> 00:11:33,000 Treguar në letrën e parë të një varg, ju jeni deklaruar një tampon ndryshueshme quajtur 205 00:11:33,000 --> 00:11:36,000 që do të pikës tek adresën parë të një vargut, 206 00:11:36,000 --> 00:11:39,000 ose më mirë, që do të tregojë në mënyrë më specifike në një char. 207 00:11:39,000 --> 00:11:42,000 Njoftim kjo nuk është në të vërtetë vënë kudo, sepse nuk ka asnjë operator detyrë. 208 00:11:42,000 --> 00:11:46,000 Nuk ka asnjë shenjë të barabartë, kështu që të gjithë ne jemi duke bërë është alokimin e quajtur buffer ndryshueshme. 209 00:11:46,000 --> 00:11:49,000 Ajo ndodh të jetë 32 bit sepse kjo është një tregues, 210 00:11:49,000 --> 00:11:52,000 dhe përmbajtjen e tampon duket përfundimisht 211 00:11:52,000 --> 00:11:57,000 do të përmbajë një adresë të një char, por tani për tani, çfarë përmban tampon? 212 00:11:57,000 --> 00:11:59,000 Vetëm disa fals, kush e di, disa vlera plehrash, 213 00:11:59,000 --> 00:12:03,000 sepse ne nuk kemi nisur në mënyrë eksplicite atë, kështu që ne nuk duhet të supozojmë asgjë. 214 00:12:03,000 --> 00:12:06,000 Mirë, kështu që tani është 17-linja çfarë do të vijë 17 të bëni? 215 00:12:06,000 --> 00:12:08,000 Ndoshta kjo do të ngrohtë këtë ide. 216 00:12:08,000 --> 00:12:10,000 Ajo printon një varg, apo jo? 217 00:12:10,000 --> 00:12:12,000 Ajo printon String ju lutem. 218 00:12:12,000 --> 00:12:15,000 >> Linja 18 është lloj i njohur tashmë në atë që ne vetëm pashë një grindje të kësaj 219 00:12:15,000 --> 00:12:18,000 por me një kod tjetër format, kështu që në linjë 18, 220 00:12:18,000 --> 00:12:23,000 ne jemi duke thënë scanf këtu është adresa e një copë e kujtesës. 221 00:12:23,000 --> 00:12:27,000 Unë dua që ju të telefononi në një varg, kuptohet nga% s, 222 00:12:27,000 --> 00:12:32,000 por problemi është se ne nuk kemi bërë disa gjëra këtu. 223 00:12:32,000 --> 00:12:35,000 Çfarë është një nga problemet? 224 00:12:35,000 --> 00:12:38,000 [Student] Ajo është duke u përpjekur për të dereference një tregues null. 225 00:12:38,000 --> 00:12:41,000 Mirë, pointers ose thjesht ndryshe null panjohur. 226 00:12:41,000 --> 00:12:45,000 Ju jeni dorëzimin scanf një adresë, por ju vetëm tha se një moment më parë 227 00:12:45,000 --> 00:12:49,000 se kjo është adresa disa vlera mbeturina sepse ne fakt nuk caktojë atë për asgjë, 228 00:12:49,000 --> 00:12:53,000 dhe kështu ju jeni duke thënë scanf efektive shkoni vënë një varg ketu, 229 00:12:53,000 --> 00:12:56,000 por ne nuk e dimë se ku këtu ende është, 230 00:12:56,000 --> 00:12:59,000 kështu që ne nuk kemi ndarë në fakt kujtesë për. 231 00:12:59,000 --> 00:13:03,000 Për më tepër, ajo gjithashtu nuk jeni edhe i thënë scanf? 232 00:13:03,000 --> 00:13:06,000 Supozoni se kjo ishte një copë e kujtesës, dhe kjo nuk ishte një vlerë e mbeturinave, 233 00:13:06,000 --> 00:13:09,000 por ju nuk jeni akoma thënë scanf diçka të rëndësishme. 234 00:13:09,000 --> 00:13:12,000 [Student] Ku ai në fakt është simbol. 235 00:13:12,000 --> 00:13:15,000 Simbol, kështu që në këtë rast, kjo është në rregull. 236 00:13:15,000 --> 00:13:18,000 Sepse tampon është deklaruar tashmë si një tregues 237 00:13:18,000 --> 00:13:22,000 me copë * e sintaksës, ne nuk kemi nevojë për të përdorur ampersand 238 00:13:22,000 --> 00:13:25,000 sepse ajo është tashmë një adresë, por unë mendoj se kam dëgjuar këtu. 239 00:13:25,000 --> 00:13:27,000 [Student] Sa e madhe është ajo? 240 00:13:27,000 --> 00:13:29,000 Mirë, ne nuk jemi duke u thënë sa e madhe kjo scanf tampon është, 241 00:13:29,000 --> 00:13:32,000 që do të thotë edhe në qoftë se tampon ishin një tregues, 242 00:13:32,000 --> 00:13:35,000 ne jemi duke thënë scanf, vënë një varg ketu, 243 00:13:35,000 --> 00:13:38,000 por këtu mund të jetë 2 bytes, ajo mund të jetë 10 bytes, ajo mund të jetë një megabyte. 244 00:13:38,000 --> 00:13:41,000 Scanf ka asnjë ide, dhe për shkak se kjo është një copë e kujtesës 245 00:13:41,000 --> 00:13:43,000 me sa duket, kjo nuk është një varg ende. 246 00:13:43,000 --> 00:13:48,000 Kjo është vetëm një varg herë që ju shkruani karakteret dhe një \ 0 deri në atë copë të kujtesës. 247 00:13:48,000 --> 00:13:51,000 Tani ajo është vetëm disa copë e kujtesës. 248 00:13:51,000 --> 00:13:55,000 Scanf nuk do të dinë se kur do të ndalet me shkrim në atë adresë. 249 00:13:55,000 --> 00:13:59,000 >> Nëse ju kujtohet disa shembuj në të kaluarën, ku kam shtypur rastësisht në tastierë 250 00:13:59,000 --> 00:14:03,000 duke u përpjekur për të fryhen një tampon, dhe kemi biseduar të premten rreth pikërisht këtë. 251 00:14:03,000 --> 00:14:07,000 Nëse një kundërshtar disi injekton në programin tuaj një fjalë shumë më të madhe 252 00:14:07,000 --> 00:14:10,000 ose fjali ose fraza atëherë keni qenë duke pritur ju mund muar 253 00:14:10,000 --> 00:14:13,000 një copë e kujtesës, e cila mund të ketë pasoja të këqija, 254 00:14:13,000 --> 00:14:15,000 si të marrë përsipër të gjithë programin e vetë. 255 00:14:15,000 --> 00:14:17,000 Ne kemi nevojë për të rregulluar këtë disi. 256 00:14:17,000 --> 00:14:20,000 Më lejoni të zoom jashtë dhe të shkojë në versionin 3 të këtij programi. 257 00:14:20,000 --> 00:14:22,000 Kjo është një pak më të mirë. 258 00:14:22,000 --> 00:14:24,000 Në këtë version, të vini re ndryshimin. 259 00:14:24,000 --> 00:14:27,000 Në linjë 16, unë jam përsëri shpalljen e një tampon ndryshueshme quajtur, 260 00:14:27,000 --> 00:14:29,000 por çfarë është ajo tani? 261 00:14:29,000 --> 00:14:33,000 Është një grup prej 16 karaktere. 262 00:14:33,000 --> 00:14:36,000 Kjo është e mirë, sepse kjo do të thotë unë mund të them tani scanf 263 00:14:36,000 --> 00:14:39,000 këtu është një copë aktuale e kujtesës. 264 00:14:39,000 --> 00:14:42,000 Ju mund të pothuajse të mendoj për vargjeve si pointers tani, 265 00:14:42,000 --> 00:14:44,000 edhe pse ata nuk janë në të vërtetë ekuivalente. 266 00:14:44,000 --> 00:14:47,000 Ata do të sillen ndryshe në kontekste të ndryshme. 267 00:14:47,000 --> 00:14:50,000 Por kjo është sigurisht rasti që tampon është referenca 268 00:14:50,000 --> 00:14:53,000 16 chars puqur, sepse kjo është ajo që një grup është 269 00:14:53,000 --> 00:14:55,000 dhe ka qenë për disa javë tani. 270 00:14:55,000 --> 00:14:59,000 >> Ja, unë jam i thënë scanf këtu është një copë e kujtesës. 271 00:14:59,000 --> 00:15:01,000 Këtë herë, ajo është në fakt një copë e kujtesës, 272 00:15:01,000 --> 00:15:07,000 por pse është ky program ende shfrytëzueshëm? 273 00:15:07,000 --> 00:15:11,000 Çfarë është e gabuar ende? 274 00:15:11,000 --> 00:15:14,000 Unë e kam thënë më jepni 16 bytes por- 275 00:15:14,000 --> 00:15:16,000 [Student] Çka nëse ata të shkruani më shumë se 16? 276 00:15:16,000 --> 00:15:20,000 Pikërisht, çfarë nëse përdoruesi lloje në 17 shkronja ose karakteret 1700? 277 00:15:20,000 --> 00:15:23,000 Në fakt, le të shohim nëse ne nuk mund të udhëtim mbi këtë gabim tani. 278 00:15:23,000 --> 00:15:25,000 Është më mirë, por nuk është i përsosur. 279 00:15:25,000 --> 00:15:28,000 Më lejoni të shkojnë përpara dhe të bëjë të kandidojë scanf3 për të hartuar këtë program. 280 00:15:28,000 --> 00:15:34,000 Më lejoni të drejtuar scanf3, String ju lutem: hello, dhe ne duket të jetë në rregull. 281 00:15:34,000 --> 00:15:37,000 Më lejoni të provoni pak e një të gjatë, hello there. 282 00:15:37,000 --> 00:15:42,000 Mirë, le të mos hello there si jeni sot, Enter. 283 00:15:42,000 --> 00:15:54,000 Getting lloj fat këtu, le të thonë hello si jeni atje. 284 00:15:54,000 --> 00:15:56,000 Damn atë. 285 00:15:56,000 --> 00:16:03,000 Mirë, kështu që kemi marrë me fat. Le të shohim nëse ne nuk mund ta rregullojmë këtë. 286 00:16:03,000 --> 00:16:06,000 Jo, ajo nuk do të më lejoni të kopje. 287 00:16:06,000 --> 00:16:09,000 Le të provoni këtë përsëri. 288 00:16:09,000 --> 00:16:12,000 Të gjithë të drejtë, të dalë nga. 289 00:16:12,000 --> 00:16:20,000 Ne do të shohim se sa kohë unë mund të pretendojë të përqëndrohet, ndërsa ende duke bërë këtë. 290 00:16:20,000 --> 00:16:23,000 Damn atë. Kjo është mjaft e përshtatshme, në të vërtetë. 291 00:16:23,000 --> 00:16:26,000 Nuk shkojmë. 292 00:16:26,000 --> 00:16:30,000 Pika bërë. 293 00:16:30,000 --> 00:16:34,000 >> Kjo, edhe pse ai gjithashtu e turpshme është, ajo është gjithashtu një nga burimet e konfuzionit të madh 294 00:16:34,000 --> 00:16:38,000 kur shkrim programe që kanë të mete, sepse ata manifestohen 295 00:16:38,000 --> 00:16:40,000 vetëm një herë në një kohë ndonjëherë. 296 00:16:40,000 --> 00:16:43,000 Realiteti është se edhe në qoftë se kodi juaj është prishur plotësisht, 297 00:16:43,000 --> 00:16:46,000 ajo mund të jetë vetëm thyer plotësisht një herë në një kohë 298 00:16:46,000 --> 00:16:49,000 sepse ndonjëherë, në thelb ajo që ndodh është se ndan të sistemit operativ 299 00:16:49,000 --> 00:16:52,000 një kujtim pak më shumë se ju në të vërtetë nevojë për çfarëdo arsye, 300 00:16:52,000 --> 00:16:57,000 dhe kështu askush tjetër është duke përdorur kujtesën tuaj menjëherë pas copë prej 16 karaktereve, 301 00:16:57,000 --> 00:17:01,000 kështu që nëse ju shkoni në 17, 18, 19, çfarëdo qoftë, kjo nuk është e tillë një punë e madhe. 302 00:17:01,000 --> 00:17:04,000 Tani, kompjuter, edhe nëse ajo nuk ka përplasje në atë pikë, 303 00:17:04,000 --> 00:17:09,000 eventualisht mund të përdorni numrin byte 17 ose 18 ose 19 për diçka tjetër, 304 00:17:09,000 --> 00:17:14,000 në të cilën pikë të dhënat tuaja që ju vënë atje, edhe pse tepër e gjatë, 305 00:17:14,000 --> 00:17:18,000 do të marrë potencialisht overwritten nga ndonjë funksion tjetër. 306 00:17:18,000 --> 00:17:21,000 Kjo nuk është domosdoshmërisht do të mbetet i paprekur, 307 00:17:21,000 --> 00:17:23,000 por kjo jo domosdoshmërisht do të shkaktojë një defekt seg. 308 00:17:23,000 --> 00:17:26,000 Por në këtë rast, unë më në fund dhënë karaktere të mjaftueshme 309 00:17:26,000 --> 00:17:29,000 që unë në thelb tejkaluar segment time të kujtesës, dhe bam, 310 00:17:29,000 --> 00:17:33,000 sistemi operativ i tha: "Na vjen keq, kjo nuk është e mirë, faji segmentimit." 311 00:17:33,000 --> 00:17:38,000 >> Dhe tani le të shohim nëse ajo mbetet këtu në time directory- 312 00:17:38,000 --> 00:17:40,000 vëreni se unë kam këtë fotografi këtu, core. 313 00:17:40,000 --> 00:17:42,000 Vini re se kjo është quajtur përsëri një hale thelbësore. 314 00:17:42,000 --> 00:17:46,000 Kjo është në thelb një file që përmban përmbajtjen e kujtesës programit tuaj 315 00:17:46,000 --> 00:17:48,000 në pikën në të cilën ai rrëzua, 316 00:17:48,000 --> 00:17:51,000 dhe vetëm për të provoni një shembull pak këtu më lejoni të shkoj në këtu 317 00:17:51,000 --> 00:17:57,000 dhe të drejtuar mbi gdb scanf3 dhe pastaj specifikoni një argument të tretë të quajtur thelbësore, 318 00:17:57,000 --> 00:18:01,000 dhe vini re këtu se në qoftë se unë lista kodin, 319 00:18:01,000 --> 00:18:06,000 ne do të jetë në gjendje si zakonisht me gdb për të filluar duke ecur nëpër këtë program, 320 00:18:06,000 --> 00:18:10,000 dhe unë mund të kandidojë atë dhe sa më shpejt që unë goditi-si me komandë hap në GDB- 321 00:18:10,000 --> 00:18:13,000 sa më shpejt që unë goditi linjë potencialisht buggy pas shtypni në një varg të madh, 322 00:18:13,000 --> 00:18:16,000 Unë do të jetë në gjendje që në fakt identifikojnë atë këtu. 323 00:18:16,000 --> 00:18:19,000 Më shumë për këtë, edhe pse, në seksionin në drejtim të deponive kryesore 324 00:18:19,000 --> 00:18:22,000 dhe si mënyrë që ju në fakt mund të thes rreth në brendësi të deponisë kryesore 325 00:18:22,000 --> 00:18:27,000 dhe shiko në atë linjë programi dështoi ju. 326 00:18:27,000 --> 00:18:32,000 Ndonjë pyetje atëherë mbi pointers dhe në adresat? 327 00:18:32,000 --> 00:18:36,000 Sepse sot e tutje, ne do të fillojë të marrë për të dhënë se këto gjëra ekzistojnë 328 00:18:36,000 --> 00:18:40,000 dhe ne e dimë saktësisht se çfarë janë ata. 329 00:18:40,000 --> 00:18:42,000 Po. 330 00:18:42,000 --> 00:18:46,000 >> [Student] Si të vijë ju nuk keni për të vënë një simbol tjetër për pjesën- 331 00:18:46,000 --> 00:18:48,000 Mirë pyetje. 332 00:18:48,000 --> 00:18:51,000 Si të vijë unë nuk kanë për të vënë një simbol tjetër për grup karakter si unë e bëri më parë 333 00:18:51,000 --> 00:18:53,000 me shumicën e shembujve tanë? 334 00:18:53,000 --> 00:18:55,000 Përgjigja e shkurtër është vargjeve janë pak të veçantë. 335 00:18:55,000 --> 00:18:59,000 Ju mund të pothuajse të mendoj se një tampon si të vërtetë të qenit një adresë, 336 00:18:59,000 --> 00:19:03,000 dhe kjo ndodh pikërisht kështu që të jetë rasti që sheshi simbol kllapa 337 00:19:03,000 --> 00:19:06,000 është një lehtësi në mënyrë që ne mund të shkojnë në kllapa 0 kllapa, 1, 338 00:19:06,000 --> 00:19:10,000 2 kllapa, pa pasur nevojë për të përdorur simbol *. 339 00:19:10,000 --> 00:19:13,000 Kjo është pak e një gënjeshtër e bardhë, sepse vargjeve dhe pointers 340 00:19:13,000 --> 00:19:17,000 janë, në fakt, një pak të ndryshme, por ata mund të shpesh, por jo gjithmonë të përdoret interchangeably. 341 00:19:17,000 --> 00:19:21,000 Me pak fjalë, kur një funksion është duke pritur një tregues për një copë e kujtesës, 342 00:19:21,000 --> 00:19:24,000 ju mund ta kalojë atë një adresë që është kthyer nga malloc, 343 00:19:24,000 --> 00:19:29,000 dhe ne do të shohim malloc përsëri para se të gjatë, ose ju mund të kalojë atë emrin e një sërë. 344 00:19:29,000 --> 00:19:32,000 Ju nuk keni për të bërë simbol me vargjeve, sepse ata janë tashmë 345 00:19:32,000 --> 00:19:34,000 thelb si adresat. 346 00:19:34,000 --> 00:19:36,000 Kjo është një përjashtim. 347 00:19:36,000 --> 00:19:39,000 Kllapa katrore bëjnë ato të veçantë. 348 00:19:39,000 --> 00:19:41,000 >> Ju mund të vendosni një simbol tjetër për tampon? 349 00:19:41,000 --> 00:19:43,000 Jo në këtë rast. 350 00:19:43,000 --> 00:19:46,000 Kjo nuk do të punojë, sepse, përsëri, në këtë rast këndi 351 00:19:46,000 --> 00:19:49,000 ku vargjeve nuk janë mjaft të vërtetë adresat. 352 00:19:49,000 --> 00:19:54,000 Por ndoshta ne do të vijnë përsëri në se para se të gjatë me shembuj të tjerë. 353 00:19:54,000 --> 00:19:56,000 Le të përpiqen për të zgjidhur një problem këtu. 354 00:19:56,000 --> 00:20:00,000 Ne kemi një strukturë të dhënave që ne kemi qenë duke përdorur për disa kohë e njohur si një grup. 355 00:20:00,000 --> 00:20:02,000 Rasti në pikën, kjo është ajo që ne vetëm kishte. 356 00:20:02,000 --> 00:20:04,000 Por kanë disa vargjeve upsides dhe dobësi. 357 00:20:04,000 --> 00:20:06,000 Vargjeve janë pse e bukur? 358 00:20:06,000 --> 00:20:11,000 Çfarë është një gjë që ju pëlqen, deri në atë masë që ju pëlqen vargjeve-rreth vargjeve? 359 00:20:11,000 --> 00:20:13,000 Çfarë është e përshtatshme për ta? Çfarë është bindëse? 360 00:20:13,000 --> 00:20:18,000 Pse ne kemi prezantuar ato në vendin e parë? 361 00:20:18,000 --> 00:20:20,000 Po. 362 00:20:20,000 --> 00:20:27,000 [Student] Ata mund të ruajë një shumë të të dhënave, dhe ju nuk duhet të përdorni një gjë të tërë. 363 00:20:27,000 --> 00:20:29,000 Ju mund të përdorni një seksion. 364 00:20:29,000 --> 00:20:32,000 Mirë, me një koleksion që ju mund të ruajë një shumë të të dhënave, 365 00:20:32,000 --> 00:20:35,000 dhe ju nuk domosdoshmërisht duhet të përdorin të gjitha e saj, kështu që ju mund overallocate, 366 00:20:35,000 --> 00:20:39,000 i cili mund të jetë i përshtatshëm në qoftë se ju nuk e dini paraprakisht se sa diçka për të presin. 367 00:20:39,000 --> 00:20:41,000 >> GetString është një shembull i përkryer. 368 00:20:41,000 --> 00:20:44,000 GetString, shkruar nga ne, nuk ka asnjë ide se sa chars të presin, 369 00:20:44,000 --> 00:20:48,000 mënyrë fakti që ne mund të ndajnë chunks e kujtesës puqur është e mirë. 370 00:20:48,000 --> 00:20:51,000 Vargjeve të zgjidhur një problem ne pamë një javë më parë tani 371 00:20:51,000 --> 00:20:54,000 ku kodi juaj fillon të bie në diçka shumë të dobët projektuar. 372 00:20:54,000 --> 00:20:57,000 Kujtojnë se kam krijuar një strukturë studentore quajtur David, 373 00:20:57,000 --> 00:21:00,000 dhe pastaj që ishte në të vërtetë një alternativë, edhe pse, 374 00:21:00,000 --> 00:21:04,000 për të pasur një emër ndryshueshme quajtur dhe një ndryshore tjetër të quajtur, unë mendoj, shtëpi, 375 00:21:04,000 --> 00:21:08,000 dhe një tjetër ndryshueshme quajtur ID, sepse në këtë histori unë atëherë të kërkuar për të futur diçka tjetër 376 00:21:08,000 --> 00:21:11,000 si Rob në program, kështu që atëherë kam vendosur prisni një minutë, 377 00:21:11,000 --> 00:21:13,000 Unë kam nevojë për të riemërtoni këto ndryshore. 378 00:21:13,000 --> 00:21:16,000 Le të thërrasë mine name1, ID1, house1. 379 00:21:16,000 --> 00:21:20,000 Le të thërrasë të Rob name2, house2, ID2. 380 00:21:20,000 --> 00:21:22,000 Por atëherë, pritni një minutë, ajo që për Tommy? 381 00:21:22,000 --> 00:21:24,000 Pastaj kemi pasur tre variablave më shumë. 382 00:21:24,000 --> 00:21:27,000 Ne kemi prezantuar dikë tjetër, katër grupe të variablave. 383 00:21:27,000 --> 00:21:30,000 Bota filloi të marrë çrregullt shumë shpejt, 384 00:21:30,000 --> 00:21:33,000 kështu që ne kemi prezantuar structs, dhe çfarë është bindëse në lidhje me një struct? 385 00:21:33,000 --> 00:21:39,000 Çfarë bën një struct C të ju lejojnë të bëni? 386 00:21:39,000 --> 00:21:42,000 Është me të vërtetë vështirë sot. 387 00:21:42,000 --> 00:21:44,000 Çfarë? >> [Përgjigja padëgjueshme Student] 388 00:21:44,000 --> 00:21:47,000 Yeah, konkretisht, typedef ju lejon të krijoni një lloj të ri të dhënave, 389 00:21:47,000 --> 00:21:51,000 dhe struct, struct fjalen, ju lejon të encapsulate 390 00:21:51,000 --> 00:21:54,000 copë lidhje konceptuale e të dhënave së bashku 391 00:21:54,000 --> 00:21:56,000 dhe pas kësaj ata e quajnë diçka si një student. 392 00:21:56,000 --> 00:21:58,000 >> Kjo ishte e mirë, sepse tani ne mund të modelojnë 393 00:21:58,000 --> 00:22:03,000 lloj shumë më të qëndrueshme konceptualisht nocioni i një studenti në një variabël 394 00:22:03,000 --> 00:22:07,000 në vend se në mënyrë arbitrare ka një për një varg, një për një ID, dhe kështu me radhë. 395 00:22:07,000 --> 00:22:10,000 Vargjeve janë të bukur, sepse ata na lejojnë për të filluar pastrimin kodin tonë. 396 00:22:10,000 --> 00:22:13,000 Por çfarë është një downside tani e një grup? 397 00:22:13,000 --> 00:22:15,000 Çfarë nuk mund të bëni ju? Po. 398 00:22:15,000 --> 00:22:17,000 [Student] Ju duhet të dini se sa e madhe është. 399 00:22:17,000 --> 00:22:19,000 Ju duhet të dini se sa e madhe është, kështu që kjo është lloj i një dhimbje. 400 00:22:19,000 --> 00:22:21,000 Ata prej jush me përvojë programimit paraprake e di se në shumë gjuhë, 401 00:22:21,000 --> 00:22:24,000 si Java, ju mund të kërkoni një copë e kujtesës, veçanërisht një grup, 402 00:22:24,000 --> 00:22:28,000 sa i madh je ti, me një gjatësi, pronës, në mënyrë që të flasin, dhe kjo është me të vërtetë i përshtatshëm. 403 00:22:28,000 --> 00:22:32,000 Në C, ju nuk mund të telefononi edhe strlen në një grup gjenerike 404 00:22:32,000 --> 00:22:35,000 sepse strlen, si fjala nënkupton, është vetëm për vargjet, 405 00:22:35,000 --> 00:22:39,000 dhe ju mund të kuptoj se gjatësinë e një varg për shkak të kësaj konvente njeriut 406 00:22:39,000 --> 00:22:43,000 të paturit e një \ 0, por një koleksion, më përgjithësisht, është vetëm një copë e kujtesës. 407 00:22:43,000 --> 00:22:46,000 Në qoftë se kjo është një grup i ints, nuk do të jetë një karakter të veçantë 408 00:22:46,000 --> 00:22:48,000 në fund duke pritur për ju. 409 00:22:48,000 --> 00:22:50,000 Ju duhet të mbani mend gjatësinë e një sërë. 410 00:22:50,000 --> 00:22:54,000 Një tjetër dobësitë e një sërë ngriti kokën e saj në getString vetë. 411 00:22:54,000 --> 00:22:59,000 Çfarë është një tjetër dobësitë e një grup? 412 00:22:59,000 --> 00:23:01,000 Zotëri, vetëm ju dhe mua sot. 413 00:23:01,000 --> 00:23:04,000 [Përgjigja e padëgjueshme Studenti] >> Kjo është ajo? 414 00:23:04,000 --> 00:23:06,000 Është shpallur në rafte. 415 00:23:06,000 --> 00:23:09,000 Mirë, deklaroi në rafte. Pse nuk ju pëlqen kjo? 416 00:23:09,000 --> 00:23:13,000 [Student] Për shkak se ajo merr ripërdoren. 417 00:23:13,000 --> 00:23:15,000 Ajo merr ripërdoren. 418 00:23:15,000 --> 00:23:18,000 Mirë, në qoftë se ju përdorni një rrjet të kujtesës, 419 00:23:18,000 --> 00:23:21,000 ju nuk mund, për shembull, ta kthejë atë, sepse kjo është në rafte. 420 00:23:21,000 --> 00:23:23,000 Mirë, kjo është një disavantazh. 421 00:23:23,000 --> 00:23:25,000 Dhe si për një tjetër me një grup? 422 00:23:25,000 --> 00:23:28,000 Sapo ju të caktojë atë, ju jeni lloj i dehur nëse keni nevojë për më shumë hapësirë 423 00:23:28,000 --> 00:23:30,000 se ajo ka array. 424 00:23:30,000 --> 00:23:34,000 >> Pastaj ne kemi prezantuar,, malloc kujtojnë, e cila na dha mundësinë për të alokuar dinamike kujtesës. 425 00:23:34,000 --> 00:23:37,000 Por çfarë nëse ne u përpoq një botë krejt të ndryshme? 426 00:23:37,000 --> 00:23:40,000 Çfarë ndodh nëse ne të kërkuar për të zgjidhur disa nga këto probleme 427 00:23:40,000 --> 00:23:45,000 kështu që ne vend-im stilolaps ka rënë në gjumë këtu- 428 00:23:45,000 --> 00:23:51,000 çka nëse ne në vend të kërkuar për të në thelb të krijuar një botë që nuk është më si kjo? 429 00:23:51,000 --> 00:23:56,000 Ky është një grup, dhe, natyrisht, ky lloj i përkeqësohet pasi ne goditi fundin e array, 430 00:23:56,000 --> 00:24:00,000 dhe unë tani nuk kanë hapësirë ​​për një tjetër numër i plotë ose në një tjetër karakter. 431 00:24:00,000 --> 00:24:03,000 Çfarë ndodh nëse ne lloj preemptively thonë mirë, pse nuk kemi të pushojnë 432 00:24:03,000 --> 00:24:07,000 kjo kërkesë që të gjitha këto chunks e kujtesës të jetë i afërt për të kthyer prapa, 433 00:24:07,000 --> 00:24:10,000 dhe pse jo, kur kam nevojë për një int ose një char, 434 00:24:10,000 --> 00:24:12,000 vetëm më jep hapësirë ​​për një prej tyre? 435 00:24:12,000 --> 00:24:14,000 Dhe kur kam nevojë për një tjetër, më jepni një tjetër hapësirë, 436 00:24:14,000 --> 00:24:16,000 dhe kur kam nevojë për një tjetër, më jep mua një hapësirë. 437 00:24:16,000 --> 00:24:19,000 Avantazhi i cili tani është se nëse dikush tjetër 438 00:24:19,000 --> 00:24:21,000 merr memorie gjatë këtu, ndonjë gjë e madhe. 439 00:24:21,000 --> 00:24:25,000 Unë do të marrë këtë copë shtesë e kujtesës këtu dhe pastaj kjo. 440 00:24:25,000 --> 00:24:28,000 >> Tani, këtu Kapur vetëm është se kjo pothuajse ndjehet si kam 441 00:24:28,000 --> 00:24:30,000 një bandë e tërë e variablave të ndryshme. 442 00:24:30,000 --> 00:24:33,000 Kjo ndjehet si pesë variablave të ndryshme potencialisht. 443 00:24:33,000 --> 00:24:36,000 Por çfarë nëse ne vjedhin një ide nga vargjet 444 00:24:36,000 --> 00:24:41,000 ku ne disi lidhin këto gjëra së bashku konceptualisht, dhe çfarë nëse unë e bëri këtë? 445 00:24:41,000 --> 00:24:44,000 Kjo është shigjetë e mia shumë të dobët tërhequr. 446 00:24:44,000 --> 00:24:46,000 Por mendoj se secili prej këtyre chunks të memories 447 00:24:46,000 --> 00:24:52,000 vuri në dukje tjetër, dhe ky djalë, i cili nuk ka asnjë vëlla në të drejtën e tij, 448 00:24:52,000 --> 00:24:54,000 nuk ka shigjetë të tillë. 449 00:24:54,000 --> 00:24:56,000 Kjo është në fakt ajo që quhet një listë e lidhur. 450 00:24:56,000 --> 00:25:00,000 Kjo është një strukturë e re të dhënat që na lejon të akordojë një copë e kujtesës, 451 00:25:00,000 --> 00:25:03,000 pastaj një tjetër, pastaj një tjetër, pastaj një tjetër, çdo herë që ne duam 452 00:25:03,000 --> 00:25:07,000 gjatë një programi, dhe ne kujtojmë se ata janë të gjithë disi të lidhura 453 00:25:07,000 --> 00:25:11,000 nga fjalë për fjalë chaining ata së bashku, dhe ne e bëmë që pictorially këtu me një shigjetë. 454 00:25:11,000 --> 00:25:15,000 Por në kod, çfarë do të jetë mekanizmi nëpërmjet të cilit ju mund të lidheni disi, 455 00:25:15,000 --> 00:25:20,000 pothuajse si Scratch, një copë në një copë? 456 00:25:20,000 --> 00:25:22,000 Ne mund të përdorim një tregues, apo jo? 457 00:25:22,000 --> 00:25:25,000 Sepse me të vërtetë arrow qe po ndodh nga sheshi lartë të majtë, 458 00:25:25,000 --> 00:25:31,000 ky djalë këtu për këtë, mund të përmbajë brenda këtij sheshi 459 00:25:31,000 --> 00:25:34,000 jo vetëm disa ints, jo vetëm disa char, por ajo në qoftë se unë në fakt ndahen 460 00:25:34,000 --> 00:25:37,000 një hapësirë ​​pak ekstra kështu që tani, 461 00:25:37,000 --> 00:25:41,000 secili prej chunks e mia të kujtesës, edhe pse kjo do të kushtojë mua, 462 00:25:41,000 --> 00:25:45,000 tani duket pak më shumë drejtkëndëshe, ku një nga chunks e kujtesës 463 00:25:45,000 --> 00:25:47,000 është përdorur për një numër, si numri 1, 464 00:25:47,000 --> 00:25:50,000 dhe pastaj, nëse ky djalë ruan numrin 2, 465 00:25:50,000 --> 00:25:52,000 kjo copë tjetër e kujtesës është përdorur për një shigjetë, 466 00:25:52,000 --> 00:25:54,000 ose më konkretisht, një akrep. 467 00:25:54,000 --> 00:25:59,000 Dhe mendoj unë ruajtur numrin 3 mbi këtu, ndërsa unë të përdorni këtë për pikë në atë djalë, 468 00:25:59,000 --> 00:26:02,000 dhe tani ky djalë, le të supozojmë se unë vetëm dua tre chunks të tilla të kujtesës. 469 00:26:02,000 --> 00:26:05,000 Unë do të tërheqë një vijë përmes se, duke treguar null. 470 00:26:05,000 --> 00:26:07,000 Nuk ka asnjë karakter shtesë. 471 00:26:07,000 --> 00:26:10,000 >> Në të vërtetë, kjo është se si ne mund të shkoni në lidhje me zbatimin e 472 00:26:10,000 --> 00:26:12,000 diçka që quhet një listë e lidhur. 473 00:26:12,000 --> 00:26:18,000 Një listë e lidhur është një strukturë e re të dhënave, dhe kjo është një hap drejt 474 00:26:18,000 --> 00:26:21,000 Strukturat shumë njohës të dhënave që fillojnë për të zgjidhur problemet 475 00:26:21,000 --> 00:26:23,000 përgjatë vijave të Facebook-lloj problemesh dhe Google tipit problemet 476 00:26:23,000 --> 00:26:26,000 ku ju keni të dhëna të mëdha grupe, dhe kjo nuk shkurton atë 477 00:26:26,000 --> 00:26:29,000 për të ruajtur gjithçka pranë njëri tjetrit dhe të përdorin diçka si kërkim linear 478 00:26:29,000 --> 00:26:31,000 apo edhe diçka si kërkim binar. 479 00:26:31,000 --> 00:26:33,000 Ju dëshironi herë edhe më të mirë running. 480 00:26:33,000 --> 00:26:37,000 Në fakt, një nga Grails Shenjta ne do të flasim më vonë këtë javë, ose e ardhshme 481 00:26:37,000 --> 00:26:41,000 është një algoritmi të cilit drejtimin Ora është konstante. 482 00:26:41,000 --> 00:26:44,000 Me fjalë të tjera, ajo gjithmonë merr të njëjtën sasi kohe pa marrë parasysh 483 00:26:44,000 --> 00:26:47,000 sa i madh është kontributi, dhe se me të vërtetë do të jetë bindëse, 484 00:26:47,000 --> 00:26:49,000 edhe më shumë se sa diçka logaritmike. 485 00:26:49,000 --> 00:26:51,000 Çfarë është kjo në ekran këtu? 486 00:26:51,000 --> 00:26:55,000 Secili prej rectangles është pikërisht ajo që unë thjesht tërhoqi me dorë. 487 00:26:55,000 --> 00:26:59,000 Por gjëja gjithë rrugës në të majtë është një variabël e veçantë. 488 00:26:59,000 --> 00:27:02,000 Ajo do të jetë një tregues të vetme, sepse një Gotcha 489 00:27:02,000 --> 00:27:04,000 me një listë e lidhur, pasi këto gjëra janë të thirrur, 490 00:27:04,000 --> 00:27:09,000 është që ju keni për të ul receptorin e telefonit në një fund të listës të lidhura. 491 00:27:09,000 --> 00:27:13,000 >> Ashtu si me një varg, ju duhet të dini adresën e char parë. 492 00:27:13,000 --> 00:27:15,000 Marrëveshja njëjtë për listat e lidhura. 493 00:27:15,000 --> 00:27:19,000 Ju duhet të dini adresën e copë e parë e kujtesës 494 00:27:19,000 --> 00:27:25,000 sepse nga atje, ju mund të arrijnë çdo njëri tjetër. 495 00:27:25,000 --> 00:27:27,000 Dobësitë. 496 00:27:27,000 --> 00:27:30,000 Çfarë çmimi jemi duke paguar për këtë shkathtësi të paturit e një dinamike 497 00:27:30,000 --> 00:27:34,000 konsiderueshëm të dhënat e strukturës se në qoftë se ne ndonjëherë nevojë për më shumë memorie, gjobë, 498 00:27:34,000 --> 00:27:37,000 vetëm një pjesë të ndajë më shumë dhe të nxjerrë një tregues nga 499 00:27:37,000 --> 00:27:39,000 e vjetër në bisht të ri të listës? 500 00:27:39,000 --> 00:27:41,000 Po. 501 00:27:41,000 --> 00:27:43,000 [Student] Ajo merr hapësirë ​​rreth dy herë më shumë. 502 00:27:43,000 --> 00:27:45,000 Ajo merr dy herë më shumë hapësirë, kështu që është padyshim një downside, dhe ne kemi parë këtë 503 00:27:45,000 --> 00:27:48,000 tradeoff para mes kohës dhe hapësirës dhe fleksibilitet 504 00:27:48,000 --> 00:27:51,000 ku deri tani, ne nuk kemi nevojë për 32 bit për secilin prej këtyre numrave. 505 00:27:51,000 --> 00:27:57,000 Ne me të vërtetë nevojë për 64, 32 dhe për numrin 32 për treguesin. 506 00:27:57,000 --> 00:27:59,000 Por hej, kam 2 gigabajt të RAM. 507 00:27:59,000 --> 00:28:02,000 Shtimi i një tjetër 32 bit këtu dhe këtu nuk duket se i madh i një marrëveshje. 508 00:28:02,000 --> 00:28:05,000 Por, për grupe të mëdha të të dhënave, kjo definitivisht shton deri në dy herë më shumë fjalë për fjalë. 509 00:28:05,000 --> 00:28:09,000 Çfarë është një tjetër downside tani, ose çfarë funksion do të heqim dorë, 510 00:28:09,000 --> 00:28:12,000 nëse ne përfaqësojmë listat e gjëra me një listë të lidhura dhe jo një grup? 511 00:28:12,000 --> 00:28:14,000 [Student] Ju nuk mund të kaloj nëpër atë prapa. 512 00:28:14,000 --> 00:28:16,000 Ju nuk mund të kaloj nëpër atë prapa, kështu që ju jeni lloj i dehur nëse ju jeni duke ecur 513 00:28:16,000 --> 00:28:19,000 nga e majta në të djathtë duke përdorur një për lak ose një lak, ndërsa 514 00:28:19,000 --> 00:28:21,000 dhe pastaj ju kuptojnë, "Oh, unë dua të kthehem në fillim të listës." 515 00:28:21,000 --> 00:28:26,000 Ju nuk mund të për shkak se këto pointers shkojnë vetëm nga e majta në të djathtë si shigjetat tregojnë. 516 00:28:26,000 --> 00:28:29,000 >> Tani, ju mund të mbani mend fillimin e listës me një ndryshore tjetër, 517 00:28:29,000 --> 00:28:31,000 por kjo është një kompleksiteti të mbani në mend. 518 00:28:31,000 --> 00:28:35,000 Një grup, pa marrë parasysh se sa larg ju shkoni, ju mund gjithmonë të bëjë minus, minus, minus, minus 519 00:28:35,000 --> 00:28:37,000 dhe të kthehemi prej nga keni ardhur. 520 00:28:37,000 --> 00:28:40,000 Çfarë është një tjetër downside këtu? Po. 521 00:28:40,000 --> 00:28:43,000 [Pyetja padëgjueshme Student] 522 00:28:43,000 --> 00:28:47,000 Ju mund të, kështu që ju keni në fakt propozoi vetëm një strukturë të të dhënave që quhet një listë e lidhur dyfish, 523 00:28:47,000 --> 00:28:50,000 dhe në të vërtetë, ju do të shtoni një tjetër tregues për secilin nga këto rectangles 524 00:28:50,000 --> 00:28:53,000 që shkon në drejtim tjetër, me kokë e të cilit 525 00:28:53,000 --> 00:28:55,000 është tani ju mund të kaloj mbrapa dhe me radhë, 526 00:28:55,000 --> 00:28:59,000 Dobësitë e cila është tani ju jeni duke përdorur tri herë si kujtim sa kemi përdorur për të 527 00:28:59,000 --> 00:29:04,000 dhe gjithashtu duke shtuar kompleksitetit në drejtim të kodit ju duhet të shkruani për të marrë atë të drejtë. 528 00:29:04,000 --> 00:29:08,000 Por këto janë të gjitha ndoshta tradeoffs shumë të arsyeshme, nëse kthimi është më e rëndësishme. 529 00:29:08,000 --> 00:29:10,000 Po. 530 00:29:10,000 --> 00:29:12,000 [Student] Ju gjithashtu nuk mund të ketë një listë 2D lidhura. 531 00:29:12,000 --> 00:29:16,000 Mirë, ju nuk mund të vërtetë kanë një listë 2D lidhur. 532 00:29:16,000 --> 00:29:18,000 Ju mund të. Kjo nuk është aq e lehtë sa një grup. 533 00:29:18,000 --> 00:29:21,000 Si një grup, ju bëni kllapa hapur, simboli i mbyllur, simboli i hapur, i mbyllur, kllapa 534 00:29:21,000 --> 00:29:23,000 dhe ju merrni një strukturë 2-dimensionale. 535 00:29:23,000 --> 00:29:26,000 Ju mund të zbatojë një listë të 2-dimensionale të lidhur 536 00:29:26,000 --> 00:29:29,000 në qoftë se ju bëni shtesë si ju propozoi-një tregues tretë për secilën nga këto gjëra, 537 00:29:29,000 --> 00:29:34,000 dhe në qoftë se ju mendoni për një tjetër listë të vijnë në ju stil 3D 538 00:29:34,000 --> 00:29:40,000 nga ekrani për të gjithë ne, e cila është vetëm një zinxhir i disa lloj. 539 00:29:40,000 --> 00:29:45,000 Ne mund ta bëjë këtë, por kjo nuk është aq e thjeshtë sa shtypja kllapa e hapur, kllapa katrore. Po. 540 00:29:45,000 --> 00:29:48,000 [Pyetja padëgjueshme Student] 541 00:29:48,000 --> 00:29:50,000 Mirë, kështu që kjo është një rreng vërtetë. 542 00:29:50,000 --> 00:29:54,000 >> Këto algoritme që ne kemi pined gjatë, si oh, kërkimin binar, 543 00:29:54,000 --> 00:29:57,000 ju mund të kërkoni një rrjet të numrave në bord 544 00:29:57,000 --> 00:30:01,000 apo një libër telefoni në mënyrë shumë më shpejt në qoftë se ju përdorni përça dhe sundo 545 00:30:01,000 --> 00:30:05,000 dhe një algorithm kërko binar, por kërko binar kërkuar dy supozime. 546 00:30:05,000 --> 00:30:09,000 Një, se të dhënat u renditura. 547 00:30:09,000 --> 00:30:11,000 Tani, ne mund të supozohet ta mbajmë këtë renditura, 548 00:30:11,000 --> 00:30:14,000 kështu që ndoshta kjo nuk është një shqetësim, por kërko binar edhe supozohet 549 00:30:14,000 --> 00:30:18,000 se keni pasur qasje të rastit në listën e numrave, 550 00:30:18,000 --> 00:30:21,000 dhe një sërë ju lejon të keni qasje të rastit, dhe me qasje të rastit, 551 00:30:21,000 --> 00:30:24,000 Unë do të thotë në qoftë se ju jeni të dhënë një koleksion, sa kohë nuk është marrë ju 552 00:30:24,000 --> 00:30:26,000 për të marrë në kllapa 0? 553 00:30:26,000 --> 00:30:29,000 Një operacion, ju vetëm përdorni [0] dhe ju jeni të drejtë atje. 554 00:30:29,000 --> 00:30:33,000 Sa hapa nuk është marrë për të marrë në vend të 10? 555 00:30:33,000 --> 00:30:36,000 Një hap, ju thjesht shkoni në [10] dhe ju jeni atje. 556 00:30:36,000 --> 00:30:40,000 Nga ana tjetër, si mund të shkoj në numër të plotë 10 në listën e lidhur? 557 00:30:40,000 --> 00:30:42,000 Ju duhet të fillojë në fillim, sepse ju jeni vetëm duke kujtuar 558 00:30:42,000 --> 00:30:45,000 fillimi i një liste të lidhura, ashtu si një varg po kujtohet 559 00:30:45,000 --> 00:30:48,000 nga char adresën e saj të parë, dhe për të gjetur se int 10 560 00:30:48,000 --> 00:30:53,000 ose që karakteri 10 në një varg, ju duhet të kërkoni të gjithë gjë damn. 561 00:30:53,000 --> 00:30:55,000 >> Përsëri, ne nuk jemi zgjidhjen të gjitha problemet tona. 562 00:30:55,000 --> 00:31:00,000 Ne jemi duke futur të reja, por me të vërtetë varet nga ajo që ju jeni duke u përpjekur për të hartuar për të. 563 00:31:00,000 --> 00:31:04,000 Në kushtet e zbatimit të kësaj, ne mund të huazoni një ide nga ajo strukture studentore. 564 00:31:04,000 --> 00:31:07,000 Sintaksa është shumë e ngjashme, me përjashtim tani, ideja është pak më abstrakte 565 00:31:07,000 --> 00:31:09,000 se shtëpi dhe emrin dhe ID. 566 00:31:09,000 --> 00:31:13,000 Por unë propozoj që ne mund të kemi një strukturë të dhënave në C 567 00:31:13,000 --> 00:31:17,000 që quhet nyje, si fjala e fundit në rrëshqitje sugjeron, 568 00:31:17,000 --> 00:31:21,000 brendësi të një nyje, dhe nje nyje është vetëm një enë gjenerik në shkencën kompjuterike. 569 00:31:21,000 --> 00:31:25,000 Është tërhequr zakonisht si një rreth ose një katror apo drejtkëndësh siç kemi bërë. 570 00:31:25,000 --> 00:31:27,000 Dhe në këtë strukturë të dhënave, ne kemi një int, N, 571 00:31:27,000 --> 00:31:29,000 kështu që është numri që unë dua për të ruajtur. 572 00:31:29,000 --> 00:31:36,000 Por çfarë është kjo linjë e dytë, struct * nyja e ardhshme? 573 00:31:36,000 --> 00:31:40,000 Pse është kjo e saktë, apo çfarë roli e bën këtë lojë gjë, 574 00:31:40,000 --> 00:31:42,000 edhe pse kjo është pak fshehtë në shikim të parë? 575 00:31:42,000 --> 00:31:44,000 Po. 576 00:31:44,000 --> 00:31:46,000 [Përgjigja e padëgjueshme Student] 577 00:31:46,000 --> 00:31:50,000 Pikërisht, kështu renditjes * e plaçkës se kjo është një tregues i disa lloj. 578 00:31:50,000 --> 00:31:53,000 Emri i këtij treguesi është arbitrare tjetër, 579 00:31:53,000 --> 00:32:00,000 por ne mund të kemi quajtur atë gjë ne duam, por çfarë e bën këtë pikë tregues për? 580 00:32:00,000 --> 00:32:03,000 [Student] Një nyje. >> Pikërisht, kjo tregon për një nyje të tillë. 581 00:32:03,000 --> 00:32:05,000 >> Tani, kjo është lloj i një kuriozitet të C. 582 00:32:05,000 --> 00:32:09,000 Kujtojnë se C është lexuar nga një përpilues krye e deri në fund, e majta në të djathtë, 583 00:32:09,000 --> 00:32:13,000 që do të thotë nëse-kjo është pak e ndryshme nga ajo që ne e bëmë me student. 584 00:32:13,000 --> 00:32:16,000 Kur ne definuar një student, ne fakt nuk e vënë një fjalë atje. 585 00:32:16,000 --> 00:32:18,000 Ajo thjesht tha typedef. 586 00:32:18,000 --> 00:32:20,000 Pastaj kemi pasur int, id emrin string string, shtëpi, 587 00:32:20,000 --> 00:32:23,000 dhe pastaj nxënësi në fund të struct. 588 00:32:23,000 --> 00:32:26,000 Kjo deklaratë është pak më ndryshe, sepse, 589 00:32:26,000 --> 00:32:28,000 përsëri, përpiluesit C është pak memec. 590 00:32:28,000 --> 00:32:30,000 Është vetëm do të lexoni krye e deri në fund, 591 00:32:30,000 --> 00:32:33,000 kështu që nëse ajo arrin të vijë 2 here 592 00:32:33,000 --> 00:32:37,000 ku tjetër është shpallur dhe ajo e sheh, oh, këtu është një ndryshore të quajtur ardhshëm. 593 00:32:37,000 --> 00:32:39,000 Kjo është një tregues për një nyje struct. 594 00:32:39,000 --> 00:32:42,000 Përpiluesit do të kuptojnë se çfarë është një nyje struct? 595 00:32:42,000 --> 00:32:44,000 Unë kurrë nuk kam dëgjuar për këtë gjë përpara, 596 00:32:44,000 --> 00:32:47,000 sepse nyja fjala nuk mund të duket ndryshe 597 00:32:47,000 --> 00:32:49,000 deri në fund, kështu që nuk është kjo tepricë. 598 00:32:49,000 --> 00:32:53,000 Ju keni për të thënë nyje struct këtu, të cilat ju mund pastaj të shkurtojë më vonë 599 00:32:53,000 --> 00:32:56,000 në sajë të typedef poshtë këtu, por kjo është për shkak se 600 00:32:56,000 --> 00:33:02,000 ne jemi referenca strukturën vetë brenda të strukturës. 601 00:33:02,000 --> 00:33:05,000 Kjo është një Gotcha atje. 602 00:33:05,000 --> 00:33:07,000 >> Disa probleme interesante do të lindin. 603 00:33:07,000 --> 00:33:09,000 Ne kemi marrë një listë të numrave. Si nuk kemi futur në të? 604 00:33:09,000 --> 00:33:11,000 Si nuk kemi kërkoni atë? Si nuk kemi fshini prej saj? 605 00:33:11,000 --> 00:33:13,000 Sidomos tani që ne kemi për të menaxhuar të gjitha këto pointers. 606 00:33:13,000 --> 00:33:15,000 Keni menduar pointers ishin lloj i mendje-bending 607 00:33:15,000 --> 00:33:17,000 kur ju kishte njëri prej tyre vetëm duke u përpjekur për të lexuar një int të. 608 00:33:17,000 --> 00:33:20,000 Tani ne kemi për të manipuluar me vlerë një listë të tërë së. 609 00:33:20,000 --> 00:33:22,000 Pse nuk kemi marrë 5-minutësh pushim tonë këtu, dhe pastaj ne do të sjellë 610 00:33:22,000 --> 00:33:34,000 disa folks deri në skenë për të bërë pikërisht këtë. 611 00:33:34,000 --> 00:33:36,000 >> C është e bukur shumë më tepër kur është vepruar jashtë. 612 00:33:36,000 --> 00:33:39,000 Kush do të vërtetë donte të jetë i pari? 613 00:33:39,000 --> 00:33:41,000 Mirë, eja lart. Ju jeni parë. 614 00:33:41,000 --> 00:33:44,000 Kush do të donte të jetë 9? Mirë, 9. 615 00:33:44,000 --> 00:33:46,000 Si rreth 9? 17? 616 00:33:46,000 --> 00:33:51,000 Një klikë pak këtu. 22 dhe 26 në atë rreshtin e parë. 617 00:33:51,000 --> 00:33:53,000 Dhe pastaj si për dikë atje duke u vuri në. 618 00:33:53,000 --> 00:33:57,000 Ju jeni 34. Mirë, 34 vjeç, të vijë në dorë. 619 00:33:57,000 --> 00:33:59,000 Së pari është atje. Mirë, të gjithë katër të ju djema. 620 00:33:59,000 --> 00:34:01,000 Dhe kush nuk themi për 9? 621 00:34:01,000 --> 00:34:04,000 Kush është 9 ynë? 622 00:34:04,000 --> 00:34:07,000 Që me të vërtetë dëshiron të jetë 9? Të gjithë të drejtë, vijnë në, të jetë 9. 623 00:34:07,000 --> 00:34:10,000 Këtu ne do të shkojmë. 624 00:34:10,000 --> 00:34:13,000 34, ne do të takohemi atje. 625 00:34:13,000 --> 00:34:17,000 Pjesa e parë është të bëjë vetë duket si kjo. 626 00:34:17,000 --> 00:34:21,000 26, 22, 17, mirë. 627 00:34:21,000 --> 00:34:25,000 Nëse ju mund të qëndrojë jashtë në anën, sepse ne jemi duke shkuar për malloc ju në një moment. 628 00:34:25,000 --> 00:34:29,000 >> Mirë, mirë. 629 00:34:29,000 --> 00:34:32,000 Mirë, i shkëlqyer, kështu që le të kërkojë disa pyetje këtu. 630 00:34:32,000 --> 00:34:34,000 Dhe në fakt, çfarë është emri juaj? >> Anita. 631 00:34:34,000 --> 00:34:37,000 Anita, në rregull, eja këtu. 632 00:34:37,000 --> 00:34:41,000 Anita do të na ndihmojë lloj të zgjidhur një pyetje mjaft të thjeshtë në fillim, 633 00:34:41,000 --> 00:34:44,000 e cila është se si ju të gjeni nëse ose jo një vlerë është në listë? 634 00:34:44,000 --> 00:34:48,000 Tani, vini re se pari, e përfaqësuar këtu nga Lucas, 635 00:34:48,000 --> 00:34:52,000 është pak më ndryshe, dhe kështu copë letër e tij është qëllimisht anash 636 00:34:52,000 --> 00:34:55,000 sepse ajo nuk është mjaft e gjatë dhe nuk merr deri sa copa shumë, 637 00:34:55,000 --> 00:34:58,000 edhe pse teknikisht ai ka të njëjtën madhësi të letrës vetëm ndërrohen. 638 00:34:58,000 --> 00:35:01,000 Por ai është pak më ndryshe në se ai është vetëm 32 bit për një akrep, 639 00:35:01,000 --> 00:35:05,000 dhe të gjithë këta njerëz janë 64 bit, gjysma e të cilave është numri, gjysma e të cilave është një akrep. 640 00:35:05,000 --> 00:35:08,000 Por tregues nuk është përshkruar, kështu që nëse ju djema mund disi awkwardly 641 00:35:08,000 --> 00:35:12,000 përdorin dorën tuaj të majtë për pikë në personin tjetër për ju. 642 00:35:12,000 --> 00:35:14,000 Dhe ju jeni numri 34. Çfarë është emri juaj? 643 00:35:14,000 --> 00:35:16,000 Ari. 644 00:35:16,000 --> 00:35:19,000 Ari, kështu që në fakt, të mbajë letër në dorën tënde të djathtë, dhe dora e majtë shkon drejt poshtë. 645 00:35:19,000 --> 00:35:21,000 Ju përfaqësoni null në të majtë. 646 00:35:21,000 --> 00:35:24,000 >> Tani fotografia jonë njerëzore është shumë e qëndrueshme. 647 00:35:24,000 --> 00:35:26,000 Kjo është në fakt si pointers punojnë. 648 00:35:26,000 --> 00:35:29,000 Dhe në qoftë se ju mund të mbledh lëmsh ​​pak në këtë mënyrë kështu që unë nuk jam në rrugën tuaj. 649 00:35:29,000 --> 00:35:34,000 Anita këtu, të gjetur me numrin 22, 650 00:35:34,000 --> 00:35:40,000 por të marrë një pengesë e jo njerëzit e mbajnë deri në copa letre, 651 00:35:40,000 --> 00:35:43,000 por kjo është një listë, dhe ju vetëm duhet të fillojë me Lucas 652 00:35:43,000 --> 00:35:46,000 sepse ai është fjalë për fjalë pointer parë. 653 00:35:46,000 --> 00:35:51,000 Supozoni se ju vetë jeni një akrep, dhe kështu edhe ju keni mundësinë për pikë në diçka. 654 00:35:51,000 --> 00:35:56,000 Pse nuk ju filloni duke vënë pikërisht ajo Lucas është vënë në? 655 00:35:56,000 --> 00:35:58,000 Mirë, dhe më lejoni të miratojnë këtë, mbi këtu. 656 00:35:58,000 --> 00:36:04,000 Vetëm për hir të diskutimit, më lejoni të tërheqë një faqe bosh këtu. 657 00:36:04,000 --> 00:36:06,000 Si mund të shkruhet emri juaj? >> Anita. 658 00:36:06,000 --> 00:36:08,000 Mirë, Anita. 659 00:36:08,000 --> 00:36:18,000 Le të thonë nyje * anita = Lucas. 660 00:36:18,000 --> 00:36:22,000 E pra, ne nuk duhet të telefononi ju Lucas. Ne duhet të telefononi ju më së pari. 661 00:36:22,000 --> 00:36:25,000 Pse është kjo në fakt në përputhje me realitetin këtu? 662 00:36:25,000 --> 00:36:27,000 Një, i parë tashmë ekziston. 663 00:36:27,000 --> 00:36:30,000 Parë ka qenë i ndarë sa duket diku deri këtu. 664 00:36:30,000 --> 00:36:35,000 Nyja * parë, dhe ajo është ndarë një listë disi. 665 00:36:35,000 --> 00:36:37,000 Unë nuk e di se si ka ndodhur. Kjo ka ndodhur para se të klasës filluar. 666 00:36:37,000 --> 00:36:40,000 Kjo listë e lidhur e njerëzve ka qenë i krijuar. 667 00:36:40,000 --> 00:36:44,000 Dhe tani në këtë moment në histori, kjo është e gjitha ndodh në Facebook me sa duket më vonë- 668 00:36:44,000 --> 00:36:49,000 në këtë pikë në histori, Anita ka qenë initialized të jetë e barabartë për të parë, 669 00:36:49,000 --> 00:36:51,000 e cila nuk do të thotë se pikat në Anita Lucas. 670 00:36:51,000 --> 00:36:53,000 Përkundrazi, ajo tregon se çfarë tregon ai në 671 00:36:53,000 --> 00:36:57,000 sepse e njëjta adresë që është brenda 32 bit Lucas-së - 1, 2, 3 - 672 00:36:57,000 --> 00:37:01,000 tani është gjithashtu brenda 32 bit Anita - 1, 2, 3. 673 00:37:01,000 --> 00:37:05,000 >> Tani e gjejnë 22. Si do të shkojë për të bërë këtë? 674 00:37:05,000 --> 00:37:07,000 Çfarë është ajo? >> Pika për çdo gjë. 675 00:37:07,000 --> 00:37:11,000 Pikë të çfarëdo, kështu që të shkojnë përpara dhe të veprojë atë sa më mirë që mundeni këtu. 676 00:37:11,000 --> 00:37:15,000 Mirë, mirë, dhe tani ju jeni duke treguar, çfarë është emri juaj me 22? 677 00:37:15,000 --> 00:37:18,000 Ramon. >> Ramon, kështu Ramon po mban deri 22. 678 00:37:18,000 --> 00:37:20,000 Ju keni bërë tani një kontroll. 679 00:37:20,000 --> 00:37:24,000 A Ramon == 22, dhe nëse është kështu, për shembull, ne mund të kthehen vërtetë. 680 00:37:24,000 --> 00:37:26,000 Le mua-ndërsa këta njerëz qëndrojnë këtu disi awkwardly- 681 00:37:26,000 --> 00:37:32,000 më lejoni të bëj diçka shpejt si bool gjetur. 682 00:37:32,000 --> 00:37:37,000 Unë jam duke shkuar për të shkuar përpara dhe të thonë (nyje * listë, int n). 683 00:37:37,000 --> 00:37:39,000 Unë do të jetë e drejtë mbrapa me ju djema. Unë vetëm duhet të shkruani disa kodin. 684 00:37:39,000 --> 00:37:45,000 Dhe tani unë jam duke shkuar për të shkuar përpara dhe të bëjë këtë, Nyja * anita listën =. 685 00:37:45,000 --> 00:37:51,000 Dhe unë jam duke shkuar për të shkuar përpara dhe të thonë se ndërsa (anita! = NULL). 686 00:37:51,000 --> 00:37:57,000 >> Metafora këtu po bëhet pak shtrirë, por ndërsa (anita! = NULL), çfarë unë dua të bëj? 687 00:37:57,000 --> 00:38:03,000 Unë kam nevojë për disa mënyra të referuar 688 00:38:03,000 --> 00:38:05,000 integer që Anita është vënë në. 689 00:38:05,000 --> 00:38:08,000 Në të kaluarën, kur kemi pasur struktura, e cila është një nyje, 690 00:38:08,000 --> 00:38:11,000 kemi përdorur simbol dot, dhe ne do të themi diçka si 691 00:38:11,000 --> 00:38:15,000 anita.n, por problemi këtu është se Anita nuk është një struct në vetvete. 692 00:38:15,000 --> 00:38:17,000 Çfarë është ajo? 693 00:38:17,000 --> 00:38:21,000 Ajo është një akrep, kështu që me të vërtetë, në qoftë se ne duam që të përdorin këtë simbol dot- 694 00:38:21,000 --> 00:38:23,000 dhe kjo do të shikojmë qëllimisht pak fshehtë- 695 00:38:23,000 --> 00:38:28,000 ne duhet të bëjmë diçka si të shkoni në të majtë çfarëdo Anita është vënë në 696 00:38:28,000 --> 00:38:31,000 dhe pastaj të merrni në fushën e quajtur n. 697 00:38:31,000 --> 00:38:35,000 Anita është një tregues, por ajo që është * anita? 698 00:38:35,000 --> 00:38:38,000 Çfarë bëni ju të gjeni kur ju shkoni në atë Anita është vënë në? 699 00:38:38,000 --> 00:38:42,000 Një struct, një nyje, dhe një, nyje risjell, ka një fushë të quajtur N 700 00:38:42,000 --> 00:38:47,000 sepse ajo ka, kujtojmë, këto 2 fusha, të ardhshme dhe n, 701 00:38:47,000 --> 00:38:50,000 që ne pamë një moment më parë të drejtë këtu. 702 00:38:50,000 --> 00:38:53,000 >> Që në fakt imitojnë këtë kod, 703 00:38:53,000 --> 00:39:02,000 ne mund të bëjmë këtë dhe thonë se nëse ((* anita). == n n), n që unë jam duke kërkuar për të. 704 00:39:02,000 --> 00:39:04,000 Vini re se funksioni u miratua në numrin më intereson. 705 00:39:04,000 --> 00:39:10,000 Atëherë unë mund të shkoni përpara dhe të bëjë diçka si kthim të vërtetë. 706 00:39:10,000 --> 00:39:12,000 Tjetër, në qoftë se nuk është kështu, çfarë unë dua të bëj? 707 00:39:12,000 --> 00:39:19,000 Si mund të përkthehet në kodin atë Anita e bëri këtë intuitive duke ecur nëpër lista? 708 00:39:19,000 --> 00:39:26,000 Çfarë duhet të bëj deri këtu për të simuluar Anita marrë këtë hap në të majtë, që hap në të majtë? 709 00:39:26,000 --> 00:39:28,000 [Përgjigja e padëgjueshme Studenti] >> Çfarë është ajo? 710 00:39:28,000 --> 00:39:30,000 [Përgjigja e padëgjueshme Student] 711 00:39:30,000 --> 00:39:34,000 Mirë, nuk është një ide e keqe, por në të kaluarën, kur e kemi bërë këtë, ne kemi bërë anita + + 712 00:39:34,000 --> 00:39:37,000 sepse kjo do të shtojë numrin 1 të Anita, 713 00:39:37,000 --> 00:39:40,000 të cilat zakonisht do të tregojnë në personin tjetër, si Ramon, 714 00:39:40,000 --> 00:39:44,000 ose personi tjetër të tij, ose pranë tij personi poshtë vijës. 715 00:39:44,000 --> 00:39:49,000 Por kjo nuk është mjaft e mirë këtu, sepse ajo e bën këtë gjë të duket si në kujtesë? 716 00:39:49,000 --> 00:39:54,000 Jo se. Ne duhet të çaktivizoni këtë. 717 00:39:54,000 --> 00:40:00,000 Ajo duket si kjo në kujtesë, dhe edhe pse unë kam tërhequr 1 dhe 2 dhe 3 pranë njëri-tjetrit, 718 00:40:00,000 --> 00:40:03,000 nëse ne me të vërtetë të simulojnë këtë mund të ju djema-, ndërsa ende duke treguar në të njëjtit njerëz, 719 00:40:03,000 --> 00:40:07,000 disa prej jush mund të marrë një back rastit hap, disa prej jush një hap përpara rastit? 720 00:40:07,000 --> 00:40:10,000 >> Kjo rrëmujë është ende një listë e lidhur, 721 00:40:10,000 --> 00:40:13,000 por këta njerëz mund të jetë kudo në kujtesë, 722 00:40:13,000 --> 00:40:15,000 kështu anita + + nuk do të punojë pse? 723 00:40:15,000 --> 00:40:19,000 Çfarë është në të lokacionit anita + +? 724 00:40:19,000 --> 00:40:21,000 Kush e di. 725 00:40:21,000 --> 00:40:24,000 Kjo është disa vlera të tjera që vetëm kështu ndodh të jetë interposed 726 00:40:24,000 --> 00:40:28,000 në mesin e të gjitha këto nyje nga rastësia, sepse ne nuk jeni duke përdorur një rrjet. 727 00:40:28,000 --> 00:40:30,000 Ne alokuar secilën prej këtyre nyjeve individualisht. 728 00:40:30,000 --> 00:40:32,000 Mirë, në qoftë se ju djema mund të pastruar veten back up. 729 00:40:32,000 --> 00:40:37,000 Më lejoni të propozojë që në vend të anita + +, ne vend bëjmë Anita merr- 730 00:40:37,000 --> 00:40:42,000 edhe, pse nuk shkojmë në çfarëdo Anita është vënë në dhe pastaj të bëjë. tjetër? 731 00:40:42,000 --> 00:40:45,000 Me fjalë të tjera, ne do të shkojmë në Ramon, i cili e mban numrin 22, 732 00:40:45,000 --> 00:40:51,000 dhe pastaj. tjetër është sikur Anita do të kopjimit majtë treguesin e tij të dorës. 733 00:40:51,000 --> 00:40:54,000 Por ajo nuk do të shkojë më larg se Ramon sepse kemi gjetur 22. 734 00:40:54,000 --> 00:40:56,000 Por që do të jetë ideja. Tani, kjo është një zot-tmerrshme rrëmujë. 735 00:40:56,000 --> 00:40:59,000 Sinqerisht, askush nuk do të ndonjëherë të mbani mend këtë sintaksë, dhe kështu fatmirësisht, 736 00:40:59,000 --> 00:41:04,000 kjo është në fakt një pak qëllimshme-oh, ju në fakt nuk shohim se çfarë kam shkruar. 737 00:41:04,000 --> 00:41:08,000 Kjo do të jetë më bindëse në qoftë se ju mund. Voila! 738 00:41:08,000 --> 00:41:10,000 >> Prapa skenave, unë u zgjidhur problemin në këtë mënyrë. 739 00:41:10,000 --> 00:41:14,000 Anita, për të marrë këtë hap në të majtë, 740 00:41:14,000 --> 00:41:18,000 Së pari, ne do të shkojnë në adresën që Anita është vënë në 741 00:41:18,000 --> 00:41:23,000 dhe ku ajo do të gjeni jo vetëm n, të cilat ne vetëm kontrolluar për hir të së krahasim, 742 00:41:23,000 --> 00:41:25,000 por ju do të gjeni edhe më tej - në këtë rast, 743 00:41:25,000 --> 00:41:28,000 Dorën e majtë Ramon së treguar në nyjen e ardhshëm në listë. 744 00:41:28,000 --> 00:41:32,000 Por kjo është perëndia-mess tmerrshme për të cilën unë përmendur më herët, 745 00:41:32,000 --> 00:41:34,000 por ajo del C na lejon të thjeshtojë këtë. 746 00:41:34,000 --> 00:41:40,000 Në vend të shkrimit (* anita), ne mund të shkruani vetëm në vend anita-> n, 747 00:41:40,000 --> 00:41:45,000 dhe kjo është gjë e saktë të njëjtën funksionalisht, por kjo është një shumë më intuitive, 748 00:41:45,000 --> 00:41:48,000 dhe kjo është një shumë më tepër në përputhje me foto që ne kemi qenë të tërhequr 749 00:41:48,000 --> 00:41:50,000 të gjithë këtë kohë duke përdorur shigjetat. 750 00:41:50,000 --> 00:41:57,000 >> Së fundi, çfarë ne duhet të bëjmë në fund të këtij programi? 751 00:41:57,000 --> 00:42:00,000 Ka një linjë të kodit mbetur. 752 00:42:00,000 --> 00:42:02,000 Kthehu çfarë? 753 00:42:02,000 --> 00:42:05,000 Rreme, sepse nëse ne marrim me anë të tërë, ndërsa loop 754 00:42:05,000 --> 00:42:10,000 Anita dhe është, në fakt, null, që do të thotë ajo shkoi gjatë gjithë rrugës deri në fund të listës 755 00:42:10,000 --> 00:42:12,000 ku ajo ishte vënë në-çfarë është emri juaj përsëri? 756 00:42:12,000 --> 00:42:15,000 Dorën e majtë Ari. >> Ari, i cili është i pavlefshëm. 757 00:42:15,000 --> 00:42:18,000 Anita është tani null, dhe unë të kuptojë se ju jeni vetëm duke qëndruar këtu awkwardly në harresë 758 00:42:18,000 --> 00:42:21,000 sepse unë jam duke shkuar jashtë në një monolog këtu, 759 00:42:21,000 --> 00:42:23,000 por ne do të përfshijë përsëri në vetëm një moment. 760 00:42:23,000 --> 00:42:27,000 Anita është i pavlefshëm në atë moment në histori, kështu që lak, ndërsa përfundon, 761 00:42:27,000 --> 00:42:30,000 dhe ne duhet të kthehen false sepse në qoftë se ajo mori të gjitha rrugën në treguesin null Ari-së 762 00:42:30,000 --> 00:42:34,000 atëherë nuk kishte asnjë numër që ajo kërkoi në listë. 763 00:42:34,000 --> 00:42:39,000 Ne mund të pastruar këtë shumë, por kjo është një implementim mjaft të mirë, atëherë 764 00:42:39,000 --> 00:42:43,000 i një funksioni traversal, një gjeni funksion për një listë të lidhura. 765 00:42:43,000 --> 00:42:48,000 Është ende kërkimit lineare, por kjo nuk është aq e thjeshtë sa një akrep + + 766 00:42:48,000 --> 00:42:52,000 ose + + një variabël i sepse tani ne nuk mund të mendoj 767 00:42:52,000 --> 00:42:54,000 ku secili prej këtyre nyjeve janë në kujtesë. 768 00:42:54,000 --> 00:42:57,000 Ne duhet të vërtetë ndjekin gjurmët e breadcrumbs ose, më saktë, 769 00:42:57,000 --> 00:43:00,000 pointers, për të marrë nga një nyje në një tjetër. 770 00:43:00,000 --> 00:43:02,000 >> Tani le të provoni një tjetër. Anita, nuk ju duan të kthehen këtu? 771 00:43:02,000 --> 00:43:06,000 Pse nuk do të shkojmë përpara dhe të ndajë një person tjetër nga audienca? 772 00:43:06,000 --> 00:43:08,000 Malloc-çfarë është emri juaj? >> Rebecca. 773 00:43:08,000 --> 00:43:10,000 Rebecca. Rebecca ka qenë malloced nga publiku, 774 00:43:10,000 --> 00:43:13,000 dhe ajo është tani ruajtjen e numrit 55. 775 00:43:13,000 --> 00:43:17,000 Dhe qëllimi në dorë tani është për të futur Anita 776 00:43:17,000 --> 00:43:22,000 Rebecca në listën e lidhur këtu në vendin e vet të duhur. 777 00:43:22,000 --> 00:43:24,000 Ejani në më shumë këtu për një moment. 778 00:43:24,000 --> 00:43:28,000 Unë kam bërë diçka si kjo. 779 00:43:28,000 --> 00:43:32,000 Unë kam bërë * nyje. Dhe çfarë është emri juaj përsëri? 780 00:43:32,000 --> 00:43:34,000 Rebecca. >> Rebecca, në rregull. 781 00:43:34,000 --> 00:43:41,000 Rebecca merr malloc (sizeof (nyje)). 782 00:43:41,000 --> 00:43:44,000 Ashtu si kemi ndarë gjëra të tilla si studentët dhe gjësend në të kaluarën, 783 00:43:44,000 --> 00:43:46,000 ne kemi nevojë për madhësinë e nyjeve, kështu që tani Rebecca 784 00:43:46,000 --> 00:43:49,000 është vënë në çfarë? 785 00:43:49,000 --> 00:43:52,000 Rebecca ka dy fusha në brendësi të saj, njëra prej të cilave është 55. 786 00:43:52,000 --> 00:43:55,000 Le të bëjë atë, rebecca-> = 55. 787 00:43:55,000 --> 00:44:00,000 Por pastaj rebecca-> ardhshëm duhet të jetë-si e drejtë tani, dora e saj është lloj i kush e di? 788 00:44:00,000 --> 00:44:03,000 Është vënë në një vlerë mbeturinave, kështu që pse nuk bëni për masë të mirë 789 00:44:03,000 --> 00:44:07,000 ne të paktën të bëjë këtë në mënyrë që dora e majtë është tani në anën e saj. 790 00:44:07,000 --> 00:44:09,000 Tani Anita, të marrë atë nga këtu. 791 00:44:09,000 --> 00:44:11,000 Ju keni Rebecca që janë ndarë. 792 00:44:11,000 --> 00:44:20,000 Të shkojnë përpara dhe për të gjetur se ku duhet vënë Rebecca. 793 00:44:20,000 --> 00:44:25,000 Mirë, shumë i mirë. 794 00:44:25,000 --> 00:44:28,000 Mirë, mirë, dhe tani ne kemi nevojë për ju për të siguruar një grimë drejtim, 795 00:44:28,000 --> 00:44:30,000 kështu që ju keni arritur Ari. 796 00:44:30,000 --> 00:44:33,000 Dora e tij e majtë është null, por në mënyrë të qartë Rebeka i takon në të djathtë, 797 00:44:33,000 --> 00:44:36,000 Pra, si nuk kemi për të ndryshuar këtë listë lidhur 798 00:44:36,000 --> 00:44:38,000 në mënyrë për të futur Rebecca në vendin e duhur? 799 00:44:38,000 --> 00:44:42,000 Nëse ju mund të vërtetë të lëvizin duart e njerëzve lënë rreth si e nevojshme, 800 00:44:42,000 --> 00:44:48,000 ne do të rregullojmë problemin në këtë mënyrë. 801 00:44:48,000 --> 00:44:52,000 Mirë, mirë, dhe ndërkohë, dora e majtë Rebecca është tani nga ana e saj. 802 00:44:52,000 --> 00:44:54,000 >> Kjo ishte shumë e lehtë. 803 00:44:54,000 --> 00:44:57,000 Le të përpiqemi ndarjen e-we're bërë gati, 20. 804 00:44:57,000 --> 00:44:59,000 Mirë, eja lart. 805 00:44:59,000 --> 00:45:04,000 20 është ndarë, kështu që më lejoni të shkoj përpara dhe të them përsëri këtu 806 00:45:04,000 --> 00:45:07,000 ne kemi bërë vetëm * Saad nyje. 807 00:45:07,000 --> 00:45:11,000 Ne kemi malloc (sizeof (nyje)). 808 00:45:11,000 --> 00:45:16,000 Ne pastaj të bëjë të njëjtën sintaksë e saktë si ne e bëmë më parë për 20, 809 00:45:16,000 --> 00:45:20,000 dhe unë do të bëj tjetër NULL =, dhe tani është në dorën Anita 810 00:45:20,000 --> 00:45:23,000 për të futur ju në listën e lidhur, në qoftë se ju mund të luajë këtë rol e saktë të njëjtën. 811 00:45:23,000 --> 00:45:30,000 Ekzekutuar. 812 00:45:30,000 --> 00:45:32,000 Mirë, mirë. 813 00:45:32,000 --> 00:45:38,000 Tani mendoni me kujdes para se të fillojnë të lëvizin duart e majtë përreth. 814 00:45:38,000 --> 00:45:46,000 Ju deri tani mori rolin më të vështirë sot. 815 00:45:46,000 --> 00:45:59,000 Duart e kujt duhet të zhvendoset parë? 816 00:45:59,000 --> 00:46:02,000 Mirë, prisni, unë jam dëgjuar disa nuk e. 817 00:46:02,000 --> 00:46:07,000 Nëse disa folks do të donte edukatë të ndihmuar në zgjidhjen e një situatë të vështirë këtu. 818 00:46:07,000 --> 00:46:11,000 Dora e të cilit e majtë duhet të përditësuar parë ndoshta? Po. 819 00:46:11,000 --> 00:46:13,000 [Student] e Saad. 820 00:46:13,000 --> 00:46:15,000 Mirë, e Saad, pse, pse? 821 00:46:15,000 --> 00:46:17,000 [Përgjigja e padëgjueshme Student] 822 00:46:17,000 --> 00:46:19,000 Mirë, sepse nëse ne lëvizim, çfarë është emri juaj? >> Marshall. 823 00:46:19,000 --> 00:46:22,000 Marshall, në qoftë se ne shkojmë dorën poshtë për të parë null, 824 00:46:22,000 --> 00:46:25,000 tani ne kemi mbetur jetimë fjalë katër persona në këtë listë 825 00:46:25,000 --> 00:46:29,000 sepse ai ishte e vetmja gjë e treguar në Ramon dhe të gjithë të majtë, 826 00:46:29,000 --> 00:46:31,000 kështu përditësimin se treguesin e parë ishte e keqe. 827 00:46:31,000 --> 00:46:33,000 Le të ndrequr këtë. 828 00:46:33,000 --> 00:46:37,000 Mirë, dhe tani të shkojnë përpara dhe të lëvizë dorën e majtë e duhur duke treguar në Ramon. 829 00:46:37,000 --> 00:46:39,000 Kjo ndihet pak të tepërta. 830 00:46:39,000 --> 00:46:41,000 Tani ka dy njerëz të vënë në Ramon, por kjo është në rregull 831 00:46:41,000 --> 00:46:43,000 sepse tani si tjetër nuk kemi update lista? 832 00:46:43,000 --> 00:46:48,000 Nga ana tjetër ajo që ka për të lëvizur? 833 00:46:48,000 --> 00:46:53,000 Shkëlqyer, tani nuk kemi humbur asnjë kujtim? 834 00:46:53,000 --> 00:46:57,000 Jo, në mënyrë të mirë, le të shohim nëse ne nuk mund ta thyejnë këtë herë më shumë. 835 00:46:57,000 --> 00:47:00,000 >> Mallocing për herë të fundit, numri 5. 836 00:47:00,000 --> 00:47:04,000 Të gjitha mënyra në shpinë, vijnë më poshtë. 837 00:47:04,000 --> 00:47:08,000 Është shumë emocionuese. 838 00:47:08,000 --> 00:47:15,000 [Duartrokitje] 839 00:47:15,000 --> 00:47:17,000 Çfarë është emri juaj? >> Ron. 840 00:47:17,000 --> 00:47:19,000 Ron, në rregull, ju jeni malloced si numër 5. 841 00:47:19,000 --> 00:47:23,000 Ne kemi vetëm ekzekutuar kodin që është pothuajse identike me këto 842 00:47:23,000 --> 00:47:26,000 me vetëm një emër tjetër. 843 00:47:26,000 --> 00:47:28,000 Shkëlqyer. 844 00:47:28,000 --> 00:47:38,000 Tani, Anita, fat i mirë futur numrin 5 në listën tani. 845 00:47:38,000 --> 00:47:43,000 Mirë, dhe? 846 00:47:43,000 --> 00:47:47,000 Shkëlqyer, kështu që kjo është me të vërtetë i tretë i tre raste gjithsej. 847 00:47:47,000 --> 00:47:49,000 Ne e parë kishte dikë në fund, Rebecca. 848 00:47:49,000 --> 00:47:51,000 Ne atëherë kishte dikë në mes. 849 00:47:51,000 --> 00:47:53,000 Tani ne kemi dikë në fillim, dhe në këtë shembull, 850 00:47:53,000 --> 00:47:56,000 ne tani duhej të rinovuar Lucas për herë të parë 851 00:47:56,000 --> 00:48:00,000 sepse elementi i parë në listë ka tani për pikë në një nyje të re, 852 00:48:00,000 --> 00:48:03,000 të cilët, nga ana tjetër, është treguar në numrin nyjeve 9. 853 00:48:03,000 --> 00:48:06,000 >> Ky ishte një demonstrim jashtëzakonisht i vështirë, unë jam i sigurt, 854 00:48:06,000 --> 00:48:08,000 kështu një raund i madh i duartrokitje për këta njerëz, nëse ju mund. 855 00:48:08,000 --> 00:48:11,000 Nicely done. 856 00:48:11,000 --> 00:48:17,000 Kjo është e gjitha. Ju mund të mbani copa tuaj të letrës, si një kujtim të vogël. 857 00:48:17,000 --> 00:48:22,000 Ajo rezulton se duke bërë këtë në kodin e 858 00:48:22,000 --> 00:48:26,000 nuk është mjaft aq e thjeshtë sa vetëm duke lëvizur duart përreth 859 00:48:26,000 --> 00:48:28,000 dhe duke treguar pointers në gjëra të ndryshme. 860 00:48:28,000 --> 00:48:31,000 Por të kuptojë se kur vjen koha për të zbatuar diçka si 861 00:48:31,000 --> 00:48:34,000 një listë e lidhur ose një variant i saj në qoftë se ju të përqëndrohet në të vërtetë 862 00:48:34,000 --> 00:48:38,000 këto themele bazë, kafshoj-size problemet që unë duhet të kuptoj se, 863 00:48:38,000 --> 00:48:43,000 është ky apo kjo dora dorës, të kuptojnë se çfarë është përndryshe një program mjaft komplekse 864 00:48:43,000 --> 00:48:47,000 mund, në fakt, të reduktohet në blloqe mjaft e thjeshtë e ndërtimit të tilla si kjo. 865 00:48:47,000 --> 00:48:51,000 >> Le të marrin gjërat në një drejtim më të sofistikuar ende. 866 00:48:51,000 --> 00:48:53,000 Ne tani e kemi idenë e listës lidhura. 867 00:48:53,000 --> 00:48:57,000 Ne gjithashtu kemi-në sajë të sugjerimin e pasme ka-një listë e lidhur dyfish, 868 00:48:57,000 --> 00:49:01,000 i cili duket pothuajse i njëjtë, por tani ne kemi dy pointers në brendësi të struct 869 00:49:01,000 --> 00:49:05,000 në vend të një, dhe ne ndoshta mund të quajmë këto pointers mëparshëm dhe të ardhshëm 870 00:49:05,000 --> 00:49:08,000 ose majtas ose djathtas, por ne, në fakt, kanë nevojë për dy prej tyre. 871 00:49:08,000 --> 00:49:10,000 Kodi do të jetë pak më shumë të përfshira. 872 00:49:10,000 --> 00:49:12,000 Anita do të duhej të bëjnë më shumë punë këtu në skenë. 873 00:49:12,000 --> 00:49:15,000 Por ne me siguri mund të zbatojë atë lloj të strukturës. 874 00:49:15,000 --> 00:49:19,000 Në kushtet e drejtimin kohë, pse, çfarë do të jetë hera e running 875 00:49:19,000 --> 00:49:24,000 Anita për të gjetur një numër n në një listë e lidhur tani? 876 00:49:24,000 --> 00:49:27,000 O ende e madhe n, kështu që ajo nuk është më e mirë se kërkim linear. 877 00:49:27,000 --> 00:49:29,000 Ne nuk mund të bëjmë kërkimin binar, edhe pse, përsëri. 878 00:49:29,000 --> 00:49:34,000 Pse ishte se rasti? Ju nuk mund të kërcejnë rreth. 879 00:49:34,000 --> 00:49:36,000 Edhe pse ne padyshim shohim të gjitha njerëzit në skenë, 880 00:49:36,000 --> 00:49:39,000 Anita dhe mund të ketë eyeballed atë dhe tha: "Ja, është mesi i listës," 881 00:49:39,000 --> 00:49:42,000 ajo nuk do të dinë se në qoftë se ajo ishte programi kompjuterik 882 00:49:42,000 --> 00:49:47,000 sepse e vetmja gjë që ajo kishte për të vendosur në gji për të në fillim të skenarit 883 00:49:47,000 --> 00:49:50,000 ishte Lucas, i cili ishte treguesi i parë. 884 00:49:50,000 --> 00:49:53,000 Ajo do domosdoshmërisht duhet të ndjekin këto lidhje, 885 00:49:53,000 --> 00:49:56,000 numëruar në rrugën e saj derisa ajo gjeti afërsisht mesi, 886 00:49:56,000 --> 00:49:58,000 dhe madje edhe atëherë, ajo nuk do të dinë se kur ajo është arritur mes 887 00:49:58,000 --> 00:50:01,000 përveç nëse ajo shkon gjithë rrugës deri në fund të kuptoj se sa shumë janë, 888 00:50:01,000 --> 00:50:05,000 pastaj backtracks, dhe se shumë do të jetë e vështirë nëse nuk keni pasur 889 00:50:05,000 --> 00:50:07,000 një listë e lidhur dyfish e disa lloj. 890 00:50:07,000 --> 00:50:10,000 >> Zgjidhjen e disa problemeve sot, por duke futur të tjerët. 891 00:50:10,000 --> 00:50:12,000 Po në lidhje me strukturën e të dhënave të ndryshme krejt? 892 00:50:12,000 --> 00:50:15,000 Kjo është një fotografi e tabaka në Mather House, 893 00:50:15,000 --> 00:50:19,000 dhe në këtë rast, ne kemi një strukturë të dhënave që ne kemi gjithashtu lloji i tashmë është duke folur rreth. 894 00:50:19,000 --> 00:50:22,000 Ne biseduam në lidhje me një pirg në kontekstin e kujtesës, 895 00:50:22,000 --> 00:50:26,000 dhe kjo është lloj i quajtur qëllimisht për shkak se një pirg në kushtet e kujtesës 896 00:50:26,000 --> 00:50:31,000 është efektivisht një strukturë të dhënave që ka më shumë gjëra dhe më shumë shtresa në krye të saj. 897 00:50:31,000 --> 00:50:35,000 Por gjëja më interesante në lidhje me një pirg, siç është rasti në realitet, 898 00:50:35,000 --> 00:50:38,000 është se kjo është një lloj i veçantë i të dhënave strukturë. 899 00:50:38,000 --> 00:50:42,000 Kjo është një strukturë e të dhënave ku elementi i parë në 900 00:50:42,000 --> 00:50:46,000 është elementi i fundit jashtë. 901 00:50:46,000 --> 00:50:50,000 Nëse ju jeni tabaka parë që do të vënë mbi rafte, 902 00:50:50,000 --> 00:50:53,000 ju jeni do të jetë fatkeqësisht tabaka e fundit që do të merren jashtë rafte, 903 00:50:53,000 --> 00:50:55,000 dhe kjo nuk është domosdoshmërisht një gjë e mirë. 904 00:50:55,000 --> 00:50:58,000 Në anën tjetër, ju mund të mendoni për atë mënyra të tjera përreth, 905 00:50:58,000 --> 00:51:02,000 e fundit në është nga e para. 906 00:51:02,000 --> 00:51:05,000 >> Tani, a ndonjë skenarë të vijnë në mendje kur të paturit e një pirg 907 00:51:05,000 --> 00:51:08,000 Struktura e të dhënave ku ju keni atë pronë 908 00:51:08,000 --> 00:51:13,000 e fundit në, së pari, është fakt bindës? 909 00:51:13,000 --> 00:51:16,000 Është se një gjë e mirë? Është se një gjë e keqe? 910 00:51:16,000 --> 00:51:19,000 Kjo është padyshim një gjë e keqe nëse tabaka nuk ishin të gjithë të njëjtë 911 00:51:19,000 --> 00:51:21,000 dhe ata ishin të gjithë ngjyrave të veçanta të ndryshme apo gjësend, 912 00:51:21,000 --> 00:51:24,000 dhe ngjyra është e gjitha që ju doni mënyra në fund. 913 00:51:24,000 --> 00:51:26,000 Sigurisht, ju nuk mund të merrni atë pa përpjekje të mëdha. 914 00:51:26,000 --> 00:51:28,000 Ju duhet të fillojë nga lart dhe të punojnë në rrugën tuaj poshtë. 915 00:51:28,000 --> 00:51:31,000 Në mënyrë të ngjashme, çfarë nëse ju keni qenë një nga këta djem tifoz 916 00:51:31,000 --> 00:51:34,000 që pret të gjithë natën duke u përpjekur për të marrë një iPhone dhe linjat e lart 917 00:51:34,000 --> 00:51:36,000 në një vend si ky? 918 00:51:36,000 --> 00:51:40,000 Nuk do të jetë mirë në qoftë se dyqan Apple 919 00:51:40,000 --> 00:51:42,000 ishin një pirg të dhënave strukturë? 920 00:51:42,000 --> 00:51:44,000 Yay? Jo? 921 00:51:44,000 --> 00:51:47,000 Kjo është vetëm e mirë për njerëzit që tregojnë deri në minutën e fundit të mundshme 922 00:51:47,000 --> 00:51:50,000 dhe pastaj merrni këputur, të njomë radhën. 923 00:51:50,000 --> 00:51:52,000 Dhe në fakt, fakti që unë u prirur në mënyrë që të thonë radhë 924 00:51:52,000 --> 00:51:56,000 është në të vërtetë konsistente me atë që ne do të quajmë këtë lloj të të dhënave strukturës, 925 00:51:56,000 --> 00:51:59,000 një në realitet, ku rendi ka rëndësi, 926 00:51:59,000 --> 00:52:02,000 dhe ju doni një të parë në të jetë e para nga 927 00:52:02,000 --> 00:52:04,000 në qoftë se vetëm për hir të drejtësisë njerëzore. 928 00:52:04,000 --> 00:52:07,000 Ne do të quajmë në përgjithësi të dhënat se një strukturë radhë. 929 00:52:07,000 --> 00:52:11,000 >> Ajo rezulton përveç listave të lidhura, ne mund të filloni duke përdorur këto ide të njëjta themelore 930 00:52:11,000 --> 00:52:15,000 dhe të fillojnë krijimin e llojeve të reja dhe të ndryshme të zgjidhjeve të problemeve. 931 00:52:15,000 --> 00:52:19,000 Për shembull, në rastin e një pirg, ne mund të përfaqësojë një pirg 932 00:52:19,000 --> 00:52:22,000 duke përdorur një strukturë të të dhënave si kjo, unë do të propozojë. 933 00:52:22,000 --> 00:52:26,000 Në këtë rast, unë kam deklaruar një struct, dhe unë kam thënë në brendësi të kësaj strukture 934 00:52:26,000 --> 00:52:30,000 është një grup i numrave dhe pastaj një madhësi të ndryshueshme të quajtur, 935 00:52:30,000 --> 00:52:33,000 dhe unë jam duke shkuar për të thirrur këtë gjë një pirg. 936 00:52:33,000 --> 00:52:35,000 Tani, pse e bën këtë të vërtetë punojnë? 937 00:52:35,000 --> 00:52:43,000 Në rastin e një pirg, unë mund të tërheqë këtë në mënyrë efektive në ekran si një grup. 938 00:52:43,000 --> 00:52:47,000 Këtu është rafte ime. Ata janë numra mi. 939 00:52:47,000 --> 00:52:50,000 Dhe ne do të tërheqë ata si kjo, kjo, kjo, kjo, kjo. 940 00:52:50,000 --> 00:52:53,000 Dhe atëherë unë kam disa të dhënave anëtar tjetër këtu, 941 00:52:53,000 --> 00:52:58,000 e cila quhet madhësia, kështu që kjo është madhësia, dhe kjo është numra, 942 00:52:58,000 --> 00:53:02,000 dhe kolektivisht, iPad gjithë këtu përfaqëson një strukturë rafte. 943 00:53:02,000 --> 00:53:07,000 Tani, by default, madhësia e ka marrë me sa duket për të nisur në 0, 944 00:53:07,000 --> 00:53:11,000 dhe çfarë është në brendësi të grup të numrave fillimisht 945 00:53:11,000 --> 00:53:14,000 kur kam parë caktojë një grup? 946 00:53:14,000 --> 00:53:16,000 Garbage. Kush e di? Dhe kjo nuk ka të vërtetë rëndësi. 947 00:53:16,000 --> 00:53:20,000 Ajo nuk ka rëndësi nëse kjo është 1, 2, 3, 4, 5, krejtësisht rastësisht 948 00:53:20,000 --> 00:53:25,000 nga fat i keq depozituara në strukturën time, sepse aq sa unë e di se madhësia e rafte 949 00:53:25,000 --> 00:53:29,000 është 0, atëherë unë e di programuar, nuk shohim ndonjë prej elementeve në array. 950 00:53:29,000 --> 00:53:31,000 Kjo nuk ka rëndësi se çfarë është atje. 951 00:53:31,000 --> 00:53:34,000 A nuk shikojnë ata, si do të jetë implikimi i madhësisë prej 0. 952 00:53:34,000 --> 00:53:38,000 >> Por mendoj tani unë po shkoj përpara dhe të futur diçka në rafte. 953 00:53:38,000 --> 00:53:42,000 Unë dua të futur numrin 5, kështu që kam vënë numrin 5 here, 954 00:53:42,000 --> 00:53:45,000 dhe pastaj çfarë kam vënë këtu poshtë? 955 00:53:45,000 --> 00:53:48,000 Tani unë në fakt do të vënë poshtë 1 për madhësinë, 956 00:53:48,000 --> 00:53:50,000 dhe tani rafte është e madhësisë 1. 957 00:53:50,000 --> 00:53:53,000 Çfarë ndodh nëse unë shkoj përpara dhe futni numrin, le të themi, 7 të ardhshëm? 958 00:53:53,000 --> 00:53:57,000 Kjo pastaj merr përditësuar për të 2, dhe pastaj ne do të bëjmë 9, 959 00:53:57,000 --> 00:54:02,000 dhe atëherë kjo merr përditësuar për të 3. 960 00:54:02,000 --> 00:54:05,000 Por karakteristikë interesante e këtij rafte tani është se 961 00:54:05,000 --> 00:54:09,000 Unë jam menduar për të hequr elementin i cili në qoftë se unë dua të pop 962 00:54:09,000 --> 00:54:12,000 diçka off rafte, kështu që të flasin? 963 00:54:12,000 --> 00:54:14,000 9 do të jetë gjëja e parë për të shkuar. 964 00:54:14,000 --> 00:54:18,000 Si duhet të ndryshojë foto në qoftë se unë dua të pop një element jashtë rafte, 965 00:54:18,000 --> 00:54:20,000 shumë si një tabaka në Mather? 966 00:54:20,000 --> 00:54:22,000 Po. >> [Student] Madhësia Set në 2. 967 00:54:22,000 --> 00:54:27,000 Pikërisht, të gjitha unë bëj është vendosur në 2 madhësi, dhe çfarë të bëj me grup? 968 00:54:27,000 --> 00:54:29,000 Unë nuk kam të bëjë asgjë. 969 00:54:29,000 --> 00:54:32,000 Unë mund të, vetëm të jenë në anal, vënë një 0, ose a atje -1 apo diçka për të treguar 970 00:54:32,000 --> 00:54:34,000 se kjo nuk është një vlerë legit, por kjo nuk ka rëndësi, sepse 971 00:54:34,000 --> 00:54:37,000 Unë mund të regjistrojë jashtë array vetë se sa kohë është 972 00:54:37,000 --> 00:54:41,000 kështu që unë e di vetëm shikoni në dy elementet e para në këtë grup. 973 00:54:41,000 --> 00:54:47,000 Tani, nëse unë shkoj dhe shtoni numrin 8 në këtë grup, si e bën foto ndryshojë ardhshme? 974 00:54:47,000 --> 00:54:50,000 Kjo bëhet 8, dhe kjo bëhet 3. 975 00:54:50,000 --> 00:54:52,000 Unë jam një prerje qoshet pak këtu. 976 00:54:52,000 --> 00:54:56,000 Tani ne kemi 5, 7, 8, dhe ne jemi kthyer në një madhësi prej 3. 977 00:54:56,000 --> 00:54:58,000 Kjo është shumë e thjeshtë për t'u zbatuar, 978 00:54:58,000 --> 00:55:06,000 por kur do të shkojmë për keqardhje këtë vendim të projektimit? 979 00:55:06,000 --> 00:55:09,000 Kur gjërat fillojnë të shkojnë shumë, shumë i keq? Po. 980 00:55:09,000 --> 00:55:11,000 [Përgjigja e padëgjueshme Student] 981 00:55:11,000 --> 00:55:13,000 Kur ju dëshironi të ktheheni mbrapsh dhe të marrë elementin e parë që ju vënë in 982 00:55:13,000 --> 00:55:18,000 >> Kjo rezulton nga këtu, edhe pse një pirg është një koleksion nën kapuç, 983 00:55:18,000 --> 00:55:21,000 këto struktura të dhënave që kemi filluar duke folur rreth janë gjithashtu të njohur përgjithësisht si 984 00:55:21,000 --> 00:55:25,000 Strukturat abstrakte të dhënave ku si ata po zbatohet 985 00:55:25,000 --> 00:55:27,000 është krejtësisht përveç pikë. 986 00:55:27,000 --> 00:55:31,000 Një strukturë e të dhënave si një pirg është menduar për të shtuar mbështetjen e 987 00:55:31,000 --> 00:55:35,000 Operacionet si shtytje, e cila e shtyn një tabaka mbi rafte, 988 00:55:35,000 --> 00:55:39,000 dhe pop, e cila heq një element nga rafte, dhe kjo është ajo. 989 00:55:39,000 --> 00:55:43,000 Nëse ju do të shkarkoni kodin dikush tjetër që zbatohet tashmë 990 00:55:43,000 --> 00:55:46,000 kjo gjë të quajtur një pirg, që personi do të kishte shkruar 991 00:55:46,000 --> 00:55:49,000 vetëm dy funksione për ju, shtytje dhe pop, qëllimi i të cilit në jetë 992 00:55:49,000 --> 00:55:51,000 do të jetë për të bërë pikërisht këtë. 993 00:55:51,000 --> 00:55:54,000 Ju ose atë ose të saj të cilët zbatuar atë program 994 00:55:54,000 --> 00:55:58,000 do të kishte qenë tërësisht një për të vendosur se si për të zbatuar 995 00:55:58,000 --> 00:56:00,000 semantikë e shtyjnë dhe popping nën kapuç 996 00:56:00,000 --> 00:56:03,000 ose funksionalitetin e shtyjnë dhe popping. 997 00:56:03,000 --> 00:56:07,000 Dhe unë kam bërë një vendim disi dritëshkurtër këtu 998 00:56:07,000 --> 00:56:10,000 duke zbatuar pirg tim me këtë strukturë të dhënave të thjeshtë pse? 999 00:56:10,000 --> 00:56:12,000 Kur e bën këtë strukturë të dhënave pushim? 1000 00:56:12,000 --> 00:56:18,000 Në çfarë pike mund të keni për të kthyer një gabim kur përdoruesi kërkon shtytje, për shembull? 1001 00:56:18,000 --> 00:56:20,000 [Student] Nëse nuk ka shumë hapësirë. 1002 00:56:20,000 --> 00:56:23,000 Pikërisht, në qoftë se nuk ka hapësirë ​​jo më shumë, në qoftë se unë kam tejkaluar kapacitetin, 1003 00:56:23,000 --> 00:56:27,000 e cila është e gjitha shkronja kapitale, sepse ai sugjeron se kjo është një lloj konstante globale. 1004 00:56:27,000 --> 00:56:30,000 E pra, atëherë unë jam vetëm do të duhet të them, "Më vjen keq, unë nuk mund të shtyjë një tjetër vlerë 1005 00:56:30,000 --> 00:56:32,000 mbi rafte, "ashtu si në Mather. 1006 00:56:32,000 --> 00:56:36,000 >> Në disa pika, ata do të goditur një pjesë të lartë të kabinetit të asaj pak. 1007 00:56:36,000 --> 00:56:39,000 Nuk ka më shumë hapësirë ​​ose kapaciteti në rafte, në të cilën pikë ka disa lloj të gabimit. 1008 00:56:39,000 --> 00:56:42,000 Ata kanë për të vënë elementin diku tjetër, tabaka diku tjetër, 1009 00:56:42,000 --> 00:56:44,000 ose askund në të gjitha. 1010 00:56:44,000 --> 00:56:47,000 Tani, me radhë, ne mund të zbatojë atë pak ndryshe. 1011 00:56:47,000 --> 00:56:50,000 Një radhë është pak më ndryshe se në nën kapuç, ajo mund të zbatohet 1012 00:56:50,000 --> 00:56:54,000 si një grup, por pse, në këtë rast, unë jam duke propozuar 1013 00:56:54,000 --> 00:56:59,000 të kemi gjithashtu një element kokë përfaqëson kreun e listës, 1014 00:56:59,000 --> 00:57:06,000 fronti i listës, personi i parë në përputhje në dyqan Apple, përveç në madhësi? 1015 00:57:06,000 --> 00:57:14,000 Pse nuk kam nevojë për një pjesë shtesë e të dhënave këtu? 1016 00:57:14,000 --> 00:57:16,000 Mendoni përsëri në atë numër është 1017 00:57:16,000 --> 00:57:18,000 në qoftë se unë kam tërhequr atë si vijon. 1018 00:57:18,000 --> 00:57:21,000 Supozoni se kjo është tani një radhë në vend të një pirg, 1019 00:57:21,000 --> 00:57:24,000 diferenca është, vetëm si radhë të dyqan-Apple është e drejtë. 1020 00:57:24,000 --> 00:57:27,000 Personi i parë në përputhje në fillim të listës, numër 5 në këtë rast, 1021 00:57:27,000 --> 00:57:30,000 ai ose ajo do të jetë në dyqan le parë. 1022 00:57:30,000 --> 00:57:32,000 Le ta bëjmë këtë. 1023 00:57:32,000 --> 00:57:35,000 Le të supozojmë se kjo është gjendja e radhës sime në këtë moment në kohë, dhe tani dyqan Apple 1024 00:57:35,000 --> 00:57:39,000 hap dhe personi i parë, numri 5, është udhëhequr në dyqan. 1025 00:57:39,000 --> 00:57:43,000 Si mund ta ndryshoj foton tani që kam de-queued personin e parë 1026 00:57:43,000 --> 00:57:47,000 në pjesën e përparme të linjës? 1027 00:57:47,000 --> 00:57:50,000 Çfarë është ajo? >> [Student] Ndryshimi radhë. 1028 00:57:50,000 --> 00:57:52,000 Ndrysho kokën, kështu 5 zhduket. 1029 00:57:52,000 --> 00:57:56,000 Në realitet, kjo është sikur-sa më të mirë për të bërë këtë? 1030 00:57:56,000 --> 00:58:00,000 Në realitet, kjo është sikur ky djalë zhduket. 1031 00:58:00,000 --> 00:58:03,000 Çfarë do të bëjë numrin 7 në një dyqan aktuale? 1032 00:58:03,000 --> 00:58:05,000 Ata do të marrin një hap të madh përpara. 1033 00:58:05,000 --> 00:58:08,000 >> Por ajo që kemi ardhur për të vlerësojmë kur është fjala për vargjeve 1034 00:58:08,000 --> 00:58:10,000 dhe lëviz gjërat përreth? 1035 00:58:10,000 --> 00:58:12,000 Kjo është lloj i një humbje e kohës tuaj, apo jo? 1036 00:58:12,000 --> 00:58:16,000 Pse ju duhet të jetë aq sa të keni anal personin e parë 1037 00:58:16,000 --> 00:58:21,000 në fillim të linjës në fillim të fizikisht të copë e kujtesës? 1038 00:58:21,000 --> 00:58:23,000 Kjo është krejtësisht e panevojshme. Pse? 1039 00:58:23,000 --> 00:58:26,000 Çfarë mund të unë vetëm kujtoj vend? >> [Përgjigja padëgjueshme Student] 1040 00:58:26,000 --> 00:58:30,000 Pikërisht, unë mund vetëm të kujtohet me këtë kokë shtesë dhënave anëtare 1041 00:58:30,000 --> 00:58:34,000 se tani kreu i listës nuk është më 0, e cila ishte një moment më parë. 1042 00:58:34,000 --> 00:58:39,000 Tani ajo është në të vërtetë numri 1. Në këtë mënyrë, unë të marrë një optimization lehtë. 1043 00:58:39,000 --> 00:58:44,000 Vetëm për shkak se unë kam de-queued dikush nga përputhje në fillim të rreshtit në dyqan Apple 1044 00:58:44,000 --> 00:58:47,000 nuk do të thotë të gjithë duhet të zhvendoset, e cila risjell është një operacion lineare. 1045 00:58:47,000 --> 00:58:50,000 Unë mund të në vend të kalojnë kohën konstante vetëm 1046 00:58:50,000 --> 00:58:53,000 dhe për të arritur më pas një përgjigje shumë më të shpejtë. 1047 00:58:53,000 --> 00:58:56,000 Por çmimi unë jam duke paguar është ajo për të fituar atë punën shtesë 1048 00:58:56,000 --> 00:58:58,000 dhe nuk ka për të zhvendosur të gjithë? 1049 00:58:58,000 --> 00:59:01,000 Po. >> [Përgjigja e padëgjueshme Student] 1050 00:59:01,000 --> 00:59:04,000 Mund të shtoni më shumë njerëz, mirë, se problemi është ortogonale 1051 00:59:04,000 --> 00:59:07,000 për faktin se ne nuk jemi zhvendosur njerëzit përreth. 1052 00:59:07,000 --> 00:59:11,000 Kjo është ende një grup, kështu që nëse ne nuk zhvendoset gjithë apo jo- 1053 00:59:11,000 --> 00:59:13,000 oh, unë shoh atë që ju thotë, në rregull. 1054 00:59:13,000 --> 00:59:16,000 Në fakt, unë jam dakord me atë që ju jeni duke thënë se në se ajo është pothuajse sikur 1055 00:59:16,000 --> 00:59:19,000 ne jemi tani kurrë nuk do të përdorin fillimin e këtij grup më 1056 00:59:19,000 --> 00:59:22,000 sepse në qoftë se unë heq 5, atëherë unë të hequr 7. 1057 00:59:22,000 --> 00:59:24,000 Por unë vetëm vënë njerëzit në të djathtë. 1058 00:59:24,000 --> 00:59:28,000 >> Ajo ndjehet si unë jam i humbur hapësirë, dhe përfundimisht radhë im disintegrates në asgjë në të gjitha, 1059 00:59:28,000 --> 00:59:31,000 kështu që ne mund të ketë vetëm njerëz wraparound, 1060 00:59:31,000 --> 00:59:35,000 dhe ne mund të mendojnë për këtë grup të vërtetë si një lloj strukture rrethore, 1061 00:59:35,000 --> 00:59:38,000 por ne përdorim atë operatori në C për të bërë këtë lloj të wraparound? 1062 00:59:38,000 --> 00:59:40,000 [Përgjigja e padëgjueshme Studenti] >> Operatori modulo. 1063 00:59:40,000 --> 00:59:43,000 Ajo do të jetë një bezdisshëm pak për të menduar se si do të bëni këtë wraparound, 1064 00:59:43,000 --> 00:59:46,000 por ne mund të bëjmë atë, dhe ne mund të fillojnë të vënë njerëzit në atë që përdoret për të jetë e përparme e linjës, 1065 00:59:46,000 --> 00:59:52,000 por ne vetëm mos harroni me këtë variabël kokë që kreu aktual i linjës të vërtetë është. 1066 00:59:52,000 --> 00:59:57,000 Çfarë ndodh nëse, në vend, në fund të fundit qëllimi ynë, megjithatë, 1067 00:59:57,000 --> 01:00:00,000 ishte që të shikoni numrat, siç bëmë këtu në skenë me Anita, 1068 01:00:00,000 --> 01:00:02,000 por ne të vërtetë duan të mirë të të gjitha këtyre botëve? 1069 01:00:02,000 --> 01:00:05,000 Ne duam më shumë se sofistikimit array lejon 1070 01:00:05,000 --> 01:00:09,000 sepse ne duam aftësinë për të dinamike rritet strukturën e të dhënave. 1071 01:00:09,000 --> 01:00:12,000 Por ne nuk duam të duhet të mbështetet në diçka që ne dukje 1072 01:00:12,000 --> 01:00:15,000 në leksionin e parë nuk ishte një algoritmi optimale, 1073 01:00:15,000 --> 01:00:17,000 se e kërkimit lineare. 1074 01:00:17,000 --> 01:00:21,000 Ajo rezulton se ju mund, në fakt, të arrijë 1075 01:00:21,000 --> 01:00:24,000 ose të paktën afër në kohë të vazhdueshme, ku dikush si Anita, 1076 01:00:24,000 --> 01:00:27,000 në qoftë se ajo konfiguron strukturën e saj të dhënave të mos jetë një listë e lidhur, 1077 01:00:27,000 --> 01:00:30,000 të mos jetë një pirg jo, të jetë një radhë, mund, në faktin, 1078 01:00:30,000 --> 01:00:33,000 dalë me një strukturë të dhënave që lejon të saj për të shikoni gjëra, 1079 01:00:33,000 --> 01:00:37,000 edhe fjalët, jo vetëm numrat, në atë që ne do të thërrasë kohë konstante. 1080 01:00:37,000 --> 01:00:40,000 >> Dhe në fakt, shikuar përpara, një nga psets në këtë klasë është pothuajse gjithmonë 1081 01:00:40,000 --> 01:00:43,000 një zbatim i një spellchecker, ku 1082 01:00:43,000 --> 01:00:46,000 ne ju jap përsëri disa fjalë 150.000 anglisht dhe qëllimi është që të 1083 01:00:46,000 --> 01:00:51,000 ngarkesës ato në kujtesën dhe me shpejtësi të jetë në gjendje për t'iu përgjigjur pyetjeve të formularit 1084 01:00:51,000 --> 01:00:54,000 po kjo fjalë shkruar drejt? 1085 01:00:54,000 --> 01:00:58,000 Dhe kjo me të vërtetë do të thith qoftë se keni pasur për të iterate nëpër të gjitha 150.000 fjalë për të përgjigjem se. 1086 01:00:58,000 --> 01:01:02,000 Por, në fakt, ne do të shohim se ne mund të bëjmë atë në kohë shumë, shumë të shpejtë. 1087 01:01:02,000 --> 01:01:06,000 Dhe kjo do të përfshijë diçka implementues quajtur një tavolinë hash, 1088 01:01:06,000 --> 01:01:09,000 dhe edhe pse në shikim të parë kjo gjë të quajtur një tabelë hash do të 1089 01:01:09,000 --> 01:01:12,000 le të arritur këto kohët super të shpejtë përgjigje, 1090 01:01:12,000 --> 01:01:18,000 rezulton se nuk është në fakt një problem. 1091 01:01:18,000 --> 01:01:23,000 Kur vjen koha për të zbatuar këtë gjë të quajtur-përsëri, unë jam duke bërë atë përsëri. 1092 01:01:23,000 --> 01:01:25,000 Unë jam i vetmi ketu. 1093 01:01:25,000 --> 01:01:28,000 Kur vjen koha për të zbatuar këtë gjë të quajtur një tabelë hash, 1094 01:01:28,000 --> 01:01:30,000 ne do të duhet të marrë një vendim. 1095 01:01:30,000 --> 01:01:32,000 Sa e madhe duhet të jetë e vërtetë kjo gjë? 1096 01:01:32,000 --> 01:01:36,000 Dhe kur ne fillojmë numrat futur në këtë tabelë hash, 1097 01:01:36,000 --> 01:01:38,000 se si do të shkojmë për të ruajtur ato në një mënyrë të tillë 1098 01:01:38,000 --> 01:01:42,000 që ne mund të merrni ato mbrapa sa më shpejt që kemi marrë ata në? 1099 01:01:42,000 --> 01:01:45,000 Por ne do të shohim para se të gjatë që kjo pyetje të 1100 01:01:45,000 --> 01:01:48,000 kur ditëlindjen të gjithëve është në klasë do të jetë mjaft i përshtatshëm. 1101 01:01:48,000 --> 01:01:51,000 Ajo rezulton se në këtë dhomë, ne kemi marrë disa qindra njerëz, 1102 01:01:51,000 --> 01:01:56,000 kështu që shanset që dy prej nesh kanë ditëlindjen njëjtë është ndoshta shumë e lartë. 1103 01:01:56,000 --> 01:01:58,000 Çfarë nëse ka pasur vetëm 40 prej nesh në këtë dhomë? 1104 01:01:58,000 --> 01:02:02,000 Cilat janë shanset e dy njerëzve që kanë të njëjtën ditëlindje? 1105 01:02:02,000 --> 01:02:04,000 [Studentët] Mbi 50%. 1106 01:02:04,000 --> 01:02:06,000 Po, mbi 50%. Në fakt, unë edhe solli një tabelë. 1107 01:02:06,000 --> 01:02:08,000 Kjo rezulton nga, dhe kjo është me të vërtetë vetëm një vjedhës preview- 1108 01:02:08,000 --> 01:02:12,000 në qoftë se ka vetëm 58 prej nesh në këtë sallë, probabiliteti i 2 prej nesh 1109 01:02:12,000 --> 01:02:16,000 ka të njëjtën ditëlindje është jashtëzakonisht i lartë, pothuajse 100%, 1110 01:02:16,000 --> 01:02:20,000 dhe kjo do të shkaktojë një bandë e tërë e lënduar për ne të mërkurën. 1111 01:02:20,000 --> 01:02:24,000 >> Me tha se, le të shtyjë këtu. Ne do të shihemi të mërkurën. 1112 01:02:24,000 --> 01:02:28,000 [Duartrokitje] 1113 01:02:28,000 --> 01:02:30,000 [CS50.TV]