COLUMNA 1: Imos dar esta solución un intento. Entón, imos dar un ollo ao que o noso Nó struct será semellante. Aquí vemos que imos ter un Bool Word e un nó estrela struct Nenos entre parénteses alfabeto. Entón a primeira cousa que pode estar se pregunta: polo que é de hash alfabeto axusta 27? Ben, lembre que nós imos ter estar lidando co apóstrofo, de xeito que vai ser un pouco dun especial caso ao longo deste programa. OK, agora, lembre-se como un Trie realmente funciona. Digamos que estamos indexando a palabra gatos, logo a partir da raíz do noso Trie, imos ollar para os Nenos array, e imos ollar para o índice que corresponde á letra C. Para que sería índice dous. Así, dado que, que nos dará un novo nodo, e despois imos traballar a partir dese nodo. Así, dado que nós, que estamos unha vez máis vai mirar para a matriz nenos, e nós estamos indo ollar índice cero corresponden ao A o gato. Entón nós estamos indo a ir a este nodo, e dado que nós, imos ollar para o índice que se corresponde para T. E pasar a este nodo, finalmente, temos totalmente mirou a través do noso gato palabra, e agora bool Palabra debe indicar se esta palabra dada é en realidade unha palabra. Entón, por que necesitamos nese caso especial? Ben, e se a catástrofe palabra está no noso dicionario, pero a palabra gato non é? Así, en mirando a ver se a palabra gato é na nosa dicionario, imos mirar con éxito a través dos índices C-A-T e chegar a un nodo, pero iso é só porque desastre aconteceu crear nós no camiño de C-A-T todos o camiño para a fin da palabra. Entón bool Word emprégase indicar se este lugar especial, de feito, indica unha palabra. Todo ben, entón agora que sabemos o que é un Trie está indo ollar como, imos ollar na función de carga. Así carga vai voltar un bool para saber se correctamente ou dicionario e, sen éxito, cargado este será o dicionario que quere cargar. Entón o primeiro que imos facer é abrir ata que dicionario para a lectura. Temos que estar seguro de que non fallou, polo que, se o dicionario non se aberto correctamente, el volverá Non, nese caso, imos voltar False. Pero, supoñendo que correctamente abriu, entón podemos realmente ler a través do dicionario. Entón o primeiro que imos quero facer é que temos esta raíz variable global. Agora, a raíz será unha estrela no. É o principio da nosa Trie que estamos será iterado. Entón o primeiro que imos querer facer é asignar memoria para a nosa raíz. Teña en conta que estamos a usar a calloc función, a cal é basicamente o mesmo como a función malloc, agás que se garantido para voltar algo que é totalmente zerado. Entón, se usamos malloc, necesitariamos pasar por todos os punteiros na nosa nó e asegúrese de que son todos nulos. Entón calloc vai facelo por nós. Agora, como malloc, necesitamos facer Asegúrese de que a distribución é realmente exitosa. Se este regresou nulo, entón nós Debe pechar noso dicionario arquivo e volver False. Así, supoñendo que a distribución se exitosa, imos usar un nó protagonizar cursor para repetir a través da nosa Trie. Polo tanto, a nosa raíz nunca vai cambiar, pero nós imos usar para Cursor realmente ir de nó en nó. Todo ben, entón neste loop, estamos lectura a través do arquivo de dicionario, e nós estamos usando a fgetc. Entón fgetc vai pegar un único personaxe a partir do ficheiro. Nós imos seguir agarrando caracteres mentres non acadan o fin da liña, polo que hai dous casos que necesitamos tratar. A primeira, cando o carácter non era un nova liña, polo que sabemos si era un novo liña, entón estamos a piques de pasar a unha nova palabra. Pero supoñendo que el non era unha nova liña, a continuación, aquí, queremos descubrir a índice imos índice en na matriz nenos que nós miramos antes. Entón, como dixen antes, necesitamos caso especial o apóstrofo. Teña en conta que estamos a usar o operador ternário aquí, así que imos ler iso como se o personaxe lemos en se un apóstrofo, entón imos definir índice igual ao alfabeto menos 1, que será a taxa de 26. Outra cousa, se non fose un apóstrofo, logo imos definir o índice igual a c, menos un. Entón lembre-se de volta a partir de conxuntos p anteriores, c menos unha vai dar o posición alfabética de c, polo que se c é a letra A, esta vontade ofrécenos o índice cero. Para a letra B, que daría us o índice 1, e así por diante. Entón, iso dános o índice para a Nenos matriz que queremos. Agora, se ese contido é actualmente nulo na a matriz Nenos, isto significa que un nodo non existe actualmente de ese camiño, polo que necesitamos asignar un nodo para ese camiño. Isto é o que facemos aquí. Entón, imos, unha vez máis, usa o calloc función de xeito que non temos para zerar todo punteiros, e nós, de novo, ten que comprobar que calloc non fallou. Se calloc deixou, entón necesitamos para descargar todo, pechar o noso dicionario, e voltar False. Así, supoñendo que non fallou, entón iso pode crear un novo fillo para nós, e logo, iremos para aquela neno. Nosa cursor ha iterado abaixo para aquela neno. Agora, se iso non fose nulo, para comezar, a continuación, o cursor pode simplemente iterado ata aquela neno sen realmente ter que reservar calquera cousa. Este é o caso en que pasou por primeira vez reservar a palabra gato, e isto significa que cando imos para reservar catástrofe, non precisa crear nós para C-A-T novo. Xa existen. OK, entón o que é esa persoa? Esta é a condición na que c é barra invertida n, onde c é unha nova liña. Isto significa que temos correctamente completou unha palabra. Agora, o que queremos facer cando rematou con éxito unha palabra? Imos usar este campo palabra dentro do noso nodo struct. Queremos establecer isto como True, de xeito que indica que este nodo indica unha palabra éxito unha palabra real. Agora, establecer que a True. Queremos redefinir a nosa cursor ao punto para o inicio do Trie novo. E, finalmente, aumentar o noso dicionario tamaño desde que atopamos outra palabra. Todo ben, entón imos seguir facendo que, lendo en carácter de personaxe, construción de novos nós na nosa Trie e para cada palabra na dicionario, ata que, finalmente, chegar c é igual a fin de ficheiro, caso en que, se romper fóra do arquivo. Agora, hai dous casos en que poderiamos atinxir EOF. O primeiro é se houbo un erro a lectura do ficheiro, por iso, se houbo un erro, o que necesitamos facer o típico descargar todo, pechar o ficheiro, voltar False. Asumindo que non houbo un erro, que significa só que realmente bater o fin do o ficheiro, caso en que, imos pechar o arquivo e volver True, xa que cargados correctamente o dicionario na nosa Trie. Todo ben, entón agora imos confía Cheque. Mirando para a función de comprobación, vemos Comprobe que vai voltar un bool. El retorna True se esta palabra, que é sendo pasado está no noso Trie. El retorna false caso contrario. Entón, como é que imos determinar se esta palabra é na nosa Trie? Vemos aquí que, como antes, imos usar cursor iterado a través da nosa Trie. Agora, aquí, nós imos facer unha iteración ao longo de toda a nosa palabra. Entón iteración sobre a palabra que estamos pasou, imos determinar a índice para a matriz nenos que corresponde á palabra soporte i. Entón, iso vai parecer exactamente como Carga, onde se soporte palabra i é un apóstrofo, entón queremos usar o índice alfabeto menos 1 por xulgarmos que é a onde estamos indo para almacenar apóstrofo. Else imos usar tolower soporte palabra i. Entón lembre que a palabra pode ter arbitraria capitalización, e por iso Quere estar seguro de que estamos a usar unha versión minúscula das cousas. E, a continuación, restar que minúsculas ao, unha vez máis, ofrécenos a posición alfabética dese personaxe. Entón iso vai ser o noso índice na matriz Nenos. E agora, se este índice para os Nenos matriz é nulo, isto significa que non pode seguir iteración abaixo a nosa Trie. En tal caso, esta palabra non pode posiblemente no noso Trie, xa que se foron, iso significaría que habería unha camiño ata esa palabra, e se fose nunca atopar nulo. Así, atopando nulo, volvemos False. A palabra non está no dicionario. Se non fose nulo, entón imos seguir iterando, polo que estamos indo para actualizar a nosa cursor para apuntar para que determinado nodo nese índice. Entón, nós continuar facendo iso ao longo a palabra enteira. Asumindo que nunca bateu nulo, isto significa fomos capaces de pasar por todo o mundo e atopar un nó na nosa Trie, pero non estamos totalmente feito aínda. Non queremos só devolver True. Queremos volver palabra erro cursor xa que, recorda, de novo, se gato non é na nosa dicionario e catástrofe é, entón imos obter éxito a través de o gato palabra, pero a palabra cursor será falso e non é verdade. Entón volvemos palabra cursor indicar se este nodo é realmente unha palabra, e iso é por cheque. Entón, imos comprobar arquivo. Entón Tamaño vai ser moi fácil xa que, lembre de carga, estamos incrementando tamaño do dicionario para cada palabra que atopamos. Entón Tamaño é só ir para volver tamaño do dicionario, e é iso. Todo ben, entón, para rematar, temos Unload. Entón Unload, imos utilizar un función recursiva para realmente facer todo do traballo por nós, para a nosa función será chamado Descarregador. O que está Unloader vai facer? Vemos aquí que Unloader vai iterado sobre todos os nenos en este nodo particular, e se o neno nodo non é nulo, entón imos descargar o no fillo. Entón, que vai de forma recursiva descargar todas as nosas nenos. Unha vez que temos a certeza de que todos os nosos fillos fosen descargados, entón nós pode liberar-nos, por iso, descargar a nós mesmos. Entón, iso vai recursivamente descargar o todo Trie, e entón xa que é feito, podemos simplemente devolver True. Unload non pode fallar, estamos só liberando as cousas. Así, unha vez que estamos a facer liberando todo, voltar True. E é iso. O meu nome é Rob, e este foi [inaudível].