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]

Jean César
dark777

(usa Linux Mint)

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