1 00:00:00,000 --> 00:00:01,000 [Powered by Google Translate] [Article 6] [més còmode] 2 00:00:01,000 --> 00:00:04,000 [Rob Bowden] [Harvard University] 3 00:00:04,000 --> 00:00:09,000 [Aquesta és CS50.] [CS50.TV] 4 00:00:09,000 --> 00:00:11,000 >> Ens pot dirigir-se a les preguntes. 5 00:00:11,000 --> 00:00:17,000 Vaig enviar a l'adreça de l'espai abans. 6 00:00:17,000 --> 00:00:22,000 El principi de la secció de les preguntes-dir 7 00:00:22,000 --> 00:00:26,000 pel que sembla, no estic del tot unsick-És una pregunta molt fàcil 8 00:00:26,000 --> 00:00:28,000 del que s'acaba de Valgrind? 9 00:00:28,000 --> 00:00:30,000 Què Valgrind fer? 10 00:00:30,000 --> 00:00:34,000 Algú vol dir el Valgrind fa? 11 00:00:34,000 --> 00:00:36,000 [Estudiant] comprova la memòria de fuites. 12 00:00:36,000 --> 00:00:41,000 Sí, Valgrind és un corrector de memòria general. 13 00:00:41,000 --> 00:00:44,000 És, en definitiva, li diu si té alguna pèrdua de memòria, 14 00:00:44,000 --> 00:00:49,000 que és sobre tot el que s'està fent servir per perquè si vols 15 00:00:49,000 --> 00:00:54,000 bé en el conjunt de problemes o desitja 16 00:00:54,000 --> 00:00:59,000 aconseguir en el gran tauler, cal no tenir pèrdues de memòria en absolut, 17 00:00:59,000 --> 00:01:01,000 i en cas de tenir una pèrdua de memòria que no es pot trobar, 18 00:01:01,000 --> 00:01:04,000 També tingui en compte que cada vegada que obri un arxiu 19 00:01:04,000 --> 00:01:07,000 i si no el tanca, això és una pèrdua de memòria. 20 00:01:07,000 --> 00:01:10,000 >> Molta gent està buscant algun node que no estan alliberant 21 00:01:10,000 --> 00:01:15,000 quan en realitat, no tancar el diccionari en el primer pas. 22 00:01:15,000 --> 00:01:19,000 També li indica si vostè té qualsevol invàlid llegeix o escriu, 23 00:01:19,000 --> 00:01:22,000 el que significa que si vostè tracta d'establir un valor 24 00:01:22,000 --> 00:01:26,000 que està més enllà del final de la pila i no passa a la culpa seg 25 00:01:26,000 --> 00:01:30,000 però Valgrind l'agafa, ja que en realitat no hauria d'estar escrivint allà, 26 00:01:30,000 --> 00:01:33,000 i pel que definitivament no hauria de tenir cap d'aquests tampoc. 27 00:01:33,000 --> 00:01:38,000 Com s'utilitza Valgrind? 28 00:01:38,000 --> 00:01:42,000 Com s'utilitza Valgrind? 29 00:01:42,000 --> 00:01:45,000 >> És un problema general de 30 00:01:45,000 --> 00:01:49,000 tipus d'executar i veure el resultat. 31 00:01:49,000 --> 00:01:51,000 La sortida està aclaparant un munt de vegades. 32 00:01:51,000 --> 00:01:54,000 També hi ha errors de diversió on si tenen alguna cosa malament, molt malament 33 00:01:54,000 --> 00:01:59,000 ocorre en un bucle, a continuació, amb el temps es diu: "Massa errors. 34 00:01:59,000 --> 00:02:03,000 Vaig a deixar de comptar ara ". 35 00:02:03,000 --> 00:02:08,000 Es tracta bàsicament d'una sortida de text que cal analitzar. 36 00:02:08,000 --> 00:02:13,000 Al final, li dirà qualsevol fuga de memòria que té, 37 00:02:13,000 --> 00:02:16,000 quants blocs, que pot ser útil perquè 38 00:02:16,000 --> 00:02:20,000 si es tracta d'un unfreed bloc, llavors en general és més fàcil de trobar 39 00:02:20,000 --> 00:02:23,000 de 1.000 blocs unfreed. 40 00:02:23,000 --> 00:02:26,000 1.000 blocs unfreed probablement vol dir que no estàs alliberant 41 00:02:26,000 --> 00:02:30,000 seves llistes enllaçades adequadament o alguna cosa així. 42 00:02:30,000 --> 00:02:32,000 Això Valgrind. 43 00:02:32,000 --> 00:02:35,000 >> Ara tenim les preguntes, 44 00:02:35,000 --> 00:02:38,000 que no és necessari per a descarregar. 45 00:02:38,000 --> 00:02:41,000 Podeu fer clic en el meu nom i tiri cap amunt a l'espai. 46 00:02:41,000 --> 00:02:44,000 Ara feu clic a mi. 47 00:02:44,000 --> 00:02:46,000 Revisió 1 serà pila, el que estem fent en primer lloc. 48 00:02:46,000 --> 00:02:55,000 Revisió 2 serà cua i Revisió 3 serà la llista lligada senzilla. 49 00:02:55,000 --> 00:02:58,000 Partint de la nostra pila. 50 00:02:58,000 --> 00:03:02,000 Com es diu aquí, una pila és un dels més bàsics, 51 00:03:02,000 --> 00:03:07,000 estructures de dades fonamentals de la informàtica. 52 00:03:07,000 --> 00:03:11,000 L'exemple prototípic és molt 53 00:03:11,000 --> 00:03:13,000 la pila de safates al menjador. 54 00:03:13,000 --> 00:03:16,000 És, bàsicament, cada vegada que s'introdueixen a una pila, 55 00:03:16,000 --> 00:03:20,000 algú dirà: "Oh, com una pila de safates". 56 00:03:20,000 --> 00:03:22,000 Vostè apilar les safates de dalt. 57 00:03:22,000 --> 00:03:24,000 Llavors, quan vostè va a tirar una safata, 58 00:03:24,000 --> 00:03:31,000 la primera safata que està deixant-nos arrossegar és l'últim que es va posar a la pila. 59 00:03:31,000 --> 00:03:34,000 La pila també-com diu aquí- 60 00:03:34,000 --> 00:03:37,000 tenim el segment de memòria anomenada pila. 61 00:03:37,000 --> 00:03:40,000 I per què es diu la pila? 62 00:03:40,000 --> 00:03:42,000 >> Perquè igual que una estructura de dades pila, 63 00:03:42,000 --> 00:03:46,000 l'empeny i fa esclatar els marcs de pila a la pila, 64 00:03:46,000 --> 00:03:53,000 on els marcs de pila és com una crida d'una funció. 65 00:03:53,000 --> 00:03:57,000 I igual que una pila, sempre haurà de tornar 66 00:03:57,000 --> 00:04:03,000 a partir d'una crida a la funció abans que pugui posar-se en marcs de pila baixa de nou. 67 00:04:03,000 --> 00:04:08,000 No es pot tenir anomenada principal bar anomenat foo bar i tornar a directament principal. 68 00:04:08,000 --> 00:04:14,000 Sempre ha de seguir la pila correcta empenyent i fent esclatar. 69 00:04:14,000 --> 00:04:18,000 Les dues operacions, com he dit, són push i pop. 70 00:04:18,000 --> 00:04:20,000 Aquests són termes universals. 71 00:04:20,000 --> 00:04:26,000 Vostè ha de saber push i pop en termes de piles sense importar el que passi. 72 00:04:26,000 --> 00:04:28,000 Anem a veure les cues són una mica diferents. 73 00:04:28,000 --> 00:04:32,000 En realitat no tenen un terme universal, però push i pop són universals per a piles. 74 00:04:32,000 --> 00:04:34,000 Inserció s'acaba de posar a la pila. 75 00:04:34,000 --> 00:04:37,000 Pop és treure la pila. 76 00:04:37,000 --> 00:04:43,000 I veiem aquí tenim la nostra pila struct typedef, 77 00:04:43,000 --> 00:04:46,000 així que tenim carbó cordes **. 78 00:04:46,000 --> 00:04:51,000 No t'espantis per qualsevol **. 79 00:04:51,000 --> 00:04:54,000 Això acabarà sent una matriu de cadenes 80 00:04:54,000 --> 00:04:58,000 o una matriu de punters a caràcters, on 81 00:04:58,000 --> 00:05:00,000 punters a caràcters tendeixen a ser cadenes. 82 00:05:00,000 --> 00:05:05,000 No ha de ser cadenes, però aquí, que seran cadenes. 83 00:05:05,000 --> 00:05:08,000 >> Tenim una matriu de cadenes. 84 00:05:08,000 --> 00:05:14,000 Tenim una mida, que representa quants elements hi ha actualment a la pila, 85 00:05:14,000 --> 00:05:19,000 i llavors tenim la capacitat, que és com els elements reflectides a la pila. 86 00:05:19,000 --> 00:05:22,000 La capacitat ha de començar com una cosa més gran que 1, 87 00:05:22,000 --> 00:05:27,000 però la mida que començarà a 0. 88 00:05:27,000 --> 00:05:36,000 Ara, hi ha bàsicament tres maneres diferents que vostè pot pensar en una pila. 89 00:05:36,000 --> 00:05:39,000 Bé, probablement hi ha més, però són les dues formes principals 90 00:05:39,000 --> 00:05:43,000 es pot implementar utilitzant una matriu, o es pot implementar utilitzant una llista enllaçada. 91 00:05:43,000 --> 00:05:48,000 Les llistes enllaçades són una espècie de trivial de fer munts de. 92 00:05:48,000 --> 00:05:51,000 És molt fàcil fer una pila amb llistes enllaçades, 93 00:05:51,000 --> 00:05:55,000 Així que aquí, farem una pila amb matrius, 94 00:05:55,000 --> 00:05:59,000 i després usant arrays, també hi ha dues maneres de pensar-hi. 95 00:05:59,000 --> 00:06:01,000 Abans, quan em va dir que tenim una capacitat de la pila, 96 00:06:01,000 --> 00:06:04,000 pel que pot encaixar un element a la pila. 97 00:06:04,000 --> 00:06:09,000 >> L'única manera que podria passar és així que es va colpejar 10 elements, llavors ja està. 98 00:06:09,000 --> 00:06:13,000 Vostè pot saber que hi ha un límit superior de 10 coses al món 99 00:06:13,000 --> 00:06:16,000 que mai tindrà més de 10 coses a la pica, 100 00:06:16,000 --> 00:06:20,000 en aquest cas pot tenir un límit superior en la grandària del seu stack. 101 00:06:20,000 --> 00:06:23,000 O vostè podria tenir el seu stack ser il · limitada, 102 00:06:23,000 --> 00:06:27,000 però si vostè està fent un arranjament, el que significa que cada vegada que va connectar 10 elements, 103 00:06:27,000 --> 00:06:29,000 llavors vostè haurà de créixer a 20 elements, i quan arribi a 20 elements, 104 00:06:29,000 --> 00:06:33,000 vostè haurà de fer créixer la seva matriu a 30 elements o elements 40. 105 00:06:33,000 --> 00:06:37,000 Vas a haver d'augmentar la capacitat, que és el que farem aquí. 106 00:06:37,000 --> 00:06:40,000 Cada vegada que arribi la mida màxima del nostre stack, 107 00:06:40,000 --> 00:06:46,000 quan empenyem una mica més endavant, haurem de augmentar la capacitat. 108 00:06:46,000 --> 00:06:50,000 Aquí, hem declarat com empenta empenta bool (char * str). 109 00:06:50,000 --> 00:06:54,000 * Char str és la cadena que estem impulsant a la pila, 110 00:06:54,000 --> 00:06:58,000 bool i només diu si hem tingut èxit o ha fracassat. 111 00:06:58,000 --> 00:07:00,000 >> Com no? 112 00:07:00,000 --> 00:07:04,000 Quina és l'única circumstància que es pugui imaginar 113 00:07:04,000 --> 00:07:07,000 on ens havíem de tornar falsa? 114 00:07:07,000 --> 00:07:09,000 Si. 115 00:07:09,000 --> 00:07:12,000 [Estudiant] Si és complet i estem usant una aplicació limitada. 116 00:07:12,000 --> 00:07:17,000 Sí, així que com podem definir-va respondre 117 00:07:17,000 --> 00:07:23,000 si és ple i estem usant una aplicació limitada. 118 00:07:23,000 --> 00:07:26,000 Llavors sens dubte tornarem falsa. 119 00:07:26,000 --> 00:07:31,000 Així que vam arribar a les 10 coses de la matriu, no podem encaixar 11, de manera que retorna fals. 120 00:07:31,000 --> 00:07:32,000 I si no té límits? Si. 121 00:07:32,000 --> 00:07:38,000 Si no es pot expandir la matriu per alguna raó. 122 00:07:38,000 --> 00:07:43,000 Sí, així que la memòria és un recurs limitat, 123 00:07:43,000 --> 00:07:51,000 i, finalment, si guardem les coses que empenyen a la pila una i altra vegada, 124 00:07:51,000 --> 00:07:54,000 tractarem d'assignar una matriu més gran per encaixar 125 00:07:54,000 --> 00:07:59,000 el de major capacitat, i malloc o el que sigui que estem fent servir es tornarà false. 126 00:07:59,000 --> 00:08:02,000 Bé, malloc tornarà null. 127 00:08:02,000 --> 00:08:05,000 >> Recordeu, cada vegada que tornis a cridar malloc, vostè ha de comprovar per veure si 128 00:08:05,000 --> 00:08:12,000 retorna un valor nul o del que és una deducció correcta. 129 00:08:12,000 --> 00:08:17,000 Com volem tenir una pila sense límits, 130 00:08:17,000 --> 00:08:21,000 l'únic cas que tornarem false si és que tractem de 131 00:08:21,000 --> 00:08:26,000 augmentar la capacitat i malloc o el torna false. 132 00:08:26,000 --> 00:08:30,000 Després pop no té arguments, 133 00:08:30,000 --> 00:08:37,000 i retorna la cadena que està a la part superior de la pila. 134 00:08:37,000 --> 00:08:41,000 El més recent va ser a la pila pop és el que va a tornar, 135 00:08:41,000 --> 00:08:44,000 i també s'elimina de la pila. 136 00:08:44,000 --> 00:08:50,000 I noti que retorna null si no hi ha res a la pila. 137 00:08:50,000 --> 00:08:53,000 Sempre és possible que la pila està buida. 138 00:08:53,000 --> 00:08:55,000 En Java, si estàs acostumat a això, o en altres idiomes, 139 00:08:55,000 --> 00:09:01,000 tractant de fer esclatar d'una pila buida pot provocar una excepció o alguna cosa així. 140 00:09:01,000 --> 00:09:09,000 >> Però en C, null és una cosa que molts dels casos, com manejar aquests problemes. 141 00:09:09,000 --> 00:09:13,000 Tornant nul és com anem a indicar que la pila estava buit. 142 00:09:13,000 --> 00:09:16,000 Hem proporcionat el codi que posarà a prova la funcionalitat de la seva pila, el 143 00:09:16,000 --> 00:09:19,000 implementar push i pop. 144 00:09:19,000 --> 00:09:23,000 Això no hi haurà un munt de codi. 145 00:09:23,000 --> 00:09:40,000 Ho faré-en realitat, abans de fer això, pista, pista- 146 00:09:40,000 --> 00:09:44,000 si vostè no ho ha vist, malloc no és l'única funció 147 00:09:44,000 --> 00:09:47,000 que assigna memòria en el munt per a vostè. 148 00:09:47,000 --> 00:09:51,000 Hi ha una família de funcions Alloc. 149 00:09:51,000 --> 00:09:53,000 La primera és malloc, que estem acostumats. 150 00:09:53,000 --> 00:09:56,000 Després hi calloc, que fa el mateix que malloc, 151 00:09:56,000 --> 00:09:59,000 però va a zero tot per a tu. 152 00:09:59,000 --> 00:10:04,000 Si alguna vegada has volgut posar tot en nul després mallocing alguna cosa 153 00:10:04,000 --> 00:10:06,000 vostè ha d'haver utilitzat calloc en primer lloc en comptes d'escriure 154 00:10:06,000 --> 00:10:09,000 un bucle for per posar en zero el bloc de memòria. 155 00:10:09,000 --> 00:10:15,000 >> Realloc és com malloc i té un munt de casos especials, 156 00:10:15,000 --> 00:10:19,000 però bàsicament el que fa és realloc 157 00:10:19,000 --> 00:10:24,000 Es triga un punter que ja havia estat assignat. 158 00:10:24,000 --> 00:10:27,000 Realloc és la funció que desitgi prestar atenció a aquí. 159 00:10:27,000 --> 00:10:31,000 Es pren un punter que ja s'havien tornat de malloc. 160 00:10:31,000 --> 00:10:35,000 Diguem de sol · licitar a malloc un punter de 10 bytes. 161 00:10:35,000 --> 00:10:38,000 Després, més tard t'adones que volien 20 bytes, 162 00:10:38,000 --> 00:10:42,000 així que truqui realloc en aquest punter amb 20 bytes, 163 00:10:42,000 --> 00:10:47,000 i realloc copiat automàticament sobre totes les coses per a vostè. 164 00:10:47,000 --> 00:10:51,000 Si vostè acaba de trucar a malloc nou, com si tingués un bloc de 10 bytes. 165 00:10:51,000 --> 00:10:53,000 Ara necessito un bloc de 20 bytes, 166 00:10:53,000 --> 00:10:58,000 així que si malloc 20 bytes, llavors he de copiar manualment durant els 10 bytes de la primera cosa 167 00:10:58,000 --> 00:11:01,000 en el segon i després alliberar la primera cosa. 168 00:11:01,000 --> 00:11:04,000 Realloc s'encarregarà d'això per tu. 169 00:11:04,000 --> 00:11:11,000 >> Note la signatura serà void *, 170 00:11:11,000 --> 00:11:15,000 que s'acaba de tornar un punter al bloc de memòria, 171 00:11:15,000 --> 00:11:17,000 llavors void * ptr. 172 00:11:17,000 --> 00:11:22,000 Vostè pot pensar void * com a punter genèric. 173 00:11:22,000 --> 00:11:27,000 En general, no ha de tractar amb void *, 174 00:11:27,000 --> 00:11:30,000 però malloc retorna un void *, i llavors és només utilitzat com 175 00:11:30,000 --> 00:11:34,000 això és en realitat serà un char *. 176 00:11:34,000 --> 00:11:37,000 La void * anterior que havia estat retornat per malloc 177 00:11:37,000 --> 00:11:41,000 ara passarà a realloc, i després la mida 178 00:11:41,000 --> 00:11:49,000 és el nou número de bytes que voleu assignar, de manera que la seva nova capacitat. 179 00:11:49,000 --> 00:11:57,000 Et vaig a donar un parell de minuts, i fer-ho al nostre espai. 180 00:11:57,000 --> 00:12:02,000 Comenceu amb Revisió 1. 181 00:12:16,000 --> 00:12:21,000 Et vaig a parar després d'esperar al voltant de temps suficient per aplicar pressió, 182 00:12:21,000 --> 00:12:24,000 i després em vaig a donar un altre descans per fer pop. 183 00:12:24,000 --> 00:12:27,000 Però en realitat no és que el codi molt a tots. 184 00:12:27,000 --> 00:12:35,000 La majoria del codi és probablement la matèria en expansió, l'expansió de la capacitat. 185 00:12:35,000 --> 00:12:39,000 Està bé, no hi ha pressió per estar completament acabat, 186 00:12:39,000 --> 00:12:47,000 però sempre que vostè se sent com si estiguessis en el camí correcte, això és bo. 187 00:12:47,000 --> 00:12:53,000 >> Algú té algun codi que se sentin còmodes amb mi tirant cap amunt? 188 00:12:53,000 --> 00:12:59,000 Sí, ho faré, però algú té algun codi que pugui aixecar? 189 00:12:59,000 --> 00:13:05,000 D'acord, pot començar, el guarda, el que sigui? 190 00:13:05,000 --> 00:13:09,000 Sempre se m'oblida aquest pas. 191 00:13:09,000 --> 00:13:15,000 Bé, mirant push, 192 00:13:15,000 --> 00:13:18,000 Vols explicar la teva codi? 193 00:13:18,000 --> 00:13:24,000 [Estudiant] En primer lloc, he augmentat la mida. 194 00:13:24,000 --> 00:13:28,000 Suposo que potser jo hauria de tenir això, de tota manera, he augmentat la mida, 195 00:13:28,000 --> 00:13:31,000 i veig si és menor que la capacitat. 196 00:13:31,000 --> 00:13:36,000 I si és inferior a la capacitat, que s'afegeixen al sistema que ja tenim. 197 00:13:36,000 --> 00:13:42,000 I si no ho és, jo multiplicar la capacitat per 2, 198 00:13:42,000 --> 00:13:50,000 i reassignar la matriu de cadenes a alguna cosa amb una mida major capacitat ara. 199 00:13:50,000 --> 00:13:55,000 I si això no funciona, li dic a l'usuari i retornar false, 200 00:13:55,000 --> 00:14:04,000 i si està bé, llavors vaig posar la cadena al nou lloc. 201 00:14:04,000 --> 00:14:07,000 >> [Rob B.] Observeu també que es va utilitzar un bon operador de bits aquí 202 00:14:07,000 --> 00:14:09,000 a multiplicar per 2. 203 00:14:09,000 --> 00:14:11,000 Recordeu, desviació a l'esquerra sempre serà multiplicat per 2. 204 00:14:11,000 --> 00:14:15,000 Desplaçament a la dreta es divideix per 2, sempre que recordi que això significa 205 00:14:15,000 --> 00:14:18,000 dividir per 2 com en un nombre enter dividit per 2. 206 00:14:18,000 --> 00:14:20,000 Pot truncar 1 gen aquí o allà. 207 00:14:20,000 --> 00:14:26,000 Però desplaçament a l'esquerra per una sempre serà multiplicat per 2, 208 00:14:26,000 --> 00:14:32,000 llevat que desbordament dels límits del nombre enter, i llavors no serà. 209 00:14:32,000 --> 00:14:34,000 Un comentari al marge. 210 00:14:34,000 --> 00:14:39,000 M'agrada fer, això no canviarà la codificació de qualsevol manera que sigui, 211 00:14:39,000 --> 00:14:48,000 però m'agradaria fer alguna cosa com això. 212 00:14:48,000 --> 00:14:51,000 En realitat, es farà una mica més. 213 00:15:04,000 --> 00:15:08,000 Potser aquest no és el cas perfecte per demostrar això, 214 00:15:08,000 --> 00:15:14,000 però m'agrada segment que en aquests blocs de- 215 00:15:14,000 --> 00:15:17,000 bé, si això si succeeix, llavors jo vaig a fer alguna cosa, 216 00:15:17,000 --> 00:15:19,000 i llavors la funció es porta a terme. 217 00:15:19,000 --> 00:15:22,000 Jo no hagi de desplaçar després meus ulls tot el camí per la funció 218 00:15:22,000 --> 00:15:25,000 per veure el que passa després de l'altra persona. 219 00:15:25,000 --> 00:15:27,000 És aquest cas, si s'escau, llavors simplement tornar. 220 00:15:27,000 --> 00:15:30,000 També té el benefici afegit de totes les coses bones més enllà d'aquesta 221 00:15:30,000 --> 00:15:33,000 està desplaçat a l'esquerra un cop. 222 00:15:33,000 --> 00:15:40,000 Ja no necessito si mai prop ridículament llargues files, 223 00:15:40,000 --> 00:15:45,000 llavors aquests 4 bytes pot ajudar, i també és el una mica més a l'esquerra, 224 00:15:45,000 --> 00:15:48,000 el menor es senti aclaparat si agrada-bo, he de recordar 225 00:15:48,000 --> 00:15:53,000 Actualment estic en un bucle while dins d'un interior més d'un bucle for. 226 00:15:53,000 --> 00:15:58,000 En qualsevol lloc que vostè pot fer aquest canvi immediatament, m'agrada bastant. 227 00:15:58,000 --> 00:16:05,000 És totalment opcional i no s'espera de cap manera. 228 00:16:05,000 --> 00:16:12,000 >> [Estudiant] Hi ha d'haver una mida - en la condició de fallada? 229 00:16:12,000 --> 00:16:19,000 La condició de falla aquí és que no realloc, així que sí. 230 00:16:19,000 --> 00:16:22,000 Observi com en la condició de fallada, presumiblement, 231 00:16:22,000 --> 00:16:26,000 llevat que la matèria lliure més tard, sempre fallarem 232 00:16:26,000 --> 00:16:29,000 no importa quantes vegades tractem d'empènyer alguna cosa. 233 00:16:29,000 --> 00:16:32,000 Si seguim pressionant, seguim incrementant la mida, 234 00:16:32,000 --> 00:16:36,000 tot i que no està posant res a la pila. 235 00:16:36,000 --> 00:16:39,000 En general, no incrementen la mida fins 236 00:16:39,000 --> 00:16:43,000 després hem aconseguit posar a la pila. 237 00:16:43,000 --> 00:16:50,000 Pel que li fem, diem, ja sigui aquí i aquí. 238 00:16:50,000 --> 00:16:56,000 I llavors, en lloc de dir s.size capacitat ≤, és inferior a la capacitat, 239 00:16:56,000 --> 00:17:01,000 només perquè ens mudem on era tot. 240 00:17:01,000 --> 00:17:07,000 >> I recordi, l'únic lloc que podria tornar false 241 00:17:07,000 --> 00:17:14,000 És aquí, on realloc retorna null, 242 00:17:14,000 --> 00:17:19,000 i si et quedes a recordar error estàndard, 243 00:17:19,000 --> 00:17:22,000 potser vostè podria considerar aquest cas, una en què voleu imprimir un error estàndard, 244 00:17:22,000 --> 00:17:26,000 stderr fprintf així en lloc d'imprimir directament a la sortida estàndard. 245 00:17:26,000 --> 00:17:31,000 Un cop més, això no és una expectativa, però si es tracta d'un error, 246 00:17:31,000 --> 00:17:41,000 escriure printf, llavors és possible que vulgueu fer que imprimeixi a un error estàndard en lloc de la sortida estàndard. 247 00:17:41,000 --> 00:17:44,000 >> Algú té alguna cosa més que observar? Sí 248 00:17:44,000 --> 00:17:47,000 [Estudiant] Es pot passar el [inaudible]? 249 00:17:47,000 --> 00:17:55,000 [Rob B.] Sí, el binariness real d'ell o només el que és? 250 00:17:55,000 --> 00:17:57,000 [Estudiant] Així ho multipliques per 2? 251 00:17:57,000 --> 00:17:59,000 [Rob B.] Sí, bàsicament. 252 00:17:59,000 --> 00:18:11,000 En terra binari, sempre tenim el nostre conjunt de dígits. 253 00:18:11,000 --> 00:18:22,000 Desplaçament d'aquesta esquerra per un Bàsicament s'insereix aquí al costat dret. 254 00:18:22,000 --> 00:18:25,000 Tornar a això, només recordar que tot en binari 255 00:18:25,000 --> 00:18:28,000 és una potència de 2, de manera que això representa 2 al 0, 256 00:18:28,000 --> 00:18:30,000 aquest 2 a la 1, 2 està a la 2. 257 00:18:30,000 --> 00:18:33,000 Mitjançant la inserció d'un 0 a un costat ara mateix, simplement canviar tot de nou. 258 00:18:33,000 --> 00:18:38,000 El que solia ser de 2 a 0 és ara de 2 a 1, és 2 a la 2. 259 00:18:38,000 --> 00:18:41,000 El costat dret que inserim 260 00:18:41,000 --> 00:18:44,000 necessàriament serà 0, 261 00:18:44,000 --> 00:18:46,000 la qual cosa té sentit. 262 00:18:46,000 --> 00:18:49,000 Si mai multiplicar un nombre per 2, que no acabarà estrany, 263 00:18:49,000 --> 00:18:54,000 pel que el 2 a 0 el lloc ha de ser 0, 264 00:18:54,000 --> 00:18:59,000 i això és el que hi ha advertit abans és que si et quedes a passar 265 00:18:59,000 --> 00:19:01,000 més enllà del nombre de bits en un nombre sencer, 266 00:19:01,000 --> 00:19:04,000 llavors aquest 1 acabarà sonant. 267 00:19:04,000 --> 00:19:10,000 Aquesta és l'única preocupació si vostè passa estar tractant amb capacitats molt grans. 268 00:19:10,000 --> 00:19:15,000 Però en aquest moment, llavors vostè està tractant amb un arsenal de milers de milions de coses, 269 00:19:15,000 --> 00:19:25,000 que no va poder cabre en la memòria de totes maneres. 270 00:19:25,000 --> 00:19:31,000 >> Ara podem arribar a pop, la qual cosa és encara més fàcil. 271 00:19:31,000 --> 00:19:36,000 Podries m'agrada si et passa fer esclatar un munt, 272 00:19:36,000 --> 00:19:38,000 i ara està a la meitat de la capacitat de nou. 273 00:19:38,000 --> 00:19:42,000 Vostè podria realloc per reduir la quantitat de memòria que té, 274 00:19:42,000 --> 00:19:47,000 però vostè no ha de preocupar per això, de manera que el cas realloc només serà 275 00:19:47,000 --> 00:19:50,000 creixent memòria, mai encongiment memòria, 276 00:19:50,000 --> 00:19:59,000 que farà súper pop fàcil. 277 00:19:59,000 --> 00:20:02,000 Ara cues, que seran com piles, 278 00:20:02,000 --> 00:20:06,000 però la finalitat que es prengui les coses s'inverteix. 279 00:20:06,000 --> 00:20:10,000 En l'exemple prototípic d'una cua és una línia, 280 00:20:10,000 --> 00:20:12,000 així que suposo que si fossis Anglès, hauria dit 281 00:20:12,000 --> 00:20:17,000 un exemple prototípic d'una cua és una cua. 282 00:20:17,000 --> 00:20:22,000 Així com una línia, si vostè és la primera persona a la fila, 283 00:20:22,000 --> 00:20:24,000 que espera ser la primera persona fora de la línia. 284 00:20:24,000 --> 00:20:31,000 Si vostè és l'última persona a la fila, vostè serà la persona atesa passat. 285 00:20:31,000 --> 00:20:35,000 D'això en diem model FIFO, mentre pila era patró LIFO. 286 00:20:35,000 --> 00:20:40,000 Aquestes paraules són bastant universal. 287 00:20:40,000 --> 00:20:46,000 >> Igual que les piles i no com els arrays, les cues no solen permetre l'accés als elements del medi. 288 00:20:46,000 --> 00:20:50,000 Aquí, una pila, tenim push i pop. 289 00:20:50,000 --> 00:20:54,000 A continuació, passem a els he anomenat en cua i treure de la cua. 290 00:20:54,000 --> 00:20:58,000 També he sentit que diu canvi i unshift. 291 00:20:58,000 --> 00:21:02,000 He sentit a gent dir push i pop també s'apliquen a les cues. 292 00:21:02,000 --> 00:21:05,000 He sentit a inserir, eliminar, 293 00:21:05,000 --> 00:21:11,000 així push i pop, si vostè està parlant de piles, que està empenyent i fent esclatar. 294 00:21:11,000 --> 00:21:16,000 Si vostè està parlant sobre les cues, es pot escollir les paraules que voleu utilitzar 295 00:21:16,000 --> 00:21:23,000 per a la inserció i eliminació, i no hi ha consens sobre el que ha de ser anomenat. 296 00:21:23,000 --> 00:21:27,000 Però aquí, hem de posar en cua i treure de la cua. 297 00:21:27,000 --> 00:21:37,000 Ara bé, l'estructura es veu gairebé idèntica a l'estructura de la pila. 298 00:21:37,000 --> 00:21:40,000 Però hem de fer un seguiment del cap. 299 00:21:40,000 --> 00:21:44,000 Suposo que ho diu per aquí, però per què necessitem el cap? 300 00:21:53,000 --> 00:21:57,000 Els prototips són bàsicament idèntics push i pop. 301 00:21:57,000 --> 00:21:59,000 Vostè pot pensar en ell com push i pop. 302 00:21:59,000 --> 00:22:08,000 L'única diferència és pop torna-en lloc de l'última, està tornant la primera. 303 00:22:08,000 --> 00:22:12,000 2, 1, 3, 4, o alguna cosa així. 304 00:22:12,000 --> 00:22:14,000 I aquí hi ha el principi. 305 00:22:14,000 --> 00:22:17,000 La nostra cua està completament ple, així que hi ha quatre elements que conté. 306 00:22:17,000 --> 00:22:21,000 El final de la nostra cua és actualment 2, 307 00:22:21,000 --> 00:22:24,000 i ara anem a inserir una altra cosa. 308 00:22:24,000 --> 00:22:29,000 >> Quan volem inserir aquesta cosa més, el que vam fer per a la versió de pila 309 00:22:29,000 --> 00:22:36,000 Es ampliem el nostre bloc de memòria. 310 00:22:36,000 --> 00:22:40,000 Quin és el problema amb això? 311 00:22:40,000 --> 00:22:45,000 [Estudiant] Mou el 2. 312 00:22:45,000 --> 00:22:51,000 El que vaig dir abans sobre l'extrem de la cua, 313 00:22:51,000 --> 00:22:57,000 això no té sentit que comencem a 1, 314 00:22:57,000 --> 00:23:01,000 llavors volem treure de la cua 1, després treure de la cua 3, després treure de la cua 4, 315 00:23:01,000 --> 00:23:05,000 a continuació, treure de la cua 2, a continuació, treure de la cua d'aquest. 316 00:23:05,000 --> 00:23:08,000 No podem utilitzar realloc ara, 317 00:23:08,000 --> 00:23:11,000 o si més no, vostè ha d'utilitzar realloc d'una manera diferent. 318 00:23:11,000 --> 00:23:15,000 Però és probable que no només ha d'utilitzar realloc. 319 00:23:15,000 --> 00:23:18,000 Vostè haurà de copiar manualment la memòria. 320 00:23:18,000 --> 00:23:21,000 >> Hi ha dues funcions per copiar la memòria. 321 00:23:21,000 --> 00:23:25,000 Hi ha memcopy i memmove. 322 00:23:25,000 --> 00:23:29,000 Actualment estic llegint les pàgines del manual per veure quin et voldrà utilitzar. 323 00:23:29,000 --> 00:23:35,000 Bé, memcopy, la diferència és 324 00:23:35,000 --> 00:23:38,000 que memcopy i memmove, un maneja el cas correctament 325 00:23:38,000 --> 00:23:41,000 on està copiant en una regió que passa a superposar-se a la regió 326 00:23:41,000 --> 00:23:46,000 que està copiant. 327 00:23:46,000 --> 00:23:50,000 Memcopy no manejar. Memmove fa. 328 00:23:50,000 --> 00:23:59,000 Vostè pot pensar en el problema, ja que- 329 00:23:59,000 --> 00:24:09,000 diguem que voleu copiar aquest tipus, 330 00:24:09,000 --> 00:24:13,000 aquests quatre a aquest tipus de nou. 331 00:24:13,000 --> 00:24:16,000 Al final, el que la matriu ha de ser similar 332 00:24:16,000 --> 00:24:26,000 després que la còpia és 2, 1, 2, 1, 3, 4, i després una mica de matèria en l'extrem. 333 00:24:26,000 --> 00:24:29,000 Però això depèn de l'ordre en què realment copiar, 334 00:24:29,000 --> 00:24:32,000 ja que si no considerem el fet que la regió s'està copiant en 335 00:24:32,000 --> 00:24:35,000 es superposa a la qual estem copiant d', 336 00:24:35,000 --> 00:24:46,000 llavors podríem fer aquí com a inici, copieu el 2 en el lloc on voleu anar, 337 00:24:46,000 --> 00:24:52,000 a continuació, passar els nostres punters cap endavant. 338 00:24:52,000 --> 00:24:56,000 >> Ara anem a ser aquí i aquí, i ara volem copiar 339 00:24:56,000 --> 00:25:04,000 aquest tipus a través d'aquest tipus i moure nostres punters cap endavant. 340 00:25:04,000 --> 00:25:07,000 El que anem a acabar rebent és de 2, 1, 2, 1, 2, 1 341 00:25:07,000 --> 00:25:10,000 en lloc de la 2, 1, 2, 1, 3, 4 perquè 342 00:25:10,000 --> 00:25:15,000 2, 1 va fer cas omís de l'original 3, 4. 343 00:25:15,000 --> 00:25:19,000 Memmove que maneja correctament. 344 00:25:19,000 --> 00:25:23,000 En aquest cas, bàsicament, només utilitzeu sempre memmove 345 00:25:23,000 --> 00:25:26,000 perquè es maneja correctament. 346 00:25:26,000 --> 00:25:29,000 En general, no realitza cap pitjor. 347 00:25:29,000 --> 00:25:32,000 La idea és en lloc de començar des del principi i la còpia d'aquesta manera 348 00:25:32,000 --> 00:25:35,000 com ho acaba de fer aquí, s'inicia des de l'extrem i el copia en, 349 00:25:35,000 --> 00:25:38,000 i en aquest cas, mai es pot tenir un problema. 350 00:25:38,000 --> 00:25:40,000 No hi ha pèrdua de rendiment. 351 00:25:40,000 --> 00:25:47,000 Utilitzeu sempre memmove. No et preocupis per memcopy. 352 00:25:47,000 --> 00:25:51,000 I aquí és on vostè va a haver de memmove per separat 353 00:25:51,000 --> 00:26:01,000 la porció embolicada-al voltant de la seva cua. 354 00:26:01,000 --> 00:26:04,000 No us preocupeu si no està completament acabat. 355 00:26:04,000 --> 00:26:10,000 Això és més difícil que la pila, empenta, i el pop. 356 00:26:10,000 --> 00:26:15,000 >> Algú té algun codi que podríem treballar? 357 00:26:15,000 --> 00:26:21,000 Encara totalment incomplet? 358 00:26:21,000 --> 00:26:23,000 [Estudiant] Sí, és totalment incomplet, però. 359 00:26:23,000 --> 00:26:27,000 Completament incomplet està bé, sempre i quan, es pot estalviar la revisió? 360 00:26:27,000 --> 00:26:32,000 Em oblit que cada vegada. 361 00:26:32,000 --> 00:26:39,000 Bé, fent cas omís del que passa quan hem de canviar la mida de les coses. 362 00:26:39,000 --> 00:26:42,000 Ignoren completament canvi de mida. 363 00:26:42,000 --> 00:26:49,000 Explicar aquest codi. 364 00:26:49,000 --> 00:26:54,000 Estic comprovant en primer lloc si la mida és menor que la primera còpia de tots 365 00:26:54,000 --> 00:27:01,000 i després d'això, inserit-R + prendre el cap de mida, 366 00:27:01,000 --> 00:27:05,000 i m'asseguro que s'embolica al voltant de la capacitat de la matriu, 367 00:27:05,000 --> 00:27:08,000 i puc inserir la nova cadena en aquesta posició. 368 00:27:08,000 --> 00:27:12,000 Llavors puc augmentar la mida i tornar true. 369 00:27:12,000 --> 00:27:22,000 >> [Rob B.] Aquest és definitivament un d'aquells casos en què vas a voler utilitzar mod. 370 00:27:22,000 --> 00:27:25,000 Qualsevol tipus de cas en què ha d'embolicar al voltant, si et sembla embolicar al voltant, 371 00:27:25,000 --> 00:27:29,000 el primer pensament ha de ser mod. 372 00:27:29,000 --> 00:27:36,000 Com una optimització ràpida / fer que el codi una línia més curta, 373 00:27:36,000 --> 00:27:42,000 t'adones que la línia immediatament després d'aquest 374 00:27:42,000 --> 00:27:53,000 és només la mida + +, de manera que es fusionen en aquesta línia, la mida + +. 375 00:27:53,000 --> 00:27:58,000 Ara aquí baix, tenim el cas 376 00:27:58,000 --> 00:28:01,000 en el qual no té prou memòria, 377 00:28:01,000 --> 00:28:05,000 pel que estem augmentant la nostra capacitat per 2. 378 00:28:05,000 --> 00:28:09,000 Crec que es pot tenir el mateix problema aquí, però podem ignorar ara, 379 00:28:09,000 --> 00:28:13,000 on si no per augmentar la seva capacitat, 380 00:28:13,000 --> 00:28:18,000 llavors vostè va a voler disminuir la seva capacitat de 2 de nou. 381 00:28:18,000 --> 00:28:24,000 Una altra nota curta és igual que ho pot fer + =, 382 00:28:24,000 --> 00:28:30,000 també es pot fer << =. 383 00:28:30,000 --> 00:28:43,000 Gairebé qualsevol cosa pot passar abans d'iguals, + =, | =, + =, << =. 384 00:28:43,000 --> 00:28:52,000 Char * nou és el nostre nou bloc de memòria. 385 00:28:52,000 --> 00:28:55,000 Oh, per aquí. 386 00:28:55,000 --> 00:29:02,000 >> Què pensa la gent de la classe del nostre nou bloc de memòria? 387 00:29:02,000 --> 00:29:06,000 [Estudiant] Ha de ser char **. 388 00:29:06,000 --> 00:29:12,000 Pensant en la nostra estructura fins aquí, 389 00:29:12,000 --> 00:29:14,000 cadenes és el que estem reassignant. 390 00:29:14,000 --> 00:29:21,000 Estem fent tota una nova dinàmica per a l'emmagatzematge dels elements de la cua. 391 00:29:21,000 --> 00:29:25,000 El que anem a assignar a les cadenes és el que estem mallocing en aquest moment, 392 00:29:25,000 --> 00:29:30,000 i tan nou que serà un char **. 393 00:29:30,000 --> 00:29:34,000 Serà una matriu de cadenes. 394 00:29:34,000 --> 00:29:38,000 Llavors, quin és el cas en què ens tornarem fals? 395 00:29:38,000 --> 00:29:41,000 [Estudiant] Hauríem d'estar fent char *? 396 00:29:41,000 --> 00:29:44,000 [Rob B.] Sí, bona idea. 397 00:29:44,000 --> 00:29:46,000 [Estudiant] Què va ser això? 398 00:29:46,000 --> 00:29:49,000 [Rob B.] Volíem fer mida de char * perquè ja no som- 399 00:29:49,000 --> 00:29:53,000 en realitat això seria un problema molt gran perquè sizeof (char) seria 1. 400 00:29:53,000 --> 00:29:55,000 Sizeof char * serà 4, 401 00:29:55,000 --> 00:29:58,000 de manera que una gran quantitat d'ocasions en què estem tractant sencers, 402 00:29:58,000 --> 00:30:01,000 es tendeix a sortir amb la seva perquè la mida de int i la mida de int * 403 00:30:01,000 --> 00:30:04,000 en un sistema de 32-bit serà la mateixa cosa. 404 00:30:04,000 --> 00:30:09,000 Però aquí, sizeof (char) i sizeof (char *) són ara serà la mateixa cosa. 405 00:30:09,000 --> 00:30:15,000 >> Quina és la circumstància en què tornem fals? 406 00:30:15,000 --> 00:30:17,000 [Estudiant] Nou és nul. 407 00:30:17,000 --> 00:30:23,000 Sí, si és nou és nul, es retorna fals, 408 00:30:23,000 --> 00:30:34,000 i em vaig a tirar per aquí- 409 00:30:34,000 --> 00:30:37,000 [Estudiant] [inaudible] 410 00:30:37,000 --> 00:30:39,000 [Rob B.] Sí, això està molt bé. 411 00:30:39,000 --> 00:30:46,000 Vostè podria fer 2 vegades la capacitat o la capacitat d'un canvi, i només llavors la col · loqui aquí o el que sigui. 412 00:30:46,000 --> 00:30:52,000 Ho farem com ho teníem. 413 00:30:52,000 --> 00:30:56,000 Capacitat >> = 1. 414 00:30:56,000 --> 00:31:08,000 I mai anem a haver de preocupar de perdre el seu lloc l'1 415 00:31:08,000 --> 00:31:12,000 perquè et vas canviat per 1, de manera que l'1 de lloc és necessàriament un 0, 416 00:31:12,000 --> 00:31:16,000 tan a la dreta per un canvi, vostè encara estarà bé. 417 00:31:16,000 --> 00:31:19,000 [Estudiant] Cal fer-ho abans de la tornada? 418 00:31:19,000 --> 00:31:29,000 [Rob B.] Sí, això no té cap sentit. 419 00:31:29,000 --> 00:31:36,000 >> Ara suposem que acabarem tornant true fins al final. 420 00:31:36,000 --> 00:31:39,000 La manera com farem aquestes memmoves, 421 00:31:39,000 --> 00:31:45,000 hem de anar amb compte amb la manera com ells ho fan. 422 00:31:45,000 --> 00:31:50,000 Algú té algun suggeriment de com ho fem? 423 00:32:17,000 --> 00:32:21,000 Aquest és el nostre principi. 424 00:32:21,000 --> 00:32:28,000 Inevitablement, volem començar des del principi una altra vegada 425 00:32:28,000 --> 00:32:35,000 i coses de còpia en des d'allà, 1, 3, 4, 2. 426 00:32:35,000 --> 00:32:41,000 Com es fa això? 427 00:32:41,000 --> 00:32:52,000 En primer lloc, he de mirar a la pàgina del manual de memmove nou. 428 00:32:52,000 --> 00:32:57,000 Memmove, l'ordre dels arguments de sempre és important. 429 00:32:57,000 --> 00:33:01,000 Volem que el nostre primer destí, la segona font, la tercera mida. 430 00:33:01,000 --> 00:33:06,000 Hi ha una gran quantitat de funcions que reverteixen origen i destinació. 431 00:33:06,000 --> 00:33:11,000 Destinació, la font tendeix a ser una mica consistent. 432 00:33:17,000 --> 00:33:21,000 Moure, el que l'hi tornarà? 433 00:33:21,000 --> 00:33:27,000 Retorna un punter a la destinació, per qualsevol raó vostè podria voler això. 434 00:33:27,000 --> 00:33:32,000 M'imagino a llegir, però volem avançar en el nostre destí. 435 00:33:32,000 --> 00:33:35,000 >> Quin és el nostre destí serà? 436 00:33:35,000 --> 00:33:37,000 [Estudiant] Nou. 437 00:33:37,000 --> 00:33:39,000 [Rob B.] Sí, i on som copiant? 438 00:33:39,000 --> 00:33:43,000 El primer que està copiant és aquest 1, 3, 4. 439 00:33:43,000 --> 00:33:50,000 Quin és l'est-1, 3, 4. 440 00:33:50,000 --> 00:33:55,000 Quina és l'adreça d'aquest 1? 441 00:33:55,000 --> 00:33:58,000 Quina és la direcció que 1? 442 00:33:58,000 --> 00:34:01,000 [Estudiant] [inaudible] 443 00:34:01,000 --> 00:34:03,000 [Rob B.] + Cara la direcció del primer element. 444 00:34:03,000 --> 00:34:05,000 Com fem perquè el primer element de la matriu? 445 00:34:05,000 --> 00:34:10,000 [Estudiant] Queue. 446 00:34:10,000 --> 00:34:15,000 [Rob B.] Sí, q.strings. 447 00:34:15,000 --> 00:34:20,000 Recordeu, aquí, el nostre cap: 1. 448 00:34:20,000 --> 00:34:24,000 Maleïda sigui. Jo només crec que és per art de màgia- 449 00:34:24,000 --> 00:34:29,000 Aquí, el nostre cap és 1. Vaig a canviar el meu color també. 450 00:34:29,000 --> 00:34:36,000 I aquí està cordes. 451 00:34:36,000 --> 00:34:41,000 Això, ens pot escriure com ho vam fer aquí 452 00:34:41,000 --> 00:34:43,000 amb caps + q.strings. 453 00:34:43,000 --> 00:34:51,000 Molta gent també escriu i q.strings [cap]. 454 00:34:51,000 --> 00:34:55,000 Això no és realment una mica menys eficient. 455 00:34:55,000 --> 00:34:58,000 Es podria pensar-hi com ho està dereferencing i després obtenir l'adreça de, 456 00:34:58,000 --> 00:35:04,000 el compilador traduirà al que teníem abans de tota manera, q.strings + cap. 457 00:35:04,000 --> 00:35:06,000 De qualsevol manera desitjada pensar-hi. 458 00:35:06,000 --> 00:35:11,000 >> I quants octets volem copiar? 459 00:35:11,000 --> 00:35:15,000 [Estudiant] Capacitat - cap. 460 00:35:15,000 --> 00:35:18,000 Capacitat - cap. 461 00:35:18,000 --> 00:35:21,000 I llavors sempre es pot escriure un exemple 462 00:35:21,000 --> 00:35:23,000 per esbrinar si és cert. 463 00:35:23,000 --> 00:35:26,000 [Estudiant] Ha de ser dividit per 2 a continuació. 464 00:35:26,000 --> 00:35:30,000 Sí, així que suposo que podria utilitzar grandària. 465 00:35:30,000 --> 00:35:35,000 Encara tenim mida és- 466 00:35:35,000 --> 00:35:39,000 usant mida, que tenen una mida igual a 4. 467 00:35:39,000 --> 00:35:42,000 El nostre mida és 4. La nostra cap és 1. 468 00:35:42,000 --> 00:35:46,000 Volem copiar aquests 3 elements. 469 00:35:46,000 --> 00:35:54,000 Aquesta és la comprovació de validesa d'aquesta mida - cap està correctament 3. 470 00:35:54,000 --> 00:35:58,000 I tornant aquí, com hem dit abans, 471 00:35:58,000 --> 00:36:00,000 si utilitzem la capacitat, llavors hauríem de dividir per 2 472 00:36:00,000 --> 00:36:04,000 perquè ja hem crescut nostra capacitat, de manera que en el seu lloc, utilitzarem la mida. 473 00:36:11,000 --> 00:36:13,000 Que les còpies de les porcions. 474 00:36:13,000 --> 00:36:18,000 Ara, hem de copiar l'altra part, la part que queda de la sortida. 475 00:36:18,000 --> 00:36:28,000 >> Això va a memmove en quina posició? 476 00:36:28,000 --> 00:36:32,000 [Estudiant] més de la mida - el cap. 477 00:36:32,000 --> 00:36:38,000 Sí, de manera que ja ha copiat en la mida - bytes del cap, 478 00:36:38,000 --> 00:36:43,000 i per tant on volem copiar els bytes restants és nou 479 00:36:43,000 --> 00:36:48,000 i després la mida de menys-bé, el nombre de bytes que ja hem copiat polz 480 00:36:48,000 --> 00:36:52,000 I llavors, on som copiant? 481 00:36:52,000 --> 00:36:54,000 [Estudiant] Q.strings [0]. 482 00:36:54,000 --> 00:36:56,000 [Rob B.] Sí, q.strings. 483 00:36:56,000 --> 00:37:02,000 Podíem fer i q.strings [0]. 484 00:37:02,000 --> 00:37:05,000 Això és significativament menys freqüent que això. 485 00:37:05,000 --> 00:37:14,000 Si només serà 0, llavors vostè tendeix a veure q.strings. 486 00:37:14,000 --> 00:37:16,000 Aquí és on estem copiant. 487 00:37:16,000 --> 00:37:18,000 Quants bytes què ens queda per copiar? >> [Estudiant] 10. 488 00:37:18,000 --> 00:37:20,000 Dreta. 489 00:37:20,000 --> 00:37:25,000 [Estudiant] Hem de multiplicar 5 - 10 vegades la mida dels bytes o alguna cosa així? 490 00:37:25,000 --> 00:37:30,000 Sí, així és, què és exactament on estem copiant? 491 00:37:30,000 --> 00:37:32,000 [Estudiant] [inaudible] 492 00:37:32,000 --> 00:37:34,000 Quin és el tipus de cosa que està copiant? 493 00:37:34,000 --> 00:37:36,000 [Estudiant] [inaudible] 494 00:37:36,000 --> 00:37:41,000 Sí, de manera que el char * s que estem copiant, no sé d'on els estan venint. 495 00:37:41,000 --> 00:37:47,000 Bé, on són assenyalant, com les cordes, acabem empenyent a la cua 496 00:37:47,000 --> 00:37:49,000 o enqueuing a la cua. 497 00:37:49,000 --> 00:37:51,000 Quan els estan venint, no tenim ni idea. 498 00:37:51,000 --> 00:37:56,000 Només hem de perdre de vista el char * s mateixos. 499 00:37:56,000 --> 00:38:00,000 No volem copiar mida - octets cap. 500 00:38:00,000 --> 00:38:03,000 Volem copiar mida - cap char * s, 501 00:38:03,000 --> 00:38:11,000 així que anem a multiplicar per sizeof (char *). 502 00:38:11,000 --> 00:38:17,000 Igual aquí baix, el cap * sizeof (char *). 503 00:38:17,000 --> 00:38:24,000 >> [Estudiant] Què passa amb [inaudible]? 504 00:38:24,000 --> 00:38:26,000 Aquest dret aquí? 505 00:38:26,000 --> 00:38:28,000 [Estudiant] No, més avall, la mida - el cap. 506 00:38:28,000 --> 00:38:30,000 [Rob B.] Aquest dret aquí? 507 00:38:30,000 --> 00:38:32,000 Aritmètica de punters. 508 00:38:32,000 --> 00:38:35,000 Com aritmètica de punters es treballarà és 509 00:38:35,000 --> 00:38:40,000 automàticament es multiplica per la mida del tipus que estem tractant. 510 00:38:40,000 --> 00:38:46,000 Igual que aquí, nou + (mida - el cap) 511 00:38:46,000 --> 00:38:56,000 és exactament equivalent a & [size - cap] nou 512 00:38:56,000 --> 00:39:00,000 fins que esperem que funcioni correctament, 513 00:39:00,000 --> 00:39:04,000 ja que si estem tractant amb una matriu int, llavors no ho fem índex int- 514 00:39:04,000 --> 00:39:07,000 o si és d'una mida de 5 i desitja que el 4 º element, llavors l'índex en 515 00:39:07,000 --> 00:39:10,000 int matriu [4]. 516 00:39:10,000 --> 00:39:14,000 No-[4] * La mida de int. 517 00:39:14,000 --> 00:39:21,000 Això es gestiona de forma automàtica, i en aquest cas 518 00:39:21,000 --> 00:39:29,000 és, literalment, equivalent, de manera que la sintaxi de suport 519 00:39:29,000 --> 00:39:34,000 és només serà convertit en això tan aviat com es compila. 520 00:39:34,000 --> 00:39:38,000 Això és una cosa que has de tenir cura que 521 00:39:38,000 --> 00:39:42,000 en agregar mida - cap 522 00:39:42,000 --> 00:39:45,000 va a afegir no un byte. 523 00:39:45,000 --> 00:39:53,000 Vostè va a afegir un char *, que pot ser una bytes o el que sigui. 524 00:39:53,000 --> 00:39:56,000 >> Altres preguntes? 525 00:39:56,000 --> 00:40:04,000 Està bé, treure de la cua serà més fàcil. 526 00:40:04,000 --> 00:40:11,000 Et vaig a donar un minut d'implementar. 527 00:40:11,000 --> 00:40:18,000 Oh, i suposo que aquesta és la mateixa situació en què 528 00:40:18,000 --> 00:40:21,000 el que el cas en cua, si estem enqueuing nul, 529 00:40:21,000 --> 00:40:24,000 potser volem tractar-lo, potser no ho fem. 530 00:40:24,000 --> 00:40:27,000 No ho tornaré a fer aquí, però igual que el nostre cas pila. 531 00:40:27,000 --> 00:40:34,000 Si encolar nul, el que es vol és passar per alt. 532 00:40:34,000 --> 00:40:40,000 Algú té algun codi que pot aixecar? 533 00:40:40,000 --> 00:40:45,000 [Estudiant] Només tinc treure de la cua. 534 00:40:45,000 --> 00:40:56,000 La versió 2 és que-bé. 535 00:40:56,000 --> 00:40:59,000 Vostè vol explicar? 536 00:40:59,000 --> 00:41:01,000 [Estudiant] En primer lloc, assegureu-vos que hi ha alguna cosa a la cua 537 00:41:01,000 --> 00:41:07,000 i que la grandària va a la baixa a 1. 538 00:41:07,000 --> 00:41:11,000 Que ha de fer això, i després que torni el cap 539 00:41:11,000 --> 00:41:13,000 i després moure el cap cap amunt 1. 540 00:41:13,000 --> 00:41:19,000 Està bé, així que hi ha un cas de la cantonada hem de tenir en compte. Si. 541 00:41:19,000 --> 00:41:24,000 [Estudiant] Si el teu cap està en l'últim element, 542 00:41:24,000 --> 00:41:26,000 llavors vostè no vol el cap per assenyalar fora de la matriu. 543 00:41:26,000 --> 00:41:29,000 >> Sí, tan aviat com el cap a la final de la nostra matriu, 544 00:41:29,000 --> 00:41:35,000 quan treure de la cua, el cap ha de ser MODDED nou a 0. 545 00:41:35,000 --> 00:41:40,000 Desafortunadament, no podem fer això en un sol pas. 546 00:41:40,000 --> 00:41:44,000 Crec que la manera com probablement solucionar és 547 00:41:44,000 --> 00:41:52,000 això serà un char *, el que estem tornant, 548 00:41:52,000 --> 00:41:55,000 independentment del nom de la variable vol ser. 549 00:41:55,000 --> 00:42:02,000 Llavors volem mod cap per la nostra capacitat 550 00:42:02,000 --> 00:42:10,000 i després tornar ret. 551 00:42:10,000 --> 00:42:14,000 Molta gent d'aquí es podria fer- 552 00:42:14,000 --> 00:42:19,000 Aquest és el cas de-vostè veure la gent fer si el cap 553 00:42:19,000 --> 00:42:29,000 és més gran que la capacitat, fer el cap - la capacitat. 554 00:42:29,000 --> 00:42:36,000 I això és només treballar en entorn del que és mod. 555 00:42:36,000 --> 00:42:41,000 Cap mod = capacitat és molt més net 556 00:42:41,000 --> 00:42:51,000 d'un embolcall al voltant de si el cap més gran que el cap de capacitat - capacitat. 557 00:42:51,000 --> 00:42:56,000 >> Preguntes? 558 00:42:56,000 --> 00:43:02,000 Bé, l'últim que ens queda és la nostra llista enllaçada. 559 00:43:02,000 --> 00:43:07,000 Pot ser utilitzat per alguns dels comportaments llista enllaçada si ho has fet 560 00:43:07,000 --> 00:43:11,000 llistes enllaçades a les taules hash, si es va fer una taula hash. 561 00:43:11,000 --> 00:43:15,000 Recomano fer una taula hash. 562 00:43:15,000 --> 00:43:17,000 És possible que ja han fet un triennis, 563 00:43:17,000 --> 00:43:23,000 sinó que tracta són més difícils. 564 00:43:23,000 --> 00:43:27,000 En teoria, són asimptòticament millor. 565 00:43:27,000 --> 00:43:30,000 Però n'hi ha prou amb veure la gran pissarra, 566 00:43:30,000 --> 00:43:35,000 i tracta de no fer millor, i ocupen més memòria. 567 00:43:35,000 --> 00:43:43,000 Tot el relacionat intenta acaba sent pitjor per a un treball més. 568 00:43:43,000 --> 00:43:49,000 És el que David Malan solució sempre és 569 00:43:49,000 --> 00:43:56,000 Sempre posts seva solució triennis, i veurem on actualment està. 570 00:43:56,000 --> 00:44:00,000 El que ell estava sota, David J? 571 00:44:00,000 --> 00:44:06,000 És número 18, de manera que no és terriblement dolent, 572 00:44:06,000 --> 00:44:09,000 i que serà un dels millors intents que es pugui imaginar 573 00:44:09,000 --> 00:44:17,000 o un dels millors tracta d'un triennis. 574 00:44:17,000 --> 00:44:23,000 No és tan sols el seu solució original? 575 00:44:23,000 --> 00:44:29,000 Em sento com triennis solucions tendeixen a ser més en aquest rang d'ús de memòria RAM. 576 00:44:29,000 --> 00:44:33,000 >> Ves a la part superior, i l'ús de la memòria RAM és d'un sol dígit. 577 00:44:33,000 --> 00:44:36,000 Anar cap al fons, i després es comencen a veure intenta 578 00:44:36,000 --> 00:44:41,000 on s'obté l'ús de RAM absolutament massiva, 579 00:44:41,000 --> 00:44:45,000 i tries són més difícils. 580 00:44:45,000 --> 00:44:53,000 No del tot, però val la pena una experiència educativa si es va fer una. 581 00:44:53,000 --> 00:44:56,000 L'últim és la llista enllaçada, 582 00:44:56,000 --> 00:45:04,000 i aquestes tres coses, piles, cues i llistes enllaçades, 583 00:45:04,000 --> 00:45:09,000 qualsevol cosa futur el que fas a la informàtica 584 00:45:09,000 --> 00:45:12,000 assumirà que té familiaritat amb aquestes coses. 585 00:45:12,000 --> 00:45:19,000 Ells són tan fonamental per a tot. 586 00:45:19,000 --> 00:45:25,000 >> Llistes enllaçades, i aquí tenim una llista lligada simple serà la nostra implementació. 587 00:45:25,000 --> 00:45:34,000 Què significa enllaç simple en comparació amb doblement enllaçada? Sí 588 00:45:34,000 --> 00:45:37,000 [Estudiant] només apunta al següent punter en lloc dels punters, 589 00:45:37,000 --> 00:45:39,000 com la que li precedeix i el que el segueix. 590 00:45:39,000 --> 00:45:44,000 Sí, i en format de imatge, què he fet? 591 00:45:44,000 --> 00:45:48,000 Tinc dues coses. Tinc imatge i imatge. 592 00:45:48,000 --> 00:45:51,000 En format d'imatge, la nostra llista lligada simple, 593 00:45:51,000 --> 00:45:57,000 inevitablement, tenim algun tipus de punter al capdavant de la llista, 594 00:45:57,000 --> 00:46:02,000 i després dins de la llista, només tenim punters, 595 00:46:02,000 --> 00:46:05,000 i potser això apunta null. 596 00:46:05,000 --> 00:46:08,000 Serà un dibuix típic d'una llista lligada senzilla. 597 00:46:08,000 --> 00:46:14,000 Una llista doblement enllaçada, pot anar cap enrere. 598 00:46:14,000 --> 00:46:19,000 Si et dono un node a la llista, llavors necessàriament pot arribar a 599 00:46:19,000 --> 00:46:23,000 qualsevol altre node a la llista si es tracta d'una llista doblement enllaçada. 600 00:46:23,000 --> 00:46:27,000 Però si vostè aconsegueix el tercer node de la llista i es tracta d'una llista lligada simple, 601 00:46:27,000 --> 00:46:30,000 hi ha manera que mai arribarà als nodes de primera i segona. 602 00:46:30,000 --> 00:46:34,000 I hi ha avantatges i inconvenients, i un una evident 603 00:46:34,000 --> 00:46:42,000 Se li ocupen més grandària, i s'ha de perdre de vista que aquestes coses estan apuntant ara. 604 00:46:42,000 --> 00:46:49,000 Però només es preocupen per enllaç simple. 605 00:46:49,000 --> 00:46:53,000 >> Un parell de coses que haurem d'implementar. 606 00:46:53,000 --> 00:47:00,000 El node typedef struct, int i: struct node * següent; node. 607 00:47:00,000 --> 00:47:09,000 Això typedef ha de ser cremat en les seves ments. 608 00:47:09,000 --> 00:47:14,000 Quiz 1 ha d'ésser com donar un typedef d'un node de llista enllaçada, 609 00:47:14,000 --> 00:47:18,000 i vostè hauria de ser capaç de fer gargots que immediatament sota 610 00:47:18,000 --> 00:47:22,000 sense tan sols pensar-hi. 611 00:47:22,000 --> 00:47:27,000 Suposo que un parell de preguntes, per què necessitem struct aquí? 612 00:47:27,000 --> 00:47:32,000 Per què no podem dir * node? 613 00:47:32,000 --> 00:47:35,000 [Estudiant] [inaudible] 614 00:47:35,000 --> 00:47:38,000 Si. 615 00:47:38,000 --> 00:47:44,000 L'única cosa que defineix un node com una cosa 616 00:47:44,000 --> 00:47:47,000 és el propi typedef. 617 00:47:47,000 --> 00:47:55,000 Però a partir d'aquest moment, quan estem com l'anàlisi a través d'aquesta definició de node estructura, 618 00:47:55,000 --> 00:48:01,000 no hem acabat el nostre typedef encara, així que des del typedef no ha acabat, 619 00:48:01,000 --> 00:48:05,000 node no existeix. 620 00:48:05,000 --> 00:48:12,000 Però struct node fa, i aquest node aquí, 621 00:48:12,000 --> 00:48:14,000 això també podria ser cridat qualsevol altra cosa. 622 00:48:14,000 --> 00:48:16,000 Això podria anomenar núm. 623 00:48:16,000 --> 00:48:19,000 Es podria dir node de la llista enllaçada. 624 00:48:19,000 --> 00:48:21,000 Es podria dir qualsevol cosa. 625 00:48:21,000 --> 00:48:26,000 Però aquest node d'estructura ha de ser anomenat el mateix que aquest node d'estructura. 626 00:48:26,000 --> 00:48:29,000 El que vostè diu això ha de ser també aquí, 627 00:48:29,000 --> 00:48:32,000 i de manera que també respon al segon punt de la qüestió 628 00:48:32,000 --> 00:48:37,000 raó per la qual, moltes vegades, quan vostè veu les estructures i typedefs de les estructures, 629 00:48:37,000 --> 00:48:42,000 podràs veure les estructures anònimes on vostè acaba de veure typedef struct, 630 00:48:42,000 --> 00:48:47,000 implementació d'estructura, diccionari, o el que sigui. 631 00:48:47,000 --> 00:48:51,000 >> Per què aquí hem de dir node? 632 00:48:51,000 --> 00:48:54,000 Per què no pot ser una struct anònim? 633 00:48:54,000 --> 00:48:56,000 És gairebé la mateixa resposta. 634 00:48:56,000 --> 00:48:58,000 [Estudiant] Cal fer referència en l'estructura. 635 00:48:58,000 --> 00:49:04,000 Sí, dins de l'estructura, cal fer referència a la pròpia estructura. 636 00:49:04,000 --> 00:49:10,000 Si no dóna l'estructura d'un nom, si és un struct anònim, no es pot fer referència a ella. 637 00:49:10,000 --> 00:49:17,000 I finalment, aquests no han de ser tan senzill alguna cosa, 638 00:49:17,000 --> 00:49:20,000 i ells l'ajudaran a adonar-se que si estàs escrivint això 639 00:49:20,000 --> 00:49:24,000 que vostè està fent alguna cosa malament si aquest tipus de coses no tenen sentit. 640 00:49:24,000 --> 00:49:28,000 Finalment, però no menys important, per què té això de ser * struct node? 641 00:49:28,000 --> 00:49:34,000 Per què no poden simplement ser struct node següent? 642 00:49:34,000 --> 00:49:37,000 [Estudiant] Punter a l'estructura següent. 643 00:49:37,000 --> 00:49:39,000 Això és inevitable el que volem. 644 00:49:39,000 --> 00:49:42,000 Per què mai podia ser struct node següent? 645 00:49:42,000 --> 00:49:50,000 Per què ha de ser node * següent estructura? Si. 646 00:49:50,000 --> 00:49:53,000 [Estudiant] És com un bucle infinit. 647 00:49:53,000 --> 00:49:55,000 Si. 648 00:49:55,000 --> 00:49:57,000 [Estudiant] Tot seria en un. 649 00:49:57,000 --> 00:50:02,000 Sí, només pensar en el que faríem mida o alguna cosa així. 650 00:50:02,000 --> 00:50:08,000 Mida d'una estructura és bàsicament + o - algun patró aquí o allà. 651 00:50:08,000 --> 00:50:15,000 És, bàsicament, serà la suma de les mides de les coses en l'estructura. 652 00:50:15,000 --> 00:50:18,000 Aquest dret aquí, sense canviar res, la mida serà fàcil. 653 00:50:18,000 --> 00:50:24,000 Mida de node struct serà la mida de i + de mida pròxim. 654 00:50:24,000 --> 00:50:27,000 Mida d'i serà 4. Mida de la que ve serà 4. 655 00:50:27,000 --> 00:50:30,000 Mida de node struct serà 8. 656 00:50:30,000 --> 00:50:34,000 Si no tenim el *, pensant en sizeof, 657 00:50:34,000 --> 00:50:37,000 a continuació, sizeof (i) serà 4. 658 00:50:37,000 --> 00:50:43,000 Mida de node struct següent serà la mida de i + mida de node struct següent 659 00:50:43,000 --> 00:50:46,000 + Mida de i + mida de struct node següent. 660 00:50:46,000 --> 00:50:55,000 Seria una recursió infinita de nodes. 661 00:50:55,000 --> 00:51:00,000 Per això, és així com les coses han de ser. 662 00:51:00,000 --> 00:51:03,000 >> Un cop més, sens dubte que memoritzar, 663 00:51:03,000 --> 00:51:06,000 o almenys ho entenc bastant que vostè pot ser capaç de 664 00:51:06,000 --> 00:51:12,000 raó per la qual cosa ha de ser similar. 665 00:51:12,000 --> 00:51:14,000 Les coses que anem a voler implementar. 666 00:51:14,000 --> 00:51:18,000 Si la longitud de la llista- 667 00:51:18,000 --> 00:51:21,000 vostè podria enganyar i mantenir al voltant d'un 668 00:51:21,000 --> 00:51:24,000 longitud global o alguna cosa, però no farem això. 669 00:51:24,000 --> 00:51:28,000 Anem a explicar la longitud de la llista. 670 00:51:28,000 --> 00:51:34,000 Hem conté, de manera que, bàsicament, com una recerca, 671 00:51:34,000 --> 00:51:41,000 així que tenim una llista enllaçada d'enters per veure si aquest sencer és a la llista enllaçada. 672 00:51:41,000 --> 00:51:44,000 Anteposar es va a inserir en el començament de la llista. 673 00:51:44,000 --> 00:51:46,000 Append es va a inserir al final. 674 00:51:46,000 --> 00:51:53,000 Insert_sorted es va a inserir en la posició de la llista ordenada. 675 00:51:53,000 --> 00:52:01,000 Tipus de Insert_sorted assumeix que mai ha utilitzat anteposar o annexar en mals passos. 676 00:52:01,000 --> 00:52:09,000 >> Insert_sorted quan estàs implementant insert_sorted- 677 00:52:09,000 --> 00:52:13,000 diguem que tenim la nostra llista enllaçada. 678 00:52:13,000 --> 00:52:18,000 Això és el que actualment sembla, 2, 4, 5. 679 00:52:18,000 --> 00:52:24,000 Vull inserir 3, així que sempre que la llista en si ja està ordenat, 680 00:52:24,000 --> 00:52:27,000 és fàcil de trobar en 3 pertany. 681 00:52:27,000 --> 00:52:29,000 Començo a 2. 682 00:52:29,000 --> 00:52:32,000 D'acord, 3 és més gran que 2, així que vull seguir endavant. 683 00:52:32,000 --> 00:52:35,000 Oh, 4 és massa gran, així que sé 3 va a anar entre 2 i 4, 684 00:52:35,000 --> 00:52:39,000 i he de arreglar els punters i totes aquestes coses. 685 00:52:39,000 --> 00:52:43,000 Però si no ens utilitzin exclusivament insert_sorted, 686 00:52:43,000 --> 00:52:50,000 com direm d'anteposar 6, 687 00:52:50,000 --> 00:52:55,000 llavors la meva llista enllaçada es convertirà això. 688 00:52:55,000 --> 00:53:01,000 Ara no té sentit, així que per insert_sorted, només pot assumir 689 00:53:01,000 --> 00:53:04,000 que la llista està ordenada, tot i que hi ha operacions 690 00:53:04,000 --> 00:53:09,000 que pot fer que no es classifiquen, i això és tot. 691 00:53:09,000 --> 00:53:20,000 Trobi un útil insert-aquestes són les coses principals que vostè va a haver de posar en pràctica. 692 00:53:20,000 --> 00:53:24,000 >> Per ara, prengui un minut per fer la longitud i conté, 693 00:53:24,000 --> 00:53:30,000 i els que han de ser relativament ràpida. 694 00:53:41,000 --> 00:53:48,000 En apropar l'hora de tancament, de manera que ningú té res per llarg o conté? 695 00:53:48,000 --> 00:53:50,000 Seran gairebé idèntics. 696 00:53:50,000 --> 00:53:57,000 [Estudiant] Longitud. 697 00:53:57,000 --> 00:54:01,000 A veure, a revisió. 698 00:54:01,000 --> 00:54:04,000 Bé. 699 00:54:12,000 --> 00:54:15,000 Vostè vol explicar? 700 00:54:15,000 --> 00:54:21,000 [Estudiant] Acabo de crear un node punter i inicializarla a la primera, que és la nostra variable global, 701 00:54:21,000 --> 00:54:27,000 i després comprovo per veure si és nul, així que no et donen una falla seg i tornar 0 si aquest és el cas. 702 00:54:27,000 --> 00:54:34,000 En cas contrari, recórrer, fer el seguiment de dins sencera 703 00:54:34,000 --> 00:54:38,000 quantes vegades m'he accedit al següent element de la llista 704 00:54:38,000 --> 00:54:43,000 i en l'operació d'increment mateixa també accés a aquest element real, 705 00:54:43,000 --> 00:54:47,000 i llavors jo contínuament fer el xec per veure si és nul, 706 00:54:47,000 --> 00:54:56,000 i si és nul, llavors s'avorta i només retorna el nombre d'elements que he accedit. 707 00:54:56,000 --> 00:55:01,000 >> [Rob B.] Algú té algun comentari sobre qualsevol cosa? 708 00:55:01,000 --> 00:55:06,000 Això es veu molt bé la correcció savi. 709 00:55:06,000 --> 00:55:10,000 [Estudiant] No crec que es necessita el node == null. 710 00:55:10,000 --> 00:55:13,000 Sí, i si el node == 0 retorna null. 711 00:55:13,000 --> 00:55:18,000 Però si el node == null llavors aquesta-oh, hi ha un problema de correcció. 712 00:55:18,000 --> 00:55:23,000 Era just que estiguis i tornar, però no és d'abast en aquests moments. 713 00:55:23,000 --> 00:55:30,000 Només té int i, pel que = 0. 714 00:55:30,000 --> 00:55:34,000 Però si el node és nul, llavors jo encara serà 0, 715 00:55:34,000 --> 00:55:39,000 i tornarem 0, de manera que aquest cas és idèntic. 716 00:55:39,000 --> 00:55:48,000 Una altra cosa comuna és mantenir la declaració 717 00:55:48,000 --> 00:55:51,000 de node dins del bucle for. 718 00:55:51,000 --> 00:55:54,000 Es podria dir que-oh, no. 719 00:55:54,000 --> 00:55:56,000 Anem a mantenir-lo com aquest. 720 00:55:56,000 --> 00:55:59,000 Probablement em posaria int i = 0 aquí, 721 00:55:59,000 --> 00:56:05,000 llavors el node node = * primer aquí. 722 00:56:05,000 --> 00:56:11,000 I aquesta és probablement la forma-desfer d'això ara. 723 00:56:11,000 --> 00:56:14,000 Aquesta és probablement la forma en què ho hagi escrit. 724 00:56:14,000 --> 00:56:21,000 Vostè podria també-veure-ho així. 725 00:56:21,000 --> 00:56:25,000 Aquesta estructura de bucle aquí 726 00:56:25,000 --> 00:56:30,000 ha de ser gairebé tan natural per a tu com per int i = 0 727 00:56:30,000 --> 00:56:33,000 i és menor que la longitud d'array i + +. 728 00:56:33,000 --> 00:56:38,000 Si així és com iterar sobre una matriu, així és com recórrer un llista enllaçada. 729 00:56:38,000 --> 00:56:45,000 >> Aquesta ha de ser la naturalesa segons en algun moment. 730 00:56:45,000 --> 00:56:50,000 Amb això en ment, això serà gairebé el mateix. 731 00:56:50,000 --> 00:56:57,000 Vostè va a voler per iterar sobre una llista enllaçada. 732 00:56:57,000 --> 00:57:02,000 Si el node-No tinc ni idea de quin és el valor que es diu. 733 00:57:02,000 --> 00:57:04,000 Node i. 734 00:57:04,000 --> 00:57:15,000 Si el valor en el node i = return true, i això és tot. 735 00:57:15,000 --> 00:57:18,000 Tingueu en compte que l'única manera que alguna vegada torno fals 736 00:57:18,000 --> 00:57:23,000 si és iterar sobre la llista sencera vinculats i mai tornar true, 737 00:57:23,000 --> 00:57:29,000 així que això és el que fa. 738 00:57:29,000 --> 00:57:36,000 Com a nota lateral, és probable que no s'arriba a afegir o anteposar. 739 00:57:36,000 --> 00:57:39,000 >> Última nota ràpida. 740 00:57:39,000 --> 00:57:52,000 Si vostè veu la paraula clau static, pel que direm static int compte = 0, 741 00:57:52,000 --> 00:57:56,000 llavors el que fem compte + +, bàsicament es pot pensar en ella com una variable global, 742 00:57:56,000 --> 00:58:00,000 tot i que acabo de dir no és així com anem a implementar longitud. 743 00:58:00,000 --> 00:58:06,000 Estic fent això aquí, i després comptar + +. 744 00:58:06,000 --> 00:58:11,000 De qualsevol manera que puguem entrar en un node a la llista enllaçada estem incrementant el nostre compte. 745 00:58:11,000 --> 00:58:15,000 El punt d'això és el que significa la paraula clau static. 746 00:58:15,000 --> 00:58:20,000 Si només tingués int count = 0 que seria un habitual variable global edat. 747 00:58:20,000 --> 00:58:25,000 Quins mitjans estàtic int compte és que es tracta d'una variable globals d'aquest fitxer. 748 00:58:25,000 --> 00:58:28,000 És impossible per algun altre arxiu, 749 00:58:28,000 --> 00:58:34,000 agrada pensar en pset 5, si vostè ha començat. 750 00:58:34,000 --> 00:58:39,000 Vostè té tant speller.c, i vostè té dictionary.c, 751 00:58:39,000 --> 00:58:42,000 i si el que declara una cosa global, llavors qualsevol cosa en speller.c 752 00:58:42,000 --> 00:58:45,000 Es pot accedir a dictionary.c i viceversa. 753 00:58:45,000 --> 00:58:48,000 Les variables globals són accessibles a qualsevol arxiu. C, 754 00:58:48,000 --> 00:58:54,000 però les variables estàtiques només es pot accedir des del propi arxiu, 755 00:58:54,000 --> 00:59:01,000 així que dins de corrector ortogràfic oa l'interior de dictionary.c, 756 00:59:01,000 --> 00:59:06,000 això és una mica com havia de declarar la meva variable per la mida de la meva matriu 757 00:59:06,000 --> 00:59:10,000 o la mida del número de paraules al diccionari. 758 00:59:10,000 --> 00:59:15,000 Com que no és necessari declarar una variable global que ningú té accés, 759 00:59:15,000 --> 00:59:18,000 En realitat només es preocupen per ell per als meus propis fins. 760 00:59:18,000 --> 00:59:21,000 >> El millor d'això és també la matèria col · lisió nom complet. 761 00:59:21,000 --> 00:59:27,000 Si algun altre arxiu intenta utilitzar una variable global anomenada recompte, les coses van malament, molt malament, 762 00:59:27,000 --> 00:59:33,000 pel que aquesta bé manté les coses segures, i només es pot accedir, 763 00:59:33,000 --> 00:59:38,000 i ningú més pot fer-ho, i si algú es declara una variable global anomenada recompte 764 00:59:38,000 --> 00:59:43,000 llavors no va a interferir amb la variable estàtica anomenada recompte. 765 00:59:43,000 --> 00:59:47,000 Això és el que és estàtic. És una variable global d'arxius. 766 00:59:47,000 --> 00:59:52,000 >> Les preguntes sobre qualsevol cosa? 767 00:59:52,000 --> 00:59:59,000 Tot llest. Bye. 768 00:59:59,000 --> 01:00:03,000 [CS50.TV]