Foros del Web » Programación para mayores de 30 ;) » C/C++ »

duda con listas simples

Estas en el tema de duda con listas simples en el foro de C/C++ en Foros del Web. hola q tal, tengo una duda a lo q respecta listas simples en la opcion de borrar, el codigo es el siguiente Código PHP: struct Lista ...
  #1 (permalink)  
Antiguo 01/10/2010, 23:16
Avatar de Lizy94  
Fecha de Ingreso: diciembre-2009
Mensajes: 149
Antigüedad: 15 años
Puntos: 0
duda con listas simples

hola q tal, tengo una duda a lo q respecta listas simples en la opcion de borrar, el codigo es el siguiente

Código PHP:

struct Lista
{
 
char Dato;
 
struct Lista *Siguiente;
}
Lista;

typedef enum{false,true}boolean;
enum{insertar=1,borrar,salir};
boolean EstaVacia(struct Lista *);
void Insertar(struct Lista **,char);
char Borrar(struct Lista **,char);
void ImprimeLista(struct Lista *);
void Menu(void);

int main(void)
{
 
char dato;
 
int opcion;
 
struct Lista *Comenzar;
 
Comenzar=NULL;
 
Menu();//lama la funcion menu
 
scanf("%d",&opcion);
 while(
opcion!=salir){
  switch(
opcion){
    case 
insertarprintf("\nIntroduce un caracter: ");
                  
scanf("\n%c",&dato);
                  
Insertar(&Comenzar,dato);
                  
ImprimeLista(Comenzar);
                  
getch();
                  break;
    case 
borrar:   if(!EstaVacia(Comenzar)){
                    
printf("\nIntroduce el caracter que deseas borrar: ");
                    
scanf("\n%c",&dato);
                    if(
Borrar(&Comenzar,dato)){
                     
printf("%c ha sido borrado.\n",dato);
                     
ImprimeLista(Comenzar);
                    }
                    else 
printf("%c no se encontro en la lista.\n\n",dato);
                  }
                  else 
printf("La lista esta vacia.\n\n");
                  
getch();
                  break;
    default:      
gotoxy(30,20);
                  
printf("Opcion Incorrecta.");
                  
getch();
                  
Menu();
                  break;
    }
    
Menu();
    
scanf("%d",&opcion);
    }
 
gotoxy(30,24);
 
printf("Fin de %s",__FILE__);
// sleep(1);
 
return 0;

la parte de borrar

Código PHP:

char Borrar
(struct Lista **PtrLista,char dato)
{
 
struct Lista *Anterior,*Actual,*Temporal;
/*aqui lo q entiendo es q  verifica q el dato realmente se encuentre en la lista*/
 
if(dato==(*PtrLista)->Dato)
{
  
Temporal=*PtrLista;
  *
PtrLista=(*PtrLista)->Siguiente;
  
free(Temporal);
  return 
dato;
 }
/*en esta parte es la q ya no comprendo, por q si en el if corroboraba q el dato
 introducido por el usuario estuviese en lista
 entonces toda esa parte del else q hace ahi */
 
else
{
  
Anterior=*PtrLista;
  
Actual=(*PtrLista)->Siguiente;
  while(
Actual!=NULL && Actual->Dato!=dato){
    
Anterior=Actual;
    
Actual=Actual->Siguiente;
  }
  if(
Actual!=NULL){
    
Temporal=Actual;
    
Anterior->Siguiente=Actual->Siguiente;
    
free(Temporal);
    return 
dato;
  }
 }
 return 
'\0';

Si alguien pudiese explicarme
  #2 (permalink)  
Antiguo 02/10/2010, 06:40
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 8 meses
Puntos: 228
Respuesta: duda con listas simples

No tiene sentido que con un simple igual se verifique todo eso. Lo que hace ahi es fijarte si es el primer elemento a borrar. Ya que este por lo general se trata de forma especial a la hora de borrar.

Si no es el primero itera hasta encontrarlo(va uno a uno corroborando en el while). Cuando lo encuentra lo saca.
  #3 (permalink)  
Antiguo 02/10/2010, 13:56
Avatar de Lizy94  
Fecha de Ingreso: diciembre-2009
Mensajes: 149
Antigüedad: 15 años
Puntos: 0
Respuesta: duda con listas simples

si es muy cierto c me olvidaba q la desventaja en listas es q tiene q recorrer nodo x nodo, creo ya estaba cansada, gracias ;)

Etiquetas: listas, simples
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:49.