Alteração de contato na estutura de dados arvore binaria de busca[RESOLVIDO]

1. Alteração de contato na estutura de dados arvore binaria de busca[RESOLVIDO]

César
dark777

(usa Debian)

Enviado em 11/06/2024 - 00:49h

tenho a seguinte função em C99 para uma agenda usando estrutura binaria:

void changeContact(PhoneBook **root, char *str)
{
 if ((*root) != NULL)
  {
   if (strcasecmp((*root)->name, str) > 0)
    {
     changeContact(&(*root)->left, str);
    }
   else
    {
     if (strcasecmp((*root)->name, str) < 0)
      {
       changeContact(&(*root)->right, str);
      }
     else
      {
       if (strcmp((*root)->name, str) == 0)
        {
         int phone;
         message6();
         
         printf("\n\tNAME: %s", (*root)->name);
         scanf(" %20[^\n]s", (*root)->name);
         
         printf("\n\tNEW PHONE: ");
         scanf(" %d", &phone);

         (*root)->phone = phone;

         message7();
        }
      }
    }
  }
 else
  {
   message8();
  }
}
 


quando utilizo este função para alterar um dado inserido nesta estrutura se eu precisar alterar o nome do contato tenho que inserir após o contato a alteração desejada entao fiz esta alteração:

void changeContact(PhoneBook **root, char *str)
{
 int new_phone;
 char new_name[20];

 if ((*root) != NULL)
  {
   if (strcasecmp((*root)->name, str) > 0)
    {
     changeContact(&(*root)->left, str);
    }
   else
    {
     if (strcasecmp((*root)->name, str) < 0)
      {
       changeContact(&(*root)->right, str);
      }
     else
      {
       if (strcmp((*root)->name, str) == 0)
        {
         int choice;
         message6();

         printf("\n\tCURRENT NAME: %s", (*root)->name);
         printf("\n\tCURRENT PHONE: %d", (*root)->phone);

         printf("\n\n\tDo you want to change the name or phone?\n\tEnter (1-Name, 2-Phone, 0-Cancel): ");
         scanf("%d", &choice);

         switch(choice)
         {
          case 1:
           printf("\n\tNEW NAME: ");
           scanf("%20[^\n]s", new_name);

           strcpy((*root)->name, new_name);
           //(*root)->name = new_name;
           message7();
          break;

          case 2:
           printf("\n\tNEW PHONE: ");
           scanf("%d", &new_phone);
           
           strcpy((*root)->phone, new_phone);
           //(*root)->phone = new_phone;

            message7();
          break;

          default: printf("\n\tNO CHANGES.\n");
         }
        }
      }
    }
  }
 else
  {
   message8();
  }
}
 


a minha dúvida esta em torno da alteração direta ou copiando a string:

strcpy((*root)->name, new_name);
(*root)->name = new_name;

strcpy((*root)->phone, new_phone);
(*root)->phone = new_phone;
 


que diferença estrutural na logica e na estrutura de dados em si ou na utilização de string há em realizar uma copia ou fazer alteração direta?
qual é o mais correto a ser utilizado se tratando de uma arvore binaria?

wiki.anon


  


2. Re: Alteração de contato na estutura de dados arvore binaria de busca[RESOLVIDO]

Alexa Bolada
alexabolada

(usa Debian)

Enviado em 11/06/2024 - 00:49h

A diferença entre copiar uma string com strcpy e atribuir diretamente uma variável é que a função strcpy realiza a cópia da string para a posição de memória apontada pelo ponteiro, enquanto a atribuição direta apenas direciona o ponteiro para a nova string, sem realizar cópia. Em termos de estrutura de dados e lógica, a escolha entre copiar ou atribuir diretamente depende do contexto da aplicação e da necessidade de manter a integridade dos dados. No caso de uma árvore binária, geralmente é mais seguro e correto utilizar a função strcpy para garantir a correta manipulação e armazenamento das strings.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts