1 00:00:00,000 --> 00:00:01,000 [Powered by Google Translate] [Pjesa 6] [More komode] 2 00:00:01,000 --> 00:00:04,000 [Rob Bowden] [Universiteti i Harvardit] 3 00:00:04,000 --> 00:00:09,000 [Kjo është CS50.] [CS50.TV] 4 00:00:09,000 --> 00:00:11,000 >> Ne mund të shkojnë në seksionin tonë të pyetjeve. 5 00:00:11,000 --> 00:00:17,000 I dërguar URL për hapësirën para. 6 00:00:17,000 --> 00:00:22,000 Fillimi i seksionit të pyetjeve them- 7 00:00:22,000 --> 00:00:26,000 me sa duket unë nuk jam plotësisht unsick-është një pyetje shumë e lehtë 8 00:00:26,000 --> 00:00:28,000 të vetëm atë që është Shprehje? 9 00:00:28,000 --> 00:00:30,000 Çfarë do Shprehje bëni? 10 00:00:30,000 --> 00:00:34,000 Çdokush doni të thoni se çfarë Shprehje bën? 11 00:00:34,000 --> 00:00:36,000 [Student] Verifikimet e kujtesës rrjedhjet. 12 00:00:36,000 --> 00:00:41,000 Po, është një checker Shprehje përgjithshëm kujtesës. 13 00:00:41,000 --> 00:00:44,000 Kjo, në fund, ju tregon se në qoftë se ju keni ndonjë rrjedhjet e kujtesës, 14 00:00:44,000 --> 00:00:49,000 e cila është më së shumti atë që ne jemi duke e përdorur atë për shkak se në qoftë se ju doni të 15 00:00:49,000 --> 00:00:54,000 të bëjë mirë në setin e problemit, ose në qoftë se ju doni të 16 00:00:54,000 --> 00:00:59,000 të marrë në bordin e madhe, ju duhet të keni asnjë lloj rrjedhjet e kujtesës, 17 00:00:59,000 --> 00:01:01,000 dhe në rast se ju keni një rrjedhje kujtesës që ju nuk mund ta gjeni, 18 00:01:01,000 --> 00:01:04,000 Gjithashtu mbani në mend se sa herë që ju të hapur një skedë 19 00:01:04,000 --> 00:01:07,000 dhe në qoftë se ju nuk e mbyllni atë, kjo është një rrjedhje kujtim. 20 00:01:07,000 --> 00:01:10,000 >> Shumë njerëz janë në kërkim për disa nyje që ata nuk janë liruar 21 00:01:10,000 --> 00:01:15,000 kur me të vërtetë, ata nuk e mbyll fjalor në hapin e parë. 22 00:01:15,000 --> 00:01:19,000 Ai gjithashtu ju tregon se në qoftë se ju keni ndonjë pavlefshme lexon apo shkruan, 23 00:01:19,000 --> 00:01:22,000 që do të thotë në qoftë se ju provoni dhe të vendosur një vlerë 24 00:01:22,000 --> 00:01:26,000 që është përtej fund të tog dhe kjo nuk ndodh për faj Seg 25 00:01:26,000 --> 00:01:30,000 por Shprehje kap atë, si ju nuk duhet të vërtetë të jetë me shkrim atje, 26 00:01:30,000 --> 00:01:33,000 dhe kështu ju nuk duhet të ketë patjetër ndonjë nga ato ose. 27 00:01:33,000 --> 00:01:38,000 Si mund të përdorni Shprehje? 28 00:01:38,000 --> 00:01:42,000 Si mund të përdorni Shprehje? 29 00:01:42,000 --> 00:01:45,000 >> Kjo është një pyetje e përgjithshme e 30 00:01:45,000 --> 00:01:49,000 lloj i drejtuar atë dhe të kërkoni në prodhim. 31 00:01:49,000 --> 00:01:51,000 Prodhimi është e madhe shumë herë. 32 00:01:51,000 --> 00:01:54,000 Ka edhe gabime fun ku në qoftë se ju keni ndonjë gjë tmerrësisht e gabuar 33 00:01:54,000 --> 00:01:59,000 ndodh në një lak, atëherë ai do të thotë: "Rruga gabime shumë. 34 00:01:59,000 --> 00:02:03,000 Unë jam duke shkuar për të ndaluar numërimin tani. " 35 00:02:03,000 --> 00:02:08,000 Kjo është në thelb prodhimit tekstuale që ju duhet të kuptoj. 36 00:02:08,000 --> 00:02:13,000 Në fund, ai do t'ju tregojë ndonjë rrjedhjet e kujtesës që ju keni, 37 00:02:13,000 --> 00:02:16,000 sa blloqe, të cilat mund të jenë të dobishme për shkak se 38 00:02:16,000 --> 00:02:20,000 në qoftë se ajo është një unfreed bllok, atëherë ajo është zakonisht më e lehtë për të gjetur 39 00:02:20,000 --> 00:02:23,000 se 1.000 blloqe unfreed. 40 00:02:23,000 --> 00:02:26,000 1.000 bllokon unfreed ndoshta do të thotë që ju nuk jeni të liruar 41 00:02:26,000 --> 00:02:30,000 listat tuaja të lidhura e pakicës ose diçka. 42 00:02:30,000 --> 00:02:32,000 Kjo është Shprehje. 43 00:02:32,000 --> 00:02:35,000 >> Tani ne kemi pjesën tonë të pyetjeve, 44 00:02:35,000 --> 00:02:38,000 që ju nuk keni nevojë për të shkarkuar. 45 00:02:38,000 --> 00:02:41,000 Ju mund të klikoni mbi emrin tim dhe tërheqja e tyre deri në hapësirë. 46 00:02:41,000 --> 00:02:44,000 Tani klikoni mbi mua. 47 00:02:44,000 --> 00:02:46,000 Rishikimi 1 do të jetë i rafte, të cilat ne jemi duke bërë para. 48 00:02:46,000 --> 00:02:55,000 Revizioni 2 do të jetë radhë, dhe Revision 3 do të jetë lista e veçmas të lidhura. 49 00:02:55,000 --> 00:02:58,000 Duke filluar me rafte tonë. 50 00:02:58,000 --> 00:03:02,000 Si ajo thotë se këtu, një pirg është një nga më themelore, 51 00:03:02,000 --> 00:03:07,000 dhënat themelore strukturat e shkencës kompjuterike. 52 00:03:07,000 --> 00:03:11,000 Shembulli shumë prototipike është 53 00:03:11,000 --> 00:03:13,000 rafte e tabaka në sallë ngrënie. 54 00:03:13,000 --> 00:03:16,000 Kjo është në thelb kur ju jeni duke u futur në një pirg, 55 00:03:16,000 --> 00:03:20,000 dikush do të thonë, "Oh, si një pirg e tabaka." 56 00:03:20,000 --> 00:03:22,000 Ju rafte tabaka deri. 57 00:03:22,000 --> 00:03:24,000 Atëherë kur ju shkoni për të tërhequr një tabaka, 58 00:03:24,000 --> 00:03:31,000 tabaka parë që është duke u tërhequr është i fundit që është vënë në rafte. 59 00:03:31,000 --> 00:03:34,000 Rafte si ajo gjithashtu-thotë këtu- 60 00:03:34,000 --> 00:03:37,000 ne kemi segmentin e kujtesës quajtur rafte. 61 00:03:37,000 --> 00:03:40,000 Dhe pse është quajtur rafte? 62 00:03:40,000 --> 00:03:42,000 >> Sepse si një strukturë të dhënave rafte, 63 00:03:42,000 --> 00:03:46,000 ajo shtyn dhe pops korniza rafte në rafte, 64 00:03:46,000 --> 00:03:53,000 ku korniza rafte janë si një thirrje të veçantë të një funksioni. 65 00:03:53,000 --> 00:03:57,000 Dhe si një pirg, ju gjithmonë do të keni për të kthyer 66 00:03:57,000 --> 00:04:03,000 nga një telefonatë funksion para se ju mund të merrni poshtë në korniza rafte ulta përsëri. 67 00:04:03,000 --> 00:04:08,000 Ju nuk mund të ketë kryesor thirrje foo bar thirrjes dhe kthimin bar të drejtpërdrejt kryesore. 68 00:04:08,000 --> 00:04:14,000 Është gjithmonë e mori për të ndjekur rafte correct shtyjnë dhe popping. 69 00:04:14,000 --> 00:04:18,000 Dy operacione, siç thashë, janë shtytje dhe pop. 70 00:04:18,000 --> 00:04:20,000 Ata janë terma universale. 71 00:04:20,000 --> 00:04:26,000 Ju duhet të dini shtytje dhe pop në aspektin e oxhaqet pa marrë parasysh se çfarë. 72 00:04:26,000 --> 00:04:28,000 Ne do të shohim rradhë janë lloj i ndryshëm. 73 00:04:28,000 --> 00:04:32,000 Ajo nuk ka të vërtetë kanë një term universal, por shtytje dhe pop janë universale për oxhaqet. 74 00:04:32,000 --> 00:04:34,000 Push është vënë vetëm në rafte. 75 00:04:34,000 --> 00:04:37,000 Pop është marrë jashtë rafte. 76 00:04:37,000 --> 00:04:43,000 Dhe ne shohim këtu kemi typedef pirg tonë struct, 77 00:04:43,000 --> 00:04:46,000 kështu që ne kemi vargjet char **. 78 00:04:46,000 --> 00:04:51,000 A nuk merrni frikësuar nga ndonjë **. 79 00:04:51,000 --> 00:04:54,000 Kjo do të përfundojë si një grup i strings 80 00:04:54,000 --> 00:04:58,000 ose një grup i pointers tek karaktereve, ku 81 00:04:58,000 --> 00:05:00,000 pointers karaktere priren të jenë vargjet. 82 00:05:00,000 --> 00:05:05,000 Ajo nuk duhet të jetë vargjet, por këtu, ata do të jenë vargjet. 83 00:05:05,000 --> 00:05:08,000 >> Ne kemi një grup të strings. 84 00:05:08,000 --> 00:05:14,000 Ne kemi një madhësi, e cila përfaqëson sa elemente janë aktualisht në rafte, 85 00:05:14,000 --> 00:05:19,000 dhe pastaj ne kemi kapacitet, e cila është sa elemente mund të jetë në rafte. 86 00:05:19,000 --> 00:05:22,000 Kapaciteti duhet të nisem si diçka të madhe se 1, 87 00:05:22,000 --> 00:05:27,000 por madhësia do të nisem si 0. 88 00:05:27,000 --> 00:05:36,000 Tani, ka në thelb tre mënyra të ndryshme ju mund të mendoni një pirg. 89 00:05:36,000 --> 00:05:39,000 E pra, nuk janë ndoshta më shumë, por të dy rrugët kryesore janë 90 00:05:39,000 --> 00:05:43,000 ju mund të zbatojë atë duke përdorur një rrjet, ose ju mund të zbatojë atë duke përdorur një listë e lidhur. 91 00:05:43,000 --> 00:05:48,000 Listat e lidhura janë lloj i parëndësishëm për të bërë paratë nga. 92 00:05:48,000 --> 00:05:51,000 Ajo është shumë e lehtë për të bërë një pirg duke përdorur listat e lidhura, 93 00:05:51,000 --> 00:05:55,000 kështu që këtu, ne jemi duke shkuar për të bërë një pirg përdorur vargjeve, 94 00:05:55,000 --> 00:05:59,000 dhe pastaj duke përdorur vargjeve, ka edhe dy mënyra që ju mund të mendoni për atë. 95 00:05:59,000 --> 00:06:01,000 Më parë, kur kam thënë ne kemi një kapacitet për rafte, 96 00:06:01,000 --> 00:06:04,000 kështu që ne mund të përshtatet një element në rafte. 97 00:06:04,000 --> 00:06:09,000 >> Një mënyrë kjo mund të ndodhë është sa më shpejt që ju goditi 10 elemente, atëherë ju jeni bërë. 98 00:06:09,000 --> 00:06:13,000 Ju mund të dini se ka një sipërme të detyruar të 10 gjërat në botë 99 00:06:13,000 --> 00:06:16,000 se ju nuk do të ketë më shumë se 10 gjërat në rafte tuaj, 100 00:06:16,000 --> 00:06:20,000 në të cilin rast ju mund të ketë një sipërme të lidhur në madhësinë e rafte tuaj. 101 00:06:20,000 --> 00:06:23,000 Ose ju mund të ketë rafte tuaj të pakufizuar, 102 00:06:23,000 --> 00:06:27,000 por në qoftë se ju jeni duke bërë një grup, që do të thotë se çdo herë të vetme që ju goditi 10 elemente, 103 00:06:27,000 --> 00:06:29,000 atëherë ju jeni do të duhet të rritet në 20 elementeve, dhe kur ju goditi 20 elemente, 104 00:06:29,000 --> 00:06:33,000 ju jeni do të duhet të rritet tuaj për rrjet të 30 elementeve ose 40 elemente. 105 00:06:33,000 --> 00:06:37,000 Ju do të jeni nevojë për të rritur kapacitetin, e cila është ajo që ne jemi duke shkuar për të bërë këtu. 106 00:06:37,000 --> 00:06:40,000 Çdo herë të vetme kemi arritur madhësinë maksimale të rafte tonë, 107 00:06:40,000 --> 00:06:46,000 kur ne shtytje diçka tjetër me radhë, ne do të duhet për të rritur kapacitetin. 108 00:06:46,000 --> 00:06:50,000 Këtu, ne kemi deklaruar si shtytje shtytje bool (char * rr). 109 00:06:50,000 --> 00:06:54,000 Str char * është vargu që ne jemi duke kërkuar mbi rafte, 110 00:06:54,000 --> 00:06:58,000 bool dhe vetëm thotë se ne kemi pasur sukses apo ka dështuar. 111 00:06:58,000 --> 00:07:00,000 >> Si mund të dështojnë? 112 00:07:00,000 --> 00:07:04,000 Çfarë është rrethanë e vetme që ju mund të mendoni 113 00:07:04,000 --> 00:07:07,000 ku ne do të duhet të kthehen rreme? 114 00:07:07,000 --> 00:07:09,000 Po. 115 00:07:09,000 --> 00:07:12,000 [Student] Nëse është e plotë dhe ne jemi duke përdorur një zbatim të kufizohet. 116 00:07:12,000 --> 00:07:17,000 Yeah, kështu që si mund të përcaktojë, ai u përgjigj 117 00:07:17,000 --> 00:07:23,000 nëse është e plotë dhe ne jemi duke përdorur një zbatim të kufizohet. 118 00:07:23,000 --> 00:07:26,000 Pastaj ne patjetër do të kthehen rreme. 119 00:07:26,000 --> 00:07:31,000 Sa më shpejt që ne e goditi 10 gjërat në grup, ne nuk mund të përshtatet 11, kështu që ne të kthehen rreme. 120 00:07:31,000 --> 00:07:32,000 Çfarë nëse ajo është e pakufizuar? Po. 121 00:07:32,000 --> 00:07:38,000 Nëse ju nuk mund të zgjerohet rrjet për disa arsye. 122 00:07:38,000 --> 00:07:43,000 Yeah, kështu që kujtesa është një burim i kufizuar, 123 00:07:43,000 --> 00:07:51,000 dhe përfundimisht, në qoftë se ne të mbajtur gjërat shtyjnë mbi rafte pa pushim, 124 00:07:51,000 --> 00:07:54,000 ne jemi duke shkuar për të përpiqen dhe të ndajë një koleksion të madh të përshtaten 125 00:07:54,000 --> 00:07:59,000 kapaciteti më i madh, dhe malloc apo çfarëdo që ne jemi duke përdorur do të kthehet rreme. 126 00:07:59,000 --> 00:08:02,000 E pra, malloc do të kthehen null. 127 00:08:02,000 --> 00:08:05,000 >> Mos harroni, çdo herë të vetme thirrur ju kurrë malloc, ju duhet të kontrolluar për të parë nëse ajo 128 00:08:05,000 --> 00:08:12,000 kthen null ose tjetër që është një zbritje korrektësia. 129 00:08:12,000 --> 00:08:17,000 Që nga viti ne duam të kemi një pirg i pakufizuar, 130 00:08:17,000 --> 00:08:21,000 rasti i vetëm që ne jemi duke shkuar për të kthyer rreme është nëse ne përpiqemi të 131 00:08:21,000 --> 00:08:26,000 rritjen e kapacitetit dhe malloc ose çfarëdo kthehet rreme. 132 00:08:26,000 --> 00:08:30,000 Pastaj pop merr asnjë argumente, 133 00:08:30,000 --> 00:08:37,000 dhe ajo kthen vargun që është në krye të rafte. 134 00:08:37,000 --> 00:08:41,000 Çfarëdo që është më së fundi shtyrë në rafte është ajo që pop është kthyer, 135 00:08:41,000 --> 00:08:44,000 dhe ajo gjithashtu heq atë nga rafte. 136 00:08:44,000 --> 00:08:50,000 Dhe vini re se ajo kthehet null nëse nuk ka asgjë në rafte. 137 00:08:50,000 --> 00:08:53,000 Ajo është gjithmonë e mundur që rafte është bosh. 138 00:08:53,000 --> 00:08:55,000 Në Java, nëse ju jeni duke përdorur për këtë, apo të gjuhëve të tjera, 139 00:08:55,000 --> 00:09:01,000 duke u përpjekur për të pop nga një pirg të zbrazët mund të shkaktojë një përjashtim apo diçka. 140 00:09:01,000 --> 00:09:09,000 >> Por në C, null është lloj i një shumë prej rasteve se si kemi trajtuar këto probleme. 141 00:09:09,000 --> 00:09:13,000 Kthyer null është se si ne jemi duke shkuar për të ditur se rafte ishte bosh. 142 00:09:13,000 --> 00:09:16,000 Ne kemi dhënë kodin që do të testojë funksionalitetin rafte tuaj, 143 00:09:16,000 --> 00:09:19,000 zbatuar shtytje dhe pop. 144 00:09:19,000 --> 00:09:23,000 Kjo nuk do të jetë një shumë të kodit. 145 00:09:23,000 --> 00:09:40,000 Unë do-fakt, para se të bëjmë këtë, hint, hint- 146 00:09:40,000 --> 00:09:44,000 në qoftë se ju nuk e keni parë atë, malloc nuk është funksion i vetëm 147 00:09:44,000 --> 00:09:47,000 që ndan kujtesës në grumbull për ju. 148 00:09:47,000 --> 00:09:51,000 Nuk janë një familje e funksioneve shenjat e. 149 00:09:51,000 --> 00:09:53,000 E para është malloc, të cilat ju jeni duke përdorur për të. 150 00:09:53,000 --> 00:09:56,000 Pastaj ka calloc, e cila e bën të njëjtën gjë si malloc, 151 00:09:56,000 --> 00:09:59,000 por ajo do të zero gjithçka për ju. 152 00:09:59,000 --> 00:10:04,000 Nëse ju keni kërkuar ndonjëherë për të vendosur gjithçka null pas mallocing diçka 153 00:10:04,000 --> 00:10:06,000 ju duhet të keni përdorur vetëm calloc në vendin e parë në vend e të shkruarit 154 00:10:06,000 --> 00:10:09,000 një për lak në zero nga bllok të tërë të kujtesës. 155 00:10:09,000 --> 00:10:15,000 >> Realloc është si malloc dhe ka një shumë të raste të veçanta, 156 00:10:15,000 --> 00:10:19,000 por në thelb ajo që bën është realloc 157 00:10:19,000 --> 00:10:24,000 ajo merr një tregues se tashmë ishte ndarë. 158 00:10:24,000 --> 00:10:27,000 Realloc është funksion që ju duan të jenë të paguar vëmendje këtu. 159 00:10:27,000 --> 00:10:31,000 Ajo merr një tregues që tashmë ishte kthyer nga malloc. 160 00:10:31,000 --> 00:10:35,000 Le të thonë se ju të kërkojë nga malloc një tregues prej 10 bytes. 161 00:10:35,000 --> 00:10:38,000 Pastaj më vonë ti e kupton që ju të kërkuar 20 bytes, 162 00:10:38,000 --> 00:10:42,000 kështu që ju telefononi realloc në atë treguesin me 20 bytes, 163 00:10:42,000 --> 00:10:47,000 realloc dhe automatikisht do të kopjoni mbi çdo gjë për ju. 164 00:10:47,000 --> 00:10:51,000 Nëse ju vetëm e quajti malloc përsëri, si unë kam një bllok prej 10 bytes. 165 00:10:51,000 --> 00:10:53,000 Tani kam nevojë për një bllok prej 20 bytes, 166 00:10:53,000 --> 00:10:58,000 kështu që nëse unë malloc 20 bytes, atëherë unë kam në dorë kopje Gjatë 10 bytes nga gjëja e parë 167 00:10:58,000 --> 00:11:01,000 në gjë të dytë dhe pastaj të lirë gjëja e parë. 168 00:11:01,000 --> 00:11:04,000 Realloc që do të merret për ju. 169 00:11:04,000 --> 00:11:11,000 >> Njoftim nënshkrimi do të jetë e pavlefshme *, 170 00:11:11,000 --> 00:11:15,000 e cila është vetëm një tregues kthyer në bllokun e kujtesës, 171 00:11:15,000 --> 00:11:17,000 pastaj pavlefshme * ptr. 172 00:11:17,000 --> 00:11:22,000 Ju mund të mendoni * void si një tregues gjenerike. 173 00:11:22,000 --> 00:11:27,000 Në përgjithësi, ju kurrë nuk merren me * void, 174 00:11:27,000 --> 00:11:30,000 por malloc po kthehet një * void, dhe pastaj ajo është përdorur vetëm si 175 00:11:30,000 --> 00:11:34,000 kjo është në të vërtetë do të jetë një char *. 176 00:11:34,000 --> 00:11:37,000 E * void mëparshme që ishin kthyer nga malloc 177 00:11:37,000 --> 00:11:41,000 tani do të jetë për të kaluar realloc, dhe pastaj madhësia 178 00:11:41,000 --> 00:11:49,000 është numri i ri i bytes ju doni të caktojë, kështu që kapaciteti i juaj i ri. 179 00:11:49,000 --> 00:11:57,000 Unë do të ju jap disa minuta, dhe të bëjë atë në hapësirën tonë. 180 00:11:57,000 --> 00:12:02,000 Filloni me Revision 1. 181 00:12:16,000 --> 00:12:21,000 Unë do t'ju ndalojë, pasi shpresë rreth kohë të mjaftueshme për të zbatuar shtytje, 182 00:12:21,000 --> 00:12:24,000 dhe pastaj unë do të ju jap një pushim për të bërë pop. 183 00:12:24,000 --> 00:12:27,000 Por me të vërtetë nuk është se kodi shumë në të gjitha. 184 00:12:27,000 --> 00:12:35,000 Kodi është ndoshta më e stuff zgjeruar, zgjeruar kapacitetin. 185 00:12:35,000 --> 00:12:39,000 Mirë, nuk ka presion për t'u bërë plotësisht, 186 00:12:39,000 --> 00:12:47,000 por për aq kohë sa ju të ndjeni sikur ju jeni në rrugën e drejtë, kjo është e mirë. 187 00:12:47,000 --> 00:12:53,000 >> A ka dikush ndonjë kod ata ndjehen rehat me mua tërhequr lart? 188 00:12:53,000 --> 00:12:59,000 Po, unë do të, por ka njeri të ketë ndonjë kod unë mund të tërheqë deri? 189 00:12:59,000 --> 00:13:05,000 Mirë, ju mund të fillojë, për të shpëtuar atë, çfarëdo qoftë ajo është? 190 00:13:05,000 --> 00:13:09,000 Unë gjithmonë harrojmë atë hap. 191 00:13:09,000 --> 00:13:15,000 Mirë, në kërkim në shtytje, 192 00:13:15,000 --> 00:13:18,000 nuk ju duan të shpjegojë kodin tuaj? 193 00:13:18,000 --> 00:13:24,000 [Student] Para së gjithash, unë u rrit madhësinë. 194 00:13:24,000 --> 00:13:28,000 I guess ndoshta unë duhet të ketë se-gjithsesi, kam rritur madhësinë, 195 00:13:28,000 --> 00:13:31,000 dhe unë të shohim nëse ajo është më pak se sa kapacitetin. 196 00:13:31,000 --> 00:13:36,000 Dhe në qoftë se ajo është më pak se kapaciteti, shtoj në grup që ne tashmë kemi. 197 00:13:36,000 --> 00:13:42,000 Dhe në qoftë se kjo nuk është, unë shumohen kapacitet prej 2, 198 00:13:42,000 --> 00:13:50,000 dhe unë rirezervoj array strings për diçka me një madhësi më të madhe të kapaciteteve tani. 199 00:13:50,000 --> 00:13:55,000 Dhe pastaj, nëse kjo dështon, unë them përdorues dhe kthimit të rreme, 200 00:13:55,000 --> 00:14:04,000 dhe në qoftë se kjo është në rregull, atëherë unë vënë string në vend të ri. 201 00:14:04,000 --> 00:14:07,000 >> [Rob B.] Gjithashtu vini re se ne kemi përdorur një operator bukur bitwise këtu 202 00:14:07,000 --> 00:14:09,000 të shumohen nga 2. 203 00:14:09,000 --> 00:14:11,000 Mos harroni, zhvendosje majtas është gjithmonë do të shumëzohet me 2. 204 00:14:11,000 --> 00:14:15,000 Zhvendosja e drejtë është e ndarë nga 2 për aq kohë sa ju të mbani mend se kjo do të thotë 205 00:14:15,000 --> 00:14:18,000 ndani me 2 në një numër të plotë të ndarë me 2. 206 00:14:18,000 --> 00:14:20,000 Kjo mund të shkurtoj një 1 këtu apo atje. 207 00:14:20,000 --> 00:14:26,000 Por ndryshim lënë nga 1 është gjithmonë do të shumëzohen me 2, 208 00:14:26,000 --> 00:14:32,000 nëse del nga shtrati kufijtë e numër të plotë, dhe atëherë ajo nuk do të jetë. 209 00:14:32,000 --> 00:14:34,000 Një koment anë. 210 00:14:34,000 --> 00:14:39,000 Më pëlqen të bëj-kjo nuk do të ndryshojë coding çdo mënyrë çdo gjë, 211 00:14:39,000 --> 00:14:48,000 por unë doja të bëjë diçka si kjo. 212 00:14:48,000 --> 00:14:51,000 Ajo në fakt është duke shkuar për ta bërë atë pak më të gjatë. 213 00:15:04,000 --> 00:15:08,000 Ndoshta kjo nuk është rasti i përsosur për të treguar këtë, 214 00:15:08,000 --> 00:15:14,000 por unë doja të segmentit atë në këto blloqe të- 215 00:15:14,000 --> 00:15:17,000 rregull, nëse kjo nëse ndodh, atëherë unë jam duke shkuar për të bërë diçka, 216 00:15:17,000 --> 00:15:19,000 dhe pastaj funksioni është bërë. 217 00:15:19,000 --> 00:15:22,000 Unë nuk kam nevojë për të pastaj lëvizni sytë e mi të gjithë rrugën poshtë funksionit 218 00:15:22,000 --> 00:15:25,000 për të parë se çfarë ndodh pas tjetër. 219 00:15:25,000 --> 00:15:27,000 Kjo është nëse kjo ndodh, nëse, atëherë unë vetëm të kthehet. 220 00:15:27,000 --> 00:15:30,000 Ajo gjithashtu ka shtuar dobi të bukur çdo gjë përtej kësaj 221 00:15:30,000 --> 00:15:33,000 është zhvendosur tani lënë një herë. 222 00:15:33,000 --> 00:15:40,000 Unë nuk duhet të-nëse ndonjëherë pranë qesharake linjave të gjata, 223 00:15:40,000 --> 00:15:45,000 pastaj ato 4 bytes mund të ndihmojë, dhe gjithashtu diçka më të majtë është, 224 00:15:45,000 --> 00:15:48,000 më pak të tronditur të ndiheni, nëse pëlqen-rregull, unë kam për të kujtuar 225 00:15:48,000 --> 00:15:53,000 Unë jam aktualisht në një lak, ndërsa në brendësi të një tjetër brenda e një për lak. 226 00:15:53,000 --> 00:15:58,000 Kudo që ju mund ta bëni këtë menjëherë kthimin, unë lloj i si. 227 00:15:58,000 --> 00:16:05,000 Kjo është krejtësisht fakultative dhe nuk pritet që në asnjë mënyrë. 228 00:16:05,000 --> 00:16:12,000 >> [Student] A duhet të ketë një madhësi - në gjendje të dështojnë? 229 00:16:12,000 --> 00:16:19,000 Gjendja dështojnë këtu është që ne nuk realloc, kështu që po. 230 00:16:19,000 --> 00:16:22,000 Vini re se si në gjendje të dështojnë, me sa duket, 231 00:16:22,000 --> 00:16:26,000 nëse ne sende të lirë më vonë, ne jemi gjithmonë do të dështojë 232 00:16:26,000 --> 00:16:29,000 nuk ka rëndësi se sa herë që ne të përpiqemi për të shtyrë diçka. 233 00:16:29,000 --> 00:16:32,000 Nëse ne vazhdojmë të shtyjnë, ne kemi mbajtur madhësinë e bën rritjen, 234 00:16:32,000 --> 00:16:36,000 edhe pse ne nuk jemi vënë asgjë mbi rafte. 235 00:16:36,000 --> 00:16:39,000 Zakonisht ne nuk rritje madhësinë deri 236 00:16:39,000 --> 00:16:43,000 pasi ne kemi sukses vënë atë në rafte. 237 00:16:43,000 --> 00:16:50,000 Ne do të bëjmë atë, të themi, qoftë këtu dhe këtu. 238 00:16:50,000 --> 00:16:56,000 Dhe pastaj në vend të thënë s.size ≤ kapacitet, kjo është më pak se kapaciteteve, 239 00:16:56,000 --> 00:17:01,000 vetëm për shkak se ne kemi lëvizur ku çdo gjë ishte. 240 00:17:01,000 --> 00:17:07,000 >> Dhe mbani mend, vendin e vetëm që ne ndoshta mund të kthehet të rreme 241 00:17:07,000 --> 00:17:14,000 është këtu, ku realloc kthye null, 242 00:17:14,000 --> 00:17:19,000 dhe në qoftë se ju ndodh që të mbani mend gabim standarde, 243 00:17:19,000 --> 00:17:22,000 ndoshta ju mund të konsideroni këtë një rast ku ju doni të printoni një gabim standarde, 244 00:17:22,000 --> 00:17:26,000 Printf kështu fprintf në vend të vetëm direkt në shtypjen jashtë standardit. 245 00:17:26,000 --> 00:17:31,000 Përsëri, kjo nuk është një pritje, por në qoftë se ajo është një gabim, 246 00:17:31,000 --> 00:17:41,000 printf shkruani, atëherë ju mund të dëshironi të bëni të shtypura të gabimit standarde në vend e jashtë standardit. 247 00:17:41,000 --> 00:17:44,000 >> Çdokush keni ndonjë gjë tjetër për të konstatojmë? Po. 248 00:17:44,000 --> 00:17:47,000 [Student] Mund të ju shkoni mbi [e padëgjueshme]? 249 00:17:47,000 --> 00:17:55,000 [Rob B.] Po, binariness aktual i saj ose vetëm çfarë është ajo? 250 00:17:55,000 --> 00:17:57,000 [Student] Kështu që ju të shumohen atë me 2? 251 00:17:57,000 --> 00:17:59,000 [Rob B.] Po, në thelb. 252 00:17:59,000 --> 00:18:11,000 Në vendin binar, ne gjithmonë kemi vendosur tonë të shifrave. 253 00:18:11,000 --> 00:18:22,000 Zhvendosja Kjo la nga 1 thelb fut atë këtu në anën e djathtë. 254 00:18:22,000 --> 00:18:25,000 Mbrapsht në këtë, vetëm duke kujtuar se gjithçka në binar 255 00:18:25,000 --> 00:18:28,000 është një energji e 2, kështu që kjo përfaqëson 2 me 0, 256 00:18:28,000 --> 00:18:30,000 kjo 2 në 1, kjo 2 në 2. 257 00:18:30,000 --> 00:18:33,000 Duke futur një 0 në anën e djathtë tani, ne vetëm zhvendoset gjithçka gjatë. 258 00:18:33,000 --> 00:18:38,000 Atë që përdoret për të jetë 2 në 0 është tani 2 me 1, është 2 në 2. 259 00:18:38,000 --> 00:18:41,000 Ana e drejtë që ne të futur 260 00:18:41,000 --> 00:18:44,000 është domosdoshmërisht do të jetë 0, 261 00:18:44,000 --> 00:18:46,000 gjë që e bën kuptim. 262 00:18:46,000 --> 00:18:49,000 Nëse ndonjëherë të shumohen një numër me 2, kjo nuk do të përfundojë deri çuditshme, 263 00:18:49,000 --> 00:18:54,000 kështu në vendin e 2 0 duhet të jetë 0, 264 00:18:54,000 --> 00:18:59,000 dhe kjo është ajo që unë gjysma paralajmëroi për para është nëse ju do të ndodhë të zhvendoset 265 00:18:59,000 --> 00:19:01,000 përtej numrin e bit në një numër të plotë, 266 00:19:01,000 --> 00:19:04,000 atëherë kjo është 1 do të përfundojnë duke shkuar jashtë. 267 00:19:04,000 --> 00:19:10,000 Kjo është e vetmja merak nëse ju ndodh që të merret me kapacitete të vërtetë të mëdha. 268 00:19:10,000 --> 00:19:15,000 Por në këtë pikë, atëherë ju jeni që kanë të bëjnë me një grup të miliarda gjërave, 269 00:19:15,000 --> 00:19:25,000 të cilat nuk mund të përshtaten në kujtesën anyway. 270 00:19:25,000 --> 00:19:31,000 >> Tani ne mund të merrni për të pop, e cila është edhe më e lehtë. 271 00:19:31,000 --> 00:19:36,000 Ju mund të bëni atë si në qoftë se ju ndodh që të pop një bandë e tërë, 272 00:19:36,000 --> 00:19:38,000 dhe tani ju jeni në gjysmë kapacitet përsëri. 273 00:19:38,000 --> 00:19:42,000 Ju mund të tkurret realloc sasinë e kujtesës keni, 274 00:19:42,000 --> 00:19:47,000 por ju nuk duhet të shqetësohen për këtë, kështu që rasti i vetëm realloc do të jetë 275 00:19:47,000 --> 00:19:50,000 rritje kujtesës, kurrë pakësuar kujtesës, 276 00:19:50,000 --> 00:19:59,000 e cila do të bëjë super pop lehtë. 277 00:19:59,000 --> 00:20:02,000 Tani rradhë, të cilat do të jetë si oxhaqet, 278 00:20:02,000 --> 00:20:06,000 por me qëllim që ju të merrni gjërat jashtë është i kundërt. 279 00:20:06,000 --> 00:20:10,000 Shembulli i një prototipike radhë është një linjë, 280 00:20:10,000 --> 00:20:12,000 kështu që unë mendoj në qoftë se keni qenë Anglisht, unë do të kisha thënë 281 00:20:12,000 --> 00:20:17,000 një shembull prototipike i një radhë është një radhë. 282 00:20:17,000 --> 00:20:22,000 Pra, si një linjë, në qoftë se ju jeni personi i parë në linjë, 283 00:20:22,000 --> 00:20:24,000 ju presim të jetë personi i parë nga linjë. 284 00:20:24,000 --> 00:20:31,000 Nëse ju jeni personi i fundit në rresht, ju do të jetë personi i fundit shërbim. 285 00:20:31,000 --> 00:20:35,000 Ne e quajmë atë model FIFO, ndërsa rafte ishte model LIFO. 286 00:20:35,000 --> 00:20:40,000 Këto fjalë janë goxha universale. 287 00:20:40,000 --> 00:20:46,000 >> Ashtu si oxhaqet dhe ndryshe vargjeve, rradhë në mënyrë tipike nuk do të lejojë qasje në elementet në mes. 288 00:20:46,000 --> 00:20:50,000 Këtu, një pirg, ne kemi shtytje dhe pop. 289 00:20:50,000 --> 00:20:54,000 Këtu, ne të ndodhë të ketë thirrje atyre enqueue dhe dequeue. 290 00:20:54,000 --> 00:20:58,000 Unë kam dëgjuar gjithashtu ato të quhet ndryshim dhe unshift. 291 00:20:58,000 --> 00:21:02,000 Unë kam dëgjuar njerëz që thonë shtytje dhe pop që gjithashtu zbatohet për radhët e gjata. 292 00:21:02,000 --> 00:21:05,000 Unë kam dëgjuar insert, hequr, 293 00:21:05,000 --> 00:21:11,000 kështu që të shtyjë dhe pop, nëse ju jeni duke folur në lidhje me oxhaqet, ju jeni duke kërkuar dhe popping. 294 00:21:11,000 --> 00:21:16,000 Nëse ju jeni duke folur në lidhje me radhët e gjata, ju mund të marr fjalët që ju doni të përdorni 295 00:21:16,000 --> 00:21:23,000 për futje dhe heqjen, dhe nuk ka konsensus mbi atë që duhet të quhet. 296 00:21:23,000 --> 00:21:27,000 Por këtu, ne kemi enqueue dhe dequeue. 297 00:21:27,000 --> 00:21:37,000 Tani, struct duket pothuajse identik me struct rafte. 298 00:21:37,000 --> 00:21:40,000 Por ne duhet të mbajnë gjurmët e kokës. 299 00:21:40,000 --> 00:21:44,000 I guess ajo thotë se këtu poshtë, por pse nuk kemi nevojë për kokë? 300 00:21:53,000 --> 00:21:57,000 Prototipa janë në thelb të njëjta për të nxitur dhe pop. 301 00:21:57,000 --> 00:21:59,000 Ju mund të mendoni për atë si shtytje dhe pop. 302 00:21:59,000 --> 00:22:08,000 Dallimi i vetëm është pop po kthehet-në vend të fundit, është kthyer parë. 303 00:22:08,000 --> 00:22:12,000 2, 1, 3, 4, ose diçka. 304 00:22:12,000 --> 00:22:14,000 Dhe këtu është fillimi. 305 00:22:14,000 --> 00:22:17,000 Queue jonë është plotësisht e plotë, kështu që nuk ka katër elemente në të. 306 00:22:17,000 --> 00:22:21,000 Fundi i radhës tonë është aktualisht 2, 307 00:22:21,000 --> 00:22:24,000 dhe tani ne do të shkojmë për të futur diçka tjetër. 308 00:22:24,000 --> 00:22:29,000 >> Kur ne duam të futur atë diçka tjetër, ajo që ne e bëmë për versionin rafte 309 00:22:29,000 --> 00:22:36,000 është zgjeruar ne bllok tonë të kujtesës. 310 00:22:36,000 --> 00:22:40,000 Cili është problemi me këtë? 311 00:22:40,000 --> 00:22:45,000 [Student] Ju lëvizë 2. 312 00:22:45,000 --> 00:22:51,000 Çfarë kam thënë më parë për fund të rreshtit, 313 00:22:51,000 --> 00:22:57,000 kjo nuk ka kuptim që ne të fillojë në 1, 314 00:22:57,000 --> 00:23:01,000 atëherë ne duam të dequeue 1, atëherë dequeue 3, pastaj dequeue 4, 315 00:23:01,000 --> 00:23:05,000 pastaj dequeue 2, pastaj dequeue këtë. 316 00:23:05,000 --> 00:23:08,000 Ne nuk mund të përdorë realloc tani, 317 00:23:08,000 --> 00:23:11,000 ose në shumë pak, ju duhet të përdorni realloc në një mënyrë të ndryshme. 318 00:23:11,000 --> 00:23:15,000 Por ju ndoshta nuk duhet të përdorni vetëm realloc. 319 00:23:15,000 --> 00:23:18,000 Ju do të keni në dorë kopje kujtesën tuaj. 320 00:23:18,000 --> 00:23:21,000 >> Ka dy funksione të kopje kujtesës. 321 00:23:21,000 --> 00:23:25,000 Ka memcopy dhe memmove. 322 00:23:25,000 --> 00:23:29,000 Unë jam duke lexuar faqet e njeri për të parë që ju jeni do të dëshironi të përdorni. 323 00:23:29,000 --> 00:23:35,000 Mirë, memcopy, dallimi është 324 00:23:35,000 --> 00:23:38,000 se memcopy dhe memmove, një trajton çështjen saktë 325 00:23:38,000 --> 00:23:41,000 ku ju jeni kopjimit në një rajon që ndodh të përputhen rajonin 326 00:23:41,000 --> 00:23:46,000 ju jeni kopjimit nga. 327 00:23:46,000 --> 00:23:50,000 Memcopy nuk trajtojë atë. Memmove bën. 328 00:23:50,000 --> 00:23:59,000 Ju mund të mendoj për këtë problem, si- 329 00:23:59,000 --> 00:24:09,000 le të thonë se unë dua të kopjoni këtë djalë, 330 00:24:09,000 --> 00:24:13,000 këto katër deri në këtë djalë mbi. 331 00:24:13,000 --> 00:24:16,000 Në fund, çfarë array duhet të duken si 332 00:24:16,000 --> 00:24:26,000 pas kopje është 2, 1, 2, 1, 3, 4, dhe pastaj disa sende në fund. 333 00:24:26,000 --> 00:24:29,000 Por kjo është e varur në mënyrë në të cilën ne fakt kopje, 334 00:24:29,000 --> 00:24:32,000 që nëse ne nuk e konsiderojmë faktin se rajoni ne jemi kopjimit në 335 00:24:32,000 --> 00:24:35,000 përputhet një ne jemi duke kopjuar nga, 336 00:24:35,000 --> 00:24:46,000 atëherë ne mund të bëjmë si fillim këtu, kopje 2 në vendin ne duam të shkojnë, 337 00:24:46,000 --> 00:24:52,000 më pas të shkojë pointers tonë përpara. 338 00:24:52,000 --> 00:24:56,000 >> Tani ne do të jetë këtu dhe këtu, dhe tani ne duam të kopjoni 339 00:24:56,000 --> 00:25:04,000 ky djalë mbi këtë djalë dhe për të shkuar përpara pointers tona. 340 00:25:04,000 --> 00:25:07,000 Çfarë ne jeni do të përfundojë deri në marrjen është 2, 1, 2, 1, 2, 1 341 00:25:07,000 --> 00:25:10,000 në vend të 2 përshtatshme, 1, 2, 1, 3, 4 sepse 342 00:25:10,000 --> 00:25:15,000 2, 1 overrode e 3 origjinale, 4. 343 00:25:15,000 --> 00:25:19,000 Memmove trajton se si duhet. 344 00:25:19,000 --> 00:25:23,000 Në këtë rast, në thelb vetëm të përdorni përherë memmove 345 00:25:23,000 --> 00:25:26,000 sepse ajo trajton atë të saktë. 346 00:25:26,000 --> 00:25:29,000 Ajo në përgjithësi nuk ka kryer ndonjë e keqe. 347 00:25:29,000 --> 00:25:32,000 Ideja është në vend të filluar nga fillimi dhe kopjim në këtë mënyrë 348 00:25:32,000 --> 00:25:35,000 si ne vetëm e bëri këtu, fillon nga fundi dhe kopjon në, 349 00:25:35,000 --> 00:25:38,000 dhe në këtë rast, ju kurrë nuk mund të ketë një problem. 350 00:25:38,000 --> 00:25:40,000 Nuk ka performanca e humbur. 351 00:25:40,000 --> 00:25:47,000 Gjithmonë përdorni memmove. Asnjëherë mos u shqetësoni për memcopy. 352 00:25:47,000 --> 00:25:51,000 Dhe kjo është ajo ku ju jeni do të duhet të vete memmove 353 00:25:51,000 --> 00:26:01,000 the-rreth përfundoi pjesa e radhës tuaj. 354 00:26:01,000 --> 00:26:04,000 Nuk shqetësohet nëse nuk bëhet plotësisht. 355 00:26:04,000 --> 00:26:10,000 Kjo është më e vështirë se rafte, shtytje, dhe pop. 356 00:26:10,000 --> 00:26:15,000 >> Çdokush keni ndonjë kod ne mund të punojnë me të? 357 00:26:15,000 --> 00:26:21,000 Edhe nëse krejtësisht paplotë? 358 00:26:21,000 --> 00:26:23,000 [Student] Yeah, kjo është plotësisht e plotë, pse. 359 00:26:23,000 --> 00:26:27,000 Plotësisht të paplota është e mirë për aq kohë sa ne mund të ju kursejnë-revizioni? 360 00:26:27,000 --> 00:26:32,000 Kam harruar se çdo herë të vetme. 361 00:26:32,000 --> 00:26:39,000 Rregull, duke injoruar çfarë ndodh kur ne kemi nevojë për të resize gjëra. 362 00:26:39,000 --> 00:26:42,000 Injorojë krejtësisht Resize. 363 00:26:42,000 --> 00:26:49,000 Shpjegoni këtë kod. 364 00:26:49,000 --> 00:26:54,000 Unë jam duke kontrolluar para së gjithash nëse madhësia është më pak se kopjen e parë të të gjitha 365 00:26:54,000 --> 00:27:01,000 dhe pastaj pas kësaj, kam futur-unë të marrë kokën + madhësi, 366 00:27:01,000 --> 00:27:05,000 dhe unë sigurohuni që ajo përfundon rreth kapacitetit të grup, 367 00:27:05,000 --> 00:27:08,000 dhe unë futur varg të ri në atë pozitë. 368 00:27:08,000 --> 00:27:12,000 Pastaj unë të rritur madhësinë dhe kthimin e vërtetë. 369 00:27:12,000 --> 00:27:22,000 >> [Rob B.] Kjo është pa dyshim një nga ato raste ku ju jeni do të duan të jenë duke përdorur mod. 370 00:27:22,000 --> 00:27:25,000 Çdo lloj i rastit kur ju kanë dhënë rreth, në qoftë se ju mendoni mbështjellës rreth, 371 00:27:25,000 --> 00:27:29,000 Mendimi i menjëhershëm duhet të jetë mod. 372 00:27:29,000 --> 00:27:36,000 Si një optimizim të shpejtë / të bërë një tuaj kod linjë të shkurtër, 373 00:27:36,000 --> 00:27:42,000 vini re se të vijë menjëherë pas kësaj një 374 00:27:42,000 --> 00:27:53,000 është vetëm madhësia + +, kështu që ju shkrihen se në këtë linjë, madhësia + +. 375 00:27:53,000 --> 00:27:58,000 Tani këtu poshtë, ne kemi rastin 376 00:27:58,000 --> 00:28:01,000 ku ne nuk kemi kujtesë të mjaftueshme, 377 00:28:01,000 --> 00:28:05,000 kështu që ne jemi rritur kapacitetin tonë nga 2. 378 00:28:05,000 --> 00:28:09,000 I guess ju mund të ketë të njëjtin problem këtu, por ne mund të injorojë atë tani, 379 00:28:09,000 --> 00:28:13,000 ku në qoftë se ju nuk arriti të rritur kapacitetin tuaj, 380 00:28:13,000 --> 00:28:18,000 atëherë ju jeni do të duan për të ulur kapacitetin tuaj nga 2 përsëri. 381 00:28:18,000 --> 00:28:24,000 Një tjetër shënim të shkurtër është vetëm si ju mund të bëni + =, 382 00:28:24,000 --> 00:28:30,000 ju gjithashtu mund të bëjë << =. 383 00:28:30,000 --> 00:28:43,000 Pothuajse çdo gjë mund të shkoni përpara se të barabartë, + =, | =, = &, << =. 384 00:28:43,000 --> 00:28:52,000 Char * ri është bllok tonë të ri të memories. 385 00:28:52,000 --> 00:28:55,000 Oh, mbi këtu. 386 00:28:55,000 --> 00:29:02,000 >> Çfarë mendojnë njerëzit në lidhje me llojin e bllokut tonë të re të kujtesës? 387 00:29:02,000 --> 00:29:06,000 [Student] Ajo duhet të jetë ** char. 388 00:29:06,000 --> 00:29:12,000 Duke menduar përsëri në struct tonë deri këtu, 389 00:29:12,000 --> 00:29:14,000 strings është ajo që ne po rishpërndarjen. 390 00:29:14,000 --> 00:29:21,000 Ne jemi duke bërë një ruajtje të tërë të re dinamike për të elementeve në radhë. 391 00:29:21,000 --> 00:29:25,000 Ajo që ne jemi duke shkuar për të caktuar në vargjet tuaja është ajo që ne jemi mallocing tani, 392 00:29:25,000 --> 00:29:30,000 dhe aq e re do të jetë një char **. 393 00:29:30,000 --> 00:29:34,000 Ajo do të jetë një grup i strings. 394 00:29:34,000 --> 00:29:38,000 Atëherë çfarë është rasti me të cilin ne do të kthehen të rreme? 395 00:29:38,000 --> 00:29:41,000 [Student] Duhet të jemi të bërë char *? 396 00:29:41,000 --> 00:29:44,000 [Rob B.] Po, thirrje mirë. 397 00:29:44,000 --> 00:29:46,000 [Student] Çfarë ishte kjo? 398 00:29:46,000 --> 00:29:49,000 [Rob B.] Ne kemi kërkuar të bëjmë madhësinë e * char, sepse ne nuk jemi më- 399 00:29:49,000 --> 00:29:53,000 kjo në fakt do të jetë një problem shumë i madh, sepse sizeof (char) do të jetë 1. 400 00:29:53,000 --> 00:29:55,000 Sizeof * char do të jetë 4, 401 00:29:55,000 --> 00:29:58,000 kështu që një shumë e kohës kur ju jeni që kanë të bëjnë me ints, 402 00:29:58,000 --> 00:30:01,000 ju kanë tendencë për të marrë larg me të, sepse madhësia e int dhe madhësia e int * 403 00:30:01,000 --> 00:30:04,000 në një sistem të 32-bit do të jetë e njëjta gjë. 404 00:30:04,000 --> 00:30:09,000 Por këtu, sizeof (char) dhe sizeof (char *) janë tani do të jetë e njëjta gjë. 405 00:30:09,000 --> 00:30:15,000 >> Çfarë është rrethanë ku ne kthimit të rreme? 406 00:30:15,000 --> 00:30:17,000 [Student] Re është i pavlefshëm. 407 00:30:17,000 --> 00:30:23,000 Po, në qoftë se i ri është i pavlefshëm, do të kthehemi të rreme, 408 00:30:23,000 --> 00:30:34,000 dhe unë jam duke shkuar për të hedhur poshtë këtu- 409 00:30:34,000 --> 00:30:37,000 [Student] [padëgjueshme] 410 00:30:37,000 --> 00:30:39,000 [Rob B.] Po, kjo është e mirë. 411 00:30:39,000 --> 00:30:46,000 Ju mund ta bëni 2 herë kapacitetin ose zhvendosje e kapaciteteve 1 dhe pastaj vetëm vënë atë poshtë këtu ose çfarëdo. 412 00:30:46,000 --> 00:30:52,000 Ne do të bëjmë atë si të kemi pasur atë. 413 00:30:52,000 --> 00:30:56,000 Kapaciteti >> = 1. 414 00:30:56,000 --> 00:31:08,000 Dhe ju kurrë nuk jeni do të ketë për t'u shqetësuar rreth humbjes së vendin e 1 415 00:31:08,000 --> 00:31:12,000 sepse jeni larguar nga zhvendos me 1, në mënyrë që vendi i 1 është domosdoshmërisht një 0, 416 00:31:12,000 --> 00:31:16,000 në mënyrë të drejtë zhvendosur me 1, ju jeni ende do të jetë mirë. 417 00:31:16,000 --> 00:31:19,000 [Student] A ju duhet të bëni që para kthimit? 418 00:31:19,000 --> 00:31:29,000 [Rob B.] Po, kjo e bën absolutisht asnjë kuptim. 419 00:31:29,000 --> 00:31:36,000 >> Tani supozojmë ne do të përfundojë deri në kthimin e vërtetë deri në fund. 420 00:31:36,000 --> 00:31:39,000 Mënyrën se si ne jemi duke shkuar për të bërë këto memmoves, 421 00:31:39,000 --> 00:31:45,000 ne duhet të jenë të kujdesshëm me atë se si të bëjmë ato. 422 00:31:45,000 --> 00:31:50,000 A ka dikush ndonjë sugjerime për mënyrën se si të bëjmë ato? 423 00:32:17,000 --> 00:32:21,000 Këtu është fillimi tonë. 424 00:32:21,000 --> 00:32:28,000 Në mënyrë të pashmangshme, ne duam të fillojë në fillim përsëri 425 00:32:28,000 --> 00:32:35,000 dhe gjërat kopje në nga atje, 1, 3, 4, 2. 426 00:32:35,000 --> 00:32:41,000 Si do të bëni këtë? 427 00:32:41,000 --> 00:32:52,000 Së pari, unë duhet të shikoni në faqen e njeriut për memmove përsëri. 428 00:32:52,000 --> 00:32:57,000 Memmove, rendi i argumenteve është gjithmonë e rëndësishme. 429 00:32:57,000 --> 00:33:01,000 Ne duam destinacionin tonë të parë, të dytë burimi, madhësia e tretë. 430 00:33:01,000 --> 00:33:06,000 Nuk janë një shumë e funksioneve të cilat kundërt burim dhe destinacion. 431 00:33:06,000 --> 00:33:11,000 , Destinacioni burimi tenton të jenë në përputhje disi. 432 00:33:17,000 --> 00:33:21,000 Leviz, çfarë është ajo kthehet? 433 00:33:21,000 --> 00:33:27,000 Ajo kthen një tregues për destinacion, për çfarëdo arsye ju mund të dëshironi që të. 434 00:33:27,000 --> 00:33:32,000 Unë mund të foto lexuar atë, por ne duam të shkojmë në destinacionin tonë. 435 00:33:32,000 --> 00:33:35,000 >> Çfarë është destinacioni ynë do të jetë? 436 00:33:35,000 --> 00:33:37,000 [Student] Re. 437 00:33:37,000 --> 00:33:39,000 [Rob B.] Po, dhe ku jemi kopjimi nga? 438 00:33:39,000 --> 00:33:43,000 Gjëja e parë që ne jemi kopjimi është ky 1, 3, 4. 439 00:33:43,000 --> 00:33:50,000 Çfarë është-kjo 1, 3, 4. 440 00:33:50,000 --> 00:33:55,000 Cila është adresa e këtij 1? 441 00:33:55,000 --> 00:33:58,000 Çfarë është adresa e se 1? 442 00:33:58,000 --> 00:34:01,000 [Student] [padëgjueshme] 443 00:34:01,000 --> 00:34:03,000 [Rob B.] Shef + adresën e elementit të parë. 444 00:34:03,000 --> 00:34:05,000 Si mund të marrim elementin e parë në grup? 445 00:34:05,000 --> 00:34:10,000 [Student] rreshtit. 446 00:34:10,000 --> 00:34:15,000 [Rob B.] Po, q.strings. 447 00:34:15,000 --> 00:34:20,000 Mos harroni, këtu, kreu ynë është 1. 448 00:34:20,000 --> 00:34:24,000 Mallkuar atë. Unë thjesht mendoj se është magjike- 449 00:34:24,000 --> 00:34:29,000 Këtu, kreu ynë është 1. Unë jam duke shkuar për të ndryshuar ngjyrën time too. 450 00:34:29,000 --> 00:34:36,000 Dhe këtu është strings. 451 00:34:36,000 --> 00:34:41,000 Këtë, ne mund ta shkruajë atë siç bëmë gjatë këtu 452 00:34:41,000 --> 00:34:43,000 me kokat + q.strings. 453 00:34:43,000 --> 00:34:51,000 Shumë njerëz gjithashtu shkruajnë atë dhe q.strings [kreu]. 454 00:34:51,000 --> 00:34:55,000 Kjo nuk është me të vërtetë më pak efikase. 455 00:34:55,000 --> 00:34:58,000 Ju mund të mendoni për atë si ju jeni dereferencing atë dhe pastaj të marrë adresën e, 456 00:34:58,000 --> 00:35:04,000 por përpiluesit do të përkthejnë atë në atë që ne kishim para gjithsesi, q.strings + kokë. 457 00:35:04,000 --> 00:35:06,000 Ose mënyrë ju doni të mendoni për atë. 458 00:35:06,000 --> 00:35:11,000 >> Dhe sa bytes duam të kopje? 459 00:35:11,000 --> 00:35:15,000 [Student] Kapaciteti - kokë. 460 00:35:15,000 --> 00:35:18,000 Kapaciteti - kokë. 461 00:35:18,000 --> 00:35:21,000 Dhe atëherë ju gjithmonë mund të shkruani nga një shembull 462 00:35:21,000 --> 00:35:23,000 të kuptoj se në qoftë se është e drejtë. 463 00:35:23,000 --> 00:35:26,000 [Student] Ajo duhet të jetë ndarë nga 2 pastaj. 464 00:35:26,000 --> 00:35:30,000 Yeah, kështu që unë mendoj se ne mund të përdorni size. 465 00:35:30,000 --> 00:35:35,000 Ne ende kemi madhësinë e qenit- 466 00:35:35,000 --> 00:35:39,000 duke përdorur madhësinë, ne kemi madhësi të barabartë me 4. 467 00:35:39,000 --> 00:35:42,000 Madhësia e jonë është 4. Kreu jonë është 1. 468 00:35:42,000 --> 00:35:46,000 Ne duam të kopjoni këto 3 elemente. 469 00:35:46,000 --> 00:35:54,000 Kjo është mendje e shëndoshë kontrolloni se madhësia - kreu 3 saktë. 470 00:35:54,000 --> 00:35:58,000 Dhe të vijnë këtu, si e thamë më përpara, 471 00:35:58,000 --> 00:36:00,000 nëse kemi përdorur kapacitetin, atëherë ne do të duhet të ndajnë nga 2 472 00:36:00,000 --> 00:36:04,000 sepse ne kemi rritur tashmë kapacitetet tona, kështu që në vend të kësaj, ne jemi duke shkuar për të përdorur madhësinë. 473 00:36:11,000 --> 00:36:13,000 Se kopjet që pjesa. 474 00:36:13,000 --> 00:36:18,000 Tani, ne kemi nevojë të kopjoni pjesën tjetër, pjesa që ka mbetur nga fillimi. 475 00:36:18,000 --> 00:36:28,000 >> Kjo do të memmove në çfarë pozicioni? 476 00:36:28,000 --> 00:36:32,000 [Student] Madhësia Plus - kokë. 477 00:36:32,000 --> 00:36:38,000 Po, kështu që ne kemi kopjuar tashmë në madhësi - bytes kokë, 478 00:36:38,000 --> 00:36:43,000 dhe kështu kur ne duam të kopjoni bytes mbetura është e re 479 00:36:43,000 --> 00:36:48,000 dhe pastaj madhësia minus-edhe, numri i bajt ne kemi kopjuar tashmë in 480 00:36:48,000 --> 00:36:52,000 Dhe pastaj ku jemi ne nga kopjimi? 481 00:36:52,000 --> 00:36:54,000 [Student] Q.strings [0]. 482 00:36:54,000 --> 00:36:56,000 [Rob B.] Po, q.strings. 483 00:36:56,000 --> 00:37:02,000 Ne mund ta bëni dhe q.strings [0]. 484 00:37:02,000 --> 00:37:05,000 Kjo është dukshëm më pak e zakonshme se kjo. 485 00:37:05,000 --> 00:37:14,000 Në qoftë se ajo është vetëm do të jetë 0, atëherë ju do të priren për të parë q.strings. 486 00:37:14,000 --> 00:37:16,000 Kjo është ajo ku ne jemi duke kopjuar nga. 487 00:37:16,000 --> 00:37:18,000 Sa bytes nuk kemi lënë të kopjoni? >> [Student] 10. 488 00:37:18,000 --> 00:37:20,000 Drejtë. 489 00:37:20,000 --> 00:37:25,000 [Student] A kemi të shumohen 5-10 herë madhësia e bytes apo diçka? 490 00:37:25,000 --> 00:37:30,000 Yeah, kështu që kjo është ajo ku-çfarë saktësisht jemi kopjimi? 491 00:37:30,000 --> 00:37:32,000 [Student] [padëgjueshme] 492 00:37:32,000 --> 00:37:34,000 Cili është lloji i gjë që ne jemi kopjimit? 493 00:37:34,000 --> 00:37:36,000 [Student] [padëgjueshme] 494 00:37:36,000 --> 00:37:41,000 Yeah, kështu që s * char që ne jemi duke kopjuar, ne nuk e dimë se ku ata vijnë nga. 495 00:37:41,000 --> 00:37:47,000 E pra, ku ata janë treguar, si vargjet, deri ne fund shtyjnë atë mbi radhë 496 00:37:47,000 --> 00:37:49,000 ose enqueuing mbi radhë. 497 00:37:49,000 --> 00:37:51,000 Ku ata vijnë nga, ne nuk kemi ide. 498 00:37:51,000 --> 00:37:56,000 Ne vetëm duhet të mbajnë gjurmët e S * char vetë. 499 00:37:56,000 --> 00:38:00,000 Ne nuk duam të kopjoni size - bytes kokë. 500 00:38:00,000 --> 00:38:03,000 Ne duam të kopjoni size - Kreu char * s, 501 00:38:03,000 --> 00:38:11,000 kështu që ne jemi duke shkuar për të shumëfishohen këtë duke sizeof (char *). 502 00:38:11,000 --> 00:38:17,000 Same këtu poshtë, kreu * sizeof (char *). 503 00:38:17,000 --> 00:38:24,000 >> [Student] Po [padëgjueshme]? 504 00:38:24,000 --> 00:38:26,000 Kjo e drejtë këtu? 505 00:38:26,000 --> 00:38:28,000 [Student] Jo, më poshtë se, madhësia - kokë. 506 00:38:28,000 --> 00:38:30,000 [Rob B.] Kjo e drejtë këtu? 507 00:38:30,000 --> 00:38:32,000 Aritmetike pointer. 508 00:38:32,000 --> 00:38:35,000 Si aritmetike tregues është duke shkuar për të punuar është 509 00:38:35,000 --> 00:38:40,000 ajo automatikisht shumëfishon nga madhësia e llojit që ne jemi që kanë të bëjnë me të. 510 00:38:40,000 --> 00:38:46,000 Ashtu si gjatë këtu, i ri + (madhësia - kreu) 511 00:38:46,000 --> 00:38:56,000 është pikërisht ekuivalente me & ri [size] - Kreu 512 00:38:56,000 --> 00:39:00,000 derisa ne presim që të punojmë si duhet, 513 00:39:00,000 --> 00:39:04,000 që nëse ne jemi që kanë të bëjnë me një grup int, atëherë ne nuk indeks nga int- 514 00:39:04,000 --> 00:39:07,000 ose në qoftë se ajo është e madhësisë prej 5 dhe ju doni elementin 4, atëherë ne indeksi në të 515 00:39:07,000 --> 00:39:10,000 int array [4]. 516 00:39:10,000 --> 00:39:14,000 Ju don 't-[4] * Madhësia e int. 517 00:39:14,000 --> 00:39:21,000 Që trajton atë automatikisht, dhe ky rast 518 00:39:21,000 --> 00:39:29,000 është fjalë për fjalë ekuivalente, kështu sintaksa kllapa 519 00:39:29,000 --> 00:39:34,000 është vetëm do të konvertohet për këtë sa më shpejt që ju të përpilojnë. 520 00:39:34,000 --> 00:39:38,000 Kjo është diçka që ju duhet të jenë të kujdesshëm që 521 00:39:38,000 --> 00:39:42,000 kur ju jeni duke shtuar madhësinë - Kreu 522 00:39:42,000 --> 00:39:45,000 ju jeni duke shtuar jo një bajt. 523 00:39:45,000 --> 00:39:53,000 Ju jeni duke shtuar një * char, e cila mund të jetë një ose çfarëdo bytes. 524 00:39:53,000 --> 00:39:56,000 >> Pyetje të tjera? 525 00:39:56,000 --> 00:40:04,000 Mirë, dequeue do të jetë më e lehtë. 526 00:40:04,000 --> 00:40:11,000 Unë do të ju jap një minutë për të zbatuar. 527 00:40:11,000 --> 00:40:18,000 Oh, dhe unë mendoj se kjo është e njëjta situatë, ku 528 00:40:18,000 --> 00:40:21,000 atë rast enqueue, në qoftë se ne jemi enqueuing null, 529 00:40:21,000 --> 00:40:24,000 ndoshta ne duam për të trajtuar atë, ndoshta ne nuk bëjmë. 530 00:40:24,000 --> 00:40:27,000 Ne nuk do të bëjë atë përsëri këtu, por njëjtë si rastin tonë rafte. 531 00:40:27,000 --> 00:40:34,000 Nëse ne enqueue null, ne mund të dëshironi të shpërfillin atë. 532 00:40:34,000 --> 00:40:40,000 Çdokush kanë një kod që unë mund të tërheqë deri? 533 00:40:40,000 --> 00:40:45,000 [Student] Unë vetëm duhet dequeue. 534 00:40:45,000 --> 00:40:56,000 Versioni 2-është se në rregull. 535 00:40:56,000 --> 00:40:59,000 Ju dëshironi të shpjegojë? 536 00:40:59,000 --> 00:41:01,000 [Student] Së pari, ju me siguri ka diçka në radhë 537 00:41:01,000 --> 00:41:07,000 dhe se madhësia është duke shkuar poshtë nga 1. 538 00:41:07,000 --> 00:41:11,000 Ju duhet për të bërë këtë, dhe pastaj ju kthehen kokën 539 00:41:11,000 --> 00:41:13,000 dhe pastaj të lëvizë kokën lart 1. 540 00:41:13,000 --> 00:41:19,000 Mirë, kështu që nuk është një rast qoshe ne duhet të marrin në konsideratë. Po. 541 00:41:19,000 --> 00:41:24,000 [Student] Nëse kreu i juaj është në elementin e fundit, 542 00:41:24,000 --> 00:41:26,000 atëherë ju nuk doni të tregojnë kreu jashtë array. 543 00:41:26,000 --> 00:41:29,000 >> Yeah, kështu që sa më shpejt që kreu godet fundin e array tonë, 544 00:41:29,000 --> 00:41:35,000 kur ne dequeue, kreu ynë duhet të kthehet në modded 0. 545 00:41:35,000 --> 00:41:40,000 Për fat të keq, ne nuk mund të bëjmë që në një hap. 546 00:41:40,000 --> 00:41:44,000 I guess mënyrë unë ndoshta do të rregullohet kjo është 547 00:41:44,000 --> 00:41:52,000 kjo do të jetë një * char, ajo që ne po kthehej, 548 00:41:52,000 --> 00:41:55,000 çfarëdo emri yt do të jetë i ndryshueshëm. 549 00:41:55,000 --> 00:42:02,000 Atëherë ne duam të mod kokën nga kapaciteti ynë 550 00:42:02,000 --> 00:42:10,000 dhe pastaj kthehen ret. 551 00:42:10,000 --> 00:42:14,000 Shumë njerëz këtu ata mund të bëjnë, 552 00:42:14,000 --> 00:42:19,000 ky është rasti i-you'll shihni njerëz bëni nëse kreu 553 00:42:19,000 --> 00:42:29,000 është më i madh se kapaciteti, të bëjë kokë - kapacitet. 554 00:42:29,000 --> 00:42:36,000 Dhe kjo është vetëm duke punuar rreth asaj që mod është. 555 00:42:36,000 --> 00:42:41,000 Kreu mod = kapaciteti është shumë më e pastër 556 00:42:41,000 --> 00:42:51,000 i një mbështjellës rreth se në qoftë se koka e madhe se koka e kapaciteteve - kapaciteteve. 557 00:42:51,000 --> 00:42:56,000 >> Pyetje? 558 00:42:56,000 --> 00:43:02,000 Mirë, gjëja e fundit që kemi lënë është lista jonë e lidhur. 559 00:43:02,000 --> 00:43:07,000 Ju mund të përdoren për të disa nga sjelljet lista lidhur në qoftë se ju e bëri 560 00:43:07,000 --> 00:43:11,000 të lidhura listat në tavolinat tuaja hash, në qoftë se keni kryer një tabelë hash. 561 00:43:11,000 --> 00:43:15,000 Unë fuqimisht rekomandoj duke bërë një tabelë hash. 562 00:43:15,000 --> 00:43:17,000 Ju mund të keni bërë tashmë një trie, 563 00:43:17,000 --> 00:43:23,000 por përpiqet janë më të vështira. 564 00:43:23,000 --> 00:43:27,000 Në teori, ata janë asymptotically mirë. 565 00:43:27,000 --> 00:43:30,000 Por vetëm shikoni në bordin e madhe, 566 00:43:30,000 --> 00:43:35,000 dhe përpiqet të bëjë më mirë kurrë, dhe ata të marrin më shumë memorie. 567 00:43:35,000 --> 00:43:43,000 Gjithçka rreth përpiqet përfundon duke qenë më keq për punën e më shumë. 568 00:43:43,000 --> 00:43:49,000 Kjo është ajo që zgjidhja David Malan-së gjithmonë është 569 00:43:49,000 --> 00:43:56,000 është ai gjithmonë postime zgjidhjen e tij trie, dhe le të shohim ku ai aktualisht është. 570 00:43:56,000 --> 00:44:00,000 Cili ishte ai nën, David J? 571 00:44:00,000 --> 00:44:06,000 Ai është # 18, kështu që nuk është tmerrësisht e keqe, 572 00:44:06,000 --> 00:44:09,000 dhe kjo do të jetë një e mirë përpiqet që ju mund të mendoni 573 00:44:09,000 --> 00:44:17,000 ose një nga të mirë përpiqet i një trie. 574 00:44:17,000 --> 00:44:23,000 A nuk është edhe zgjidhja e tij origjinale? 575 00:44:23,000 --> 00:44:29,000 Unë ndjehem si zgjidhje trie priren të jenë më shumë në këtë varg e përdorimit RAM. 576 00:44:29,000 --> 00:44:33,000 >> Shko poshtë për të shumë të lartë, dhe përdorimi RAM është në shifra të vetme. 577 00:44:33,000 --> 00:44:36,000 Shko poshtë në drejtim të poshtme, dhe pastaj ju filloni duke parë përpiqet 578 00:44:36,000 --> 00:44:41,000 ku mund të merrni përdorimin absolutisht masiv RAM, 579 00:44:41,000 --> 00:44:45,000 dhe përpiqet janë më të vështira. 580 00:44:45,000 --> 00:44:53,000 Jo tërësisht ia vlen, por një përvojë arsimore në qoftë se ju e bëri një të tillë. 581 00:44:53,000 --> 00:44:56,000 Gjëja e fundit është lista jonë lidhur, 582 00:44:56,000 --> 00:45:04,000 dhe këto tri gjëra, oxhaqet, Radhët, dhe listat lidhura, 583 00:45:04,000 --> 00:45:09,000 ndonjë gjë të ardhmen ju kurrë bëni në shkenca kompjuterike 584 00:45:09,000 --> 00:45:12,000 do të supozojmë që ju keni familjaritet me këto gjëra. 585 00:45:12,000 --> 00:45:19,000 Ata janë vetëm në mënyrë themelore për çdo gjë. 586 00:45:19,000 --> 00:45:25,000 >> Të lidhura listat, dhe këtu ne kemi një listë të lidhura veçmas do të jetë zbatimi tonë. 587 00:45:25,000 --> 00:45:34,000 Çfarë do të thotë të lidhura veçmas në krahasim me lidhur dyfish? Po. 588 00:45:34,000 --> 00:45:37,000 [Student] Ajo vetëm vë në treguesin e ardhshëm sesa për pointers, 589 00:45:37,000 --> 00:45:39,000 si ai i parapriu atë dhe njëri pas saj. 590 00:45:39,000 --> 00:45:44,000 Yeah, kështu që në format foto, çfarë nuk kam vetëm të bëj? 591 00:45:44,000 --> 00:45:48,000 Unë kam dy gjëra. Unë kam foto dhe foto. 592 00:45:48,000 --> 00:45:51,000 Në format foto, veçmas listat tona të lidhura, 593 00:45:51,000 --> 00:45:57,000 në mënyrë të pashmangshme, ne kemi disa lloj treguesin në krye të listës sonë, 594 00:45:57,000 --> 00:46:02,000 dhe pastaj brenda listën tonë, ne vetëm duhet pointers, 595 00:46:02,000 --> 00:46:05,000 dhe ndoshta kjo pikë të pavlefshëm. 596 00:46:05,000 --> 00:46:08,000 Ajo do të jetë vizatimi juaj tipike e një listë veçmas lidhur. 597 00:46:08,000 --> 00:46:14,000 Një listë e lidhur dyfish, ju mund të shkoni prapa. 598 00:46:14,000 --> 00:46:19,000 Nëse unë ju jap ndonjë nyje në listë, atëherë ju mund të merrni për të domosdoshmërisht 599 00:46:19,000 --> 00:46:23,000 çdo nyje të tjera në listën e në qoftë se ajo është një listë e lidhur dyfish. 600 00:46:23,000 --> 00:46:27,000 Por në qoftë se unë të marrë ju nyja e tretë në listë dhe kjo është një listë e lidhur në formë individuale, 601 00:46:27,000 --> 00:46:30,000 asnjë mënyrë ju jeni ndonjëherë do të merrni në nyjet e parë dhe të dytë. 602 00:46:30,000 --> 00:46:34,000 Dhe nuk ka përfitime dhe detriments, dhe një e qartë 603 00:46:34,000 --> 00:46:42,000 është që ju të marrë madhësinë e më shumë, dhe ju duhet të mbajnë gjurmët e ku këto gjëra janë treguar tani. 604 00:46:42,000 --> 00:46:49,000 Por ne vetëm intereson lidhur veçmas. 605 00:46:49,000 --> 00:46:53,000 >> Një disa gjëra ne do të duhet të zbatojnë. 606 00:46:53,000 --> 00:47:00,000 Nyja typedef tuaj struct, int: struct * nyja tjetër; nyje. 607 00:47:00,000 --> 00:47:09,000 Kjo typedef duhet të digjet në mendjet tuaja. 608 00:47:09,000 --> 00:47:14,000 Quiz 1 duhet të jetë si të japë një typedef i një nyje lista lidhur, 609 00:47:14,000 --> 00:47:18,000 dhe ju duhet të jetë në gjendje që menjëherë të shkarravitje se poshtë 610 00:47:18,000 --> 00:47:22,000 edhe pa menduar për të. 611 00:47:22,000 --> 00:47:27,000 I guess një pyetje çift, pse nuk kemi nevojë struct këtu? 612 00:47:27,000 --> 00:47:32,000 Pse nuk mund të themi * nyje? 613 00:47:32,000 --> 00:47:35,000 [Student] [padëgjueshme] 614 00:47:35,000 --> 00:47:38,000 Po. 615 00:47:38,000 --> 00:47:44,000 E vetmja gjë që përcakton një nyje si një gjë 616 00:47:44,000 --> 00:47:47,000 është typedef vetë. 617 00:47:47,000 --> 00:47:55,000 Por si të kësaj pike, kur ne jemi lloj i parsing përmes këtij përkufizimi nyjeve struct, 618 00:47:55,000 --> 00:48:01,000 ne nuk kemi mbaruar typedef tonë ende, kështu që pasi typedef nuk ka përfunduar, 619 00:48:01,000 --> 00:48:05,000 nyje nuk ekziston. 620 00:48:05,000 --> 00:48:12,000 Por struct nyjen e bën, dhe kjo nyje në këtu, 621 00:48:12,000 --> 00:48:14,000 kjo mund të quhet asgjë tjetër. 622 00:48:14,000 --> 00:48:16,000 Kjo mund të quhet n. 623 00:48:16,000 --> 00:48:19,000 Kjo mund të quhet nyje lidhur listë. 624 00:48:19,000 --> 00:48:21,000 Kjo mund të quhet asgjë. 625 00:48:21,000 --> 00:48:26,000 Por kjo nyje struct duhet të quhet njëjtën gjë si kjo nyje struct. 626 00:48:26,000 --> 00:48:29,000 Çfarë ju telefononi kjo duhet të jetë edhe këtu, 627 00:48:29,000 --> 00:48:32,000 dhe kështu që edhe përgjigjet pikën e dytë të pyetjes 628 00:48:32,000 --> 00:48:37,000 cila është arsyeja pse-shumë herë kur ju shihni structs dhe typedefs e structs, 629 00:48:37,000 --> 00:48:42,000 ju do të shihni structs anonim ku ju do të shihni vetëm struct typedef, 630 00:48:42,000 --> 00:48:47,000 Zbatimi i, fjalor struct, ose çfarëdo. 631 00:48:47,000 --> 00:48:51,000 >> Pse ketu nuk kemi nevojë për të thënë nyje? 632 00:48:51,000 --> 00:48:54,000 Pse nuk mund të jetë një struct anonim? 633 00:48:54,000 --> 00:48:56,000 Është pothuajse e njëjta përgjigje. 634 00:48:56,000 --> 00:48:58,000 [Student] Ju duhet të referohen në atë brenda struct. 635 00:48:58,000 --> 00:49:04,000 Po, brenda struct, ju duhet të referohen struct vetë. 636 00:49:04,000 --> 00:49:10,000 Nëse ju nuk japin struct një emër, në qoftë se ajo është një struct anonim, ju nuk mund të referoheni në të. 637 00:49:10,000 --> 00:49:17,000 Dhe e fundit por jo më pak, këto duhet të jenë disi të drejtpërdrejtë, 638 00:49:17,000 --> 00:49:20,000 dhe ata duhet të ju ndihmojë të kuptojnë nëse ju jeni duke shkruar këtë poshtë 639 00:49:20,000 --> 00:49:24,000 se ju jeni duke bërë diçka të gabuar nëse këto llojet e gjërave nuk ka kuptim. 640 00:49:24,000 --> 00:49:28,000 E fundit por jo më pak, pse e bën këtë duhet të jetë struct * nyje? 641 00:49:28,000 --> 00:49:34,000 Pse nuk mund të jetë vetëm struct nyje e ardhshme? 642 00:49:34,000 --> 00:49:37,000 [Student] Pointer në struct tjetër. 643 00:49:37,000 --> 00:49:39,000 Kjo është ajo që ne duam të pashmangshme. 644 00:49:39,000 --> 00:49:42,000 Pse nuk mund të jetë nyja struct e ardhshme? 645 00:49:42,000 --> 00:49:50,000 Pse e bën atë duhet të jetë nyja struct * ardhshme? Po. 646 00:49:50,000 --> 00:49:53,000 [Student] Është si një lak pafund. 647 00:49:53,000 --> 00:49:55,000 Po. 648 00:49:55,000 --> 00:49:57,000 [Student] Ajo do të jetë e gjitha në një. 649 00:49:57,000 --> 00:50:02,000 Po, ashtu mendoj se si ne do të bëjmë madhësinë e apo diçka. 650 00:50:02,000 --> 00:50:08,000 Madhësia e një struct është në thelb + ose - disa model këtu apo atje. 651 00:50:08,000 --> 00:50:15,000 Kjo është në thelb do të jetë shuma e madhësive të gjërave në struct. 652 00:50:15,000 --> 00:50:18,000 Kjo e drejtë këtu, pa ndryshuar asgjë, madhësia do të jetë e lehtë. 653 00:50:18,000 --> 00:50:24,000 Madhësia e nyjeve struct do të jetë madhësia e përmasat i + e ardhshëm. 654 00:50:24,000 --> 00:50:27,000 Madhësia e unë do të jetë 4. Madhësia e ardhshëm do të jetë 4. 655 00:50:27,000 --> 00:50:30,000 Madhësia e nyjeve struct do të jetë 8. 656 00:50:30,000 --> 00:50:34,000 Nëse ne nuk kemi *, të menduarit e sizeof, 657 00:50:34,000 --> 00:50:37,000 atëherë sizeof (I) do të jetë 4. 658 00:50:37,000 --> 00:50:43,000 Madhësia e nyjeve struct ardhshëm do të jetë madhësia e kam + madhësia e nyjes struct ardhshëm 659 00:50:43,000 --> 00:50:46,000 + Madhësia e përmasat i + e nyje struct ardhshëm. 660 00:50:46,000 --> 00:50:55,000 Ajo do të jetë një recursion pafund e nyjeve. 661 00:50:55,000 --> 00:51:00,000 Kjo është arsyeja pse kjo është se si gjërat duhet të jetë. 662 00:51:00,000 --> 00:51:03,000 >> Përsëri, patjetër mësuar përmendësh se, 663 00:51:03,000 --> 00:51:06,000 ose të paktën e kuptojnë atë të mjaftueshme që ju mund të jetë në gjendje të 664 00:51:06,000 --> 00:51:12,000 Arsyeja përmes asaj që ajo duhet të duken si. 665 00:51:12,000 --> 00:51:14,000 Gjërat që ne do të duan për të zbatuar. 666 00:51:14,000 --> 00:51:18,000 Nëse gjatësia e listës- 667 00:51:18,000 --> 00:51:21,000 ju mund të mashtrojnë dhe për të mbajtur rreth një 668 00:51:21,000 --> 00:51:24,000 Gjatësia globale apo diçka, por ne nuk jemi duke shkuar për të bërë këtë. 669 00:51:24,000 --> 00:51:28,000 Ne jemi duke shkuar për të numëruar gjatësinë e listës. 670 00:51:28,000 --> 00:51:34,000 Ne kemi përmban, kështu që në thelb si një kërkim, 671 00:51:34,000 --> 00:51:41,000 kështu që ne kemi një listë e lidhur e integers për të parë nëse kjo integer është në listën e lidhur. 672 00:51:41,000 --> 00:51:44,000 Prepend do të futur në fillim të listës. 673 00:51:44,000 --> 00:51:46,000 Append do të futur në fund. 674 00:51:46,000 --> 00:51:53,000 Insert_sorted është duke shkuar për të futur në pozitën renditura në listë. 675 00:51:53,000 --> 00:52:01,000 Lloj Insert_sorted e supozon se kurrë nuk keni përdorur prepend ose append në mënyra të këqija. 676 00:52:01,000 --> 00:52:09,000 >> Insert_sorted kur ju jeni zbatimin insert_sorted- 677 00:52:09,000 --> 00:52:13,000 le të thonë se ne kemi listën tonë lidhur. 678 00:52:13,000 --> 00:52:18,000 Kjo është ajo që ajo aktualisht duket si, 2, 4, 5. 679 00:52:18,000 --> 00:52:24,000 Unë dua të futur 3, aq sa kohë që lista e vetë është renditur tashmë, 680 00:52:24,000 --> 00:52:27,000 është e lehtë për të gjetur se ku 3 takon. 681 00:52:27,000 --> 00:52:29,000 Unë të fillojë në 2. 682 00:52:29,000 --> 00:52:32,000 Mirë, 3 është më e madhe se 2, kështu që unë dua të do të mbajë. 683 00:52:32,000 --> 00:52:35,000 Oh, 4 është shumë i madh, kështu që unë e di 3 do të shkojnë në mes të 2 dhe 4, 684 00:52:35,000 --> 00:52:39,000 dhe unë kam për të rregulluar pointers dhe të gjitha që stuff. 685 00:52:39,000 --> 00:52:43,000 Por nëse ne nuk përdorim rreptësisht insert_sorted, 686 00:52:43,000 --> 00:52:50,000 si le të them vetëm unë prepend 6, 687 00:52:50,000 --> 00:52:55,000 pastaj lista ime e lidhur do të bëhet kjo. 688 00:52:55,000 --> 00:53:01,000 Ajo tani ka kuptim, kështu që për insert_sorted, ju mund vetëm të supozojmë 689 00:53:01,000 --> 00:53:04,000 se lista është e renditur, edhe pse ekzistojnë operacione 690 00:53:04,000 --> 00:53:09,000 cila mund të shkaktojë ajo nuk tek të renditura, dhe që është ajo. 691 00:53:09,000 --> 00:53:20,000 Gjej nje dobishme insert-kështu që ata janë gjërat kryesore që ju jeni do të duhet të zbatojnë. 692 00:53:20,000 --> 00:53:24,000 >> Tani për tani, të marrë një minutë për të bërë gjatësi dhe përmban, 693 00:53:24,000 --> 00:53:30,000 dhe ata duhet të jenë relativisht të shpejtë. 694 00:53:41,000 --> 00:53:48,000 Pranë mbylljes kohë, kështu që dikush të ketë asgjë për gjatësi ose përmban? 695 00:53:48,000 --> 00:53:50,000 Ata do të jetë pothuajse identike. 696 00:53:50,000 --> 00:53:57,000 [Student] Length. 697 00:53:57,000 --> 00:54:01,000 Le të shohim, rishikim. 698 00:54:01,000 --> 00:54:04,000 Rregull. 699 00:54:12,000 --> 00:54:15,000 Ju dëshironi të shpjegojë? 700 00:54:15,000 --> 00:54:21,000 [Student] Unë vetëm krijuar një nyje akrep dhe nisja atë për të parë, e cila është e ndryshueshme tonë globale, 701 00:54:21,000 --> 00:54:27,000 dhe pastaj unë kontrolloni për të parë nëse ajo është i pavlefshëm kështu që unë nuk do të marrë një gabim dhe të kthehet seg 0 në qoftë se është rasti. 702 00:54:27,000 --> 00:54:34,000 Përndryshe, unë loop përmes, mbajtja e brenda numër i plotë 703 00:54:34,000 --> 00:54:38,000 sa herë kam arrihen elementin tjetër të listës 704 00:54:38,000 --> 00:54:43,000 dhe në të njëjtën operacion rritjeje edhe qasje atë element aktuale, 705 00:54:43,000 --> 00:54:47,000 dhe pastaj unë vazhdimisht të bëjë kontrolloni për të parë nëse ajo është null, 706 00:54:47,000 --> 00:54:56,000 dhe në qoftë se është i pavlefshëm, atëherë ajo aborts dhe vetëm kthen numrin e elementeve kam arrihen. 707 00:54:56,000 --> 00:55:01,000 >> [Rob B.] A ka dikush ndonjë koment për asgjë? 708 00:55:01,000 --> 00:55:06,000 Kjo duket korrektësia gjobë mençur. 709 00:55:06,000 --> 00:55:10,000 [Student] Unë nuk mendoj se ju duhet nyjen == null. 710 00:55:10,000 --> 00:55:13,000 Yeah, kështu që nëse nyjen == 0 null kthimit. 711 00:55:13,000 --> 00:55:18,000 Por nëse == nyjen null atëherë kjo-oh, nuk është një çështje e korrektësisë. 712 00:55:18,000 --> 00:55:23,000 Ajo ishte vetëm ju jeni kthyer i, por kjo nuk është në fushëveprimin e drejtë tani. 713 00:55:23,000 --> 00:55:30,000 Ju duhet vetëm int i, kështu që i = 0. 714 00:55:30,000 --> 00:55:34,000 Por nëse nyjen është i pavlefshëm, atëherë unë ende do të jetë 0, 715 00:55:34,000 --> 00:55:39,000 dhe ne jemi duke shkuar për kthim 0, kështu që ky rast është identik. 716 00:55:39,000 --> 00:55:48,000 Një tjetër gjë e zakonshme është që të mbajë deklaratën e 717 00:55:48,000 --> 00:55:51,000 nga brenda nyjen e për lak. 718 00:55:51,000 --> 00:55:54,000 Ju mund të thoni-Oh, jo. 719 00:55:54,000 --> 00:55:56,000 Le të mbani atë si kjo. 720 00:55:56,000 --> 00:55:59,000 Unë ndoshta do të vënë int i = 0 këtu, 721 00:55:59,000 --> 00:56:05,000 pastaj nyjen * nyja = e parë në këtu. 722 00:56:05,000 --> 00:56:11,000 Dhe kjo është ndoshta si-marrjen e shpëtoj këtë tani. 723 00:56:11,000 --> 00:56:14,000 Kjo ndoshta është se si unë do të kishte shkruar atë. 724 00:56:14,000 --> 00:56:21,000 Ju gjithashtu mund të-shikuar atë si kjo. 725 00:56:21,000 --> 00:56:25,000 Kjo për strukturën lak të drejtë këtu 726 00:56:25,000 --> 00:56:30,000 duhet të jetë pothuajse si të natyrshme për ju si për int i = 0 727 00:56:30,000 --> 00:56:33,000 i është më pak se gjatësia e grup i + +. 728 00:56:33,000 --> 00:56:38,000 Nëse kjo është se si ju të iterate mbi një rrjet, kjo është se si ju iterate mbi një listë të lidhura. 729 00:56:38,000 --> 00:56:45,000 >> Kjo duhet të jetë natyra e dytë në disa pika. 730 00:56:45,000 --> 00:56:50,000 Me këtë në mendje, kjo do të jetë pothuajse e njëjta gjë. 731 00:56:50,000 --> 00:56:57,000 Ju jeni do të duan të iterate mbi një listë të lidhura. 732 00:56:57,000 --> 00:57:02,000 Nëse nyjen-Unë nuk kam asnjë ide se çfarë vlera quhet. 733 00:57:02,000 --> 00:57:04,000 Nyja i. 734 00:57:04,000 --> 00:57:15,000 Nëse vlera në atë nyje = i kthehet e vërtetë, dhe kjo është ajo. 735 00:57:15,000 --> 00:57:18,000 Vini re se mënyra e vetme që ne ndonjëherë kthehen rreme 736 00:57:18,000 --> 00:57:23,000 është nëse ne iterate mbi të gjithë listën lidhur dhe kurrë nuk kthehet e vërtetë, 737 00:57:23,000 --> 00:57:29,000 kështu që kjo është ajo që e bën këtë. 738 00:57:29,000 --> 00:57:36,000 Si një shënim anë, ne ndoshta nuk do të merrni për të append ose prepend. 739 00:57:36,000 --> 00:57:39,000 >> Shënim të shpejtë e kaluar. 740 00:57:39,000 --> 00:57:52,000 Nëse ju shikoni fjalen statike, kështu që le të themi statike int numërimin = 0, 741 00:57:52,000 --> 00:57:56,000 atëherë ne bëjmë numërimin + +, ju mund të thelb mendojnë për atë si një variabël globale, 742 00:57:56,000 --> 00:58:00,000 edhe pse unë vetëm tha se kjo nuk është se si ne jemi duke shkuar për të zbatuar gjatësi. 743 00:58:00,000 --> 00:58:06,000 Unë jam duke bërë këtë këtu, dhe pastaj numërimin + +. 744 00:58:06,000 --> 00:58:11,000 Çdo mënyrë ne mund të hyjë në një nyje në listën tonë i lidhur ne po bën rritjen numërimin tonë. 745 00:58:11,000 --> 00:58:15,000 Pika e kjo është ajo që do të thotë fjalen statike. 746 00:58:15,000 --> 00:58:20,000 Nëse unë vetëm e kishte numërimin int = 0 që do të jetë një rregullt ndryshueshme vjetër globale. 747 00:58:20,000 --> 00:58:25,000 Çfarë do të thotë statike int akuzë është se ajo është një ndryshore globale për këtë skedar. 748 00:58:25,000 --> 00:58:28,000 Është e pamundur për ndonjë dosje tjetër, 749 00:58:28,000 --> 00:58:34,000 si mendoni pset 5, në qoftë se ju keni filluar. 750 00:58:34,000 --> 00:58:39,000 Ju keni dy Shkruaj një fjalë, dhe ju keni dictionary.c, 751 00:58:39,000 --> 00:58:42,000 dhe në qoftë se ju vetëm të deklarojë një gjë globale, atëherë asgjë në Shkruaj një fjalë 752 00:58:42,000 --> 00:58:45,000 mund të arrihen në dictionary.c dhe anasjelltas. 753 00:58:45,000 --> 00:58:48,000 Variablat globale janë të arritshme nga ndonjë skedar. C, 754 00:58:48,000 --> 00:58:54,000 por variablat statike janë të arritshëm vetëm nga brenda file vetë, 755 00:58:54,000 --> 00:59:01,000 kështu që brenda spell checker ose brenda dictionary.c, 756 00:59:01,000 --> 00:59:06,000 kjo është lloj i si unë do të deklaroj ndryshueshme time për madhësinë e array tim 757 00:59:06,000 --> 00:59:10,000 ose madhësia e numrit tim e fjalëve në fjalor. 758 00:59:10,000 --> 00:59:15,000 Që unë nuk dua të deklarojë një ndryshore globale se çdokush ka qasje në, 759 00:59:15,000 --> 00:59:18,000 Unë me të vërtetë vetëm kujdeset për atë për qëllime të mi. 760 00:59:18,000 --> 00:59:21,000 >> Gjë e mirë për këtë është edhe tërë përplasja emri stuff. 761 00:59:21,000 --> 00:59:27,000 Nëse disa fotografi të tjera të përpiqet për të përdorur një ndryshore globale quajtur akuzë, gjërat shkojnë shumë, shumë gabim, 762 00:59:27,000 --> 00:59:33,000 kështu që kjo e mban gjëra të bukur të sigurt, dhe vetëm ju mund të hyni në atë, 763 00:59:33,000 --> 00:59:38,000 dhe askush tjetër nuk mundet, dhe nëse dikush tjetër e deklaron një ndryshore globale quajtur akuzë, 764 00:59:38,000 --> 00:59:43,000 atëherë ajo nuk do të ndërhyjë me ndryshore statike tuaj quajtur akuzë. 765 00:59:43,000 --> 00:59:47,000 Kjo është ajo që është statike. Kjo është një ndryshore globale fotografi. 766 00:59:47,000 --> 00:59:52,000 >> Pyetjet për asgjë? 767 00:59:52,000 --> 00:59:59,000 Të vendosur të gjithë. Bye. 768 00:59:59,000 --> 01:00:03,000 [CS50.TV]