Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/10/2010, 23:16
Avatar de Lizy94
Lizy94
 
Fecha de Ingreso: diciembre-2009
Mensajes: 149
Antigüedad: 14 años, 4 meses
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