Ir para conteúdo
Fórum Script Brasil
  • 0

Inserindo em uma lista dentro de outra


Visitante

Pergunta

Olá pessoa, tudo bem?

Nesse código, tenho duas estruturas: uma lista que armazena números e outra lista que aramazena palavras e tem a lista citada anteriormente.

  1. typedef struct ListLine{
  2. int value;
  3. struct ListLine *next;
  4. } ll;
  5. typedef struct ListWord{
  6. char* oWord;
  7. char* mWord;
  8. struct ListWord *nextWord;
  9. struct ListLine *lines;
  10. } lw;

Acredito que na declaração da estrutura esteja correto.

Agora, segue a função para acrescentar um valor na lista de um determinado nó:

  1. void insertLine(lw* node, int where){
  2. ll *new=(ll*)malloc(sizeof(ll));
  3. if (new==NULL){
  4. puts("Erro de memoria"); exit(1);
  5. }
  6. new->value=where;
  7. new->next=NULL;
  8. if (node->lines==NULL) node->lines=new;
  9. else{
  10. ll* aux=node->lines;
  11. while (aux->next!=NULL) aux=aux->next;
  12. aux->next=new;
  13. }
  14. }

Meu problema é o seguinte: quando quero adicionar um determinado valor na primeira célula da lista, ele acaba adicionando o valor também os pŕoximos nós. Agora, para adicionar em alguma célula que não seja a primeira ele não adiciona.

Vou colar todo o código aqui:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5. void strlwr(char* str) {
  6. size_t i;
  7. size_t len = strlen(str);
  8. for (i = 0; i < len; i++)
  9. str[i] = tolower((unsigned char) str[i]);
  10. }
  11. typedef struct ListLine{
  12. int value;
  13. struct ListLine *next;
  14. } ll;
  15. typedef struct ListWord{
  16. char* oWord;
  17. char* mWord;
  18. struct ListWord *nextWord;
  19. struct ListLine *lines;
  20. } lw;
  21. lw* listaWord = NULL;
  22. ll* insertLine(ll* node, int where){
  23. ll *new=(ll*)malloc(sizeof(ll));
  24. if (new==NULL){
  25. puts("Erro de memoria"); exit(1);
  26. }
  27. new->value=where;
  28. new->next=NULL;
  29. if (node==NULL) node=new;
  30. else{
  31. ll* aux=node;
  32. while (aux->next!=NULL) aux=aux->next;
  33. aux->next=new;
  34. }
  35. return node;
  36. }
  37. lw* searchWordList (char *palavra){
  38. lw*n=listaWord;
  39. for (;n!=NULL;n=n->nextWord)
  40. if (strcmp(n->mWord,palavra)==0)
  41. break;
  42. return n;
  43. }
  44. void insertWordList (char *palavraOrig, char *palavra){
  45. if (searchWordList(palavra)==NULL){
  46. lw* new = (lw*)malloc(sizeof(lw));
  47. new->oWord=(char*)malloc(strlen(palavra)+1);
  48. new->mWord=(char*)malloc(strlen(palavra)+1);
  49. if (new == NULL || new->oWord==NULL || new->mWord==NULL){
  50. puts("Erro de memoria!"); exit(1);
  51. }
  52. strcpy(new->oWord,palavraOrig);
  53. strcpy(new->mWord,palavra);
  54. new->lines = NULL;
  55. lw*ant=NULL; lw*p=listaWord;
  56. while (p!=NULL){
  57. ant=p;
  58. p=p->nextWord;
  59. }
  60. if (ant==NULL){
  61. new->nextWord=listaWord;
  62. listaWord=new;
  63. }
  64. else {
  65. new->nextWord=ant->nextWord;
  66. ant->nextWord=new;
  67. }
  68. }
  69. }
  70. void printIndice(){
  71. lw* q;
  72. for (q=listaWord;q!=NULL;q=q->nextWord){
  73. printf("%s ",q->oWord);
  74. ll *r;
  75. for (r=listaWord->lines;r!=NULL;r=r->next) printf("%d ",r->value);
  76. puts("");
  77. }
  78. }
  79. int main(int argc, char **argv) {
  80. int ch, i=0;//, cont=0, linha=1;
  81. char *word_dic=(char*)malloc(sizeof(char));
  82. char *word_dic_orig=(char*)malloc(sizeof(char));
  83. // OPEN DICTIONARY //
  84. FILE *dictionary;
  85. dictionary = fopen("dicionario.txt", "r");
  86. if (dictionary == NULL) {
  87. printf("Erro, não foi possivel abrir o arquivo\n");
  88. return 0;
  89. }
  90. while ((ch=fgetc(dictionary))!=EOF){
  91. if ( (ch>=65 && ch<=90) || (ch>=97 && ch<=122)){
  92. word_dic[i]=ch;
  93. i++;
  94. }
  95. else {
  96. strcpy(word_dic_orig,word_dic);
  97. strlwr(word_dic);
  98. insertWordList(word_dic_orig,word_dic);
  99. word_dic=(char*)calloc(0,sizeof(char));
  100. i=0;
  101. }
  102. }
  103. fclose(dictionary);
  104. lw* q=searchWordList("a");
  105. q->lines=insertLine(q->lines,1);
  106. q->lines=insertLine(q->lines,2);
  107. printIndice();
  108. return 0;
  109. }
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...