Comunidad Underground Hispana  

Retroceder   Comunidad Underground Hispana > Programacion > Carbide C/C#/C++


Respuesta Crear Nuevo Tema
 
Compartir en twitter LinkBack Herramientas Desplegado
Antiguo 02-jul-2011, 21:31   #1
Recien llegado
 
Fecha de Ingreso: diciembre-2010
Amigos 0
Mensajes: 23
Gracias: 0
Agradecido 0 veces en 0 mensajes.
Predeterminado Lista enlazada simple

Hola, estoy tratando de hacer una función para buscar un elemento dentro de una lista y borrar todas las ocurrencias de ese elemento. Pero de seguro no ando ni cerca. Aquí está el código de la lista completa:

Código:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct ElementoLista
{
        char *dato;
        struct ElementoLista *siguiente;
        }Elemento;
 
typedef struct ListaIdentificar
{
        Elemento *inicio;
        Elemento *fin;
        int tam;
        }Lista;
 
void inicializar(Lista *lista);
int insertalistavacia(Lista *lista, char *dato);
int insertalistainicio(Lista *lista, char *dato);
int inserta_final(Lista *lista, char *dato, Elemento *actual);
void visualizar(Lista *lista);
int sup_inicio (Lista * lista);
void buscar(Lista *lista, char *dato);
int main()
{
    Lista lista;
    Elemento actual;
    inicializar(&lista);
    char d = 'a';
    char a = 'a';
    char b= 'b';
    char c='c';
    insertalistavacia(&lista, &b);
    buscar(&lista, &d);
 
    visualizar(&lista);
    system("pause");
    return 0;
}
void inicializar(Lista *lista)
{
     lista->inicio=NULL;
     lista->fin=NULL;
     int tam=0;
}
int insertalistavacia(Lista *lista, char *dato)
{
    Elemento *nuevo_elemento;
    if((nuevo_elemento=(Elemento *)malloc(sizeof(Elemento)))==NULL)
    return -1;
    if((nuevo_elemento->dato=(char *)malloc(50*sizeof(char)))==NULL)
    return -1;
    strcpy(nuevo_elemento->dato,dato);
    nuevo_elemento->siguiente=NULL;
    lista->inicio=nuevo_elemento;
    lista->fin=nuevo_elemento;
    lista->tam++;
    return 0;
}
int insertalistainicio(Lista *lista, char *dato)
{
     Elemento *nuevo_elemento;
     if((nuevo_elemento=(Elemento *)malloc(sizeof(Elemento)))==NULL)
     return -1;
     if((nuevo_elemento->dato=(char *)malloc(50*sizeof(char)))==NULL)
     return -1;
     strcpy(nuevo_elemento->dato,dato);
     nuevo_elemento->siguiente=lista->inicio;
     lista->inicio=nuevo_elemento;
     lista->tam++;
     return 0;
}
 
int inserta_final(Lista *lista, char *dato, Elemento *actual)
{
    Elemento *nuevo_elemento;
    if((nuevo_elemento = (Elemento *)malloc(sizeof(Elemento)))==NULL)
    return -1;
    if((nuevo_elemento->dato = (char *)malloc(50*sizeof(char)))==NULL)
    return -1;
    strcpy(nuevo_elemento->dato,dato);
    actual->siguiente = nuevo_elemento;
    nuevo_elemento->siguiente=NULL;
    lista->fin = nuevo_elemento;
    lista->tam++;
    return 0;
}
int sup_inicio (Lista *lista)
{
  if (lista->tam == 0)
    return -1;
  Elemento *sup_elemento;
  sup_elemento = lista->inicio;
  lista->inicio = lista->inicio->siguiente;
  if (lista->tam == 1)
    lista->fin = NULL;
  free (sup_elemento->dato);
  free (sup_elemento);
  lista->tam--;
  return 0;
}
void buscar(Lista *lista, char *dato)
{
     Elemento *actual;
     actual = lista->inicio;
     while(actual!=NULL)
     {
         if(dato==actual)
         {
             sup_inicio (&lista);
         }
         else
         {
             actual = actual->siguiente;
         }
     }
}
void visualizar(Lista *lista)
{
     Elemento *actual;
     actual = lista->inicio;
     while(actual!=NULL)
     {
        printf("%s\n", actual->dato);
        actual = actual->siguiente;
     }
}
  
Lain0x está desconectado   Responder Citando
Antiguo 04-jul-2011, 15:18   #2
Moderador
 
Avatar de ajr784
 
Fecha de Ingreso: marzo-2007
Amigos 5
Mensajes: 1.744
Gracias: 31
Agradecido 364 veces en 316 mensajes.
Predeterminado Respuesta: Lista enlazada simple

¿cuál es el problema? ¿qué es el error?
__________________
Cita:
Yo soy del mundo, mundo de los locos. Está de moda y están todos como locos
-- Veneno - Tan Bionica --
ajr784 está desconectado   Responder Citando
Antiguo 07-jul-2011, 13:28   #3
Recien llegado
 
Fecha de Ingreso: diciembre-2010
Amigos 0
Mensajes: 23
Gracias: 0
Agradecido 0 veces en 0 mensajes.
Predeterminado Respuesta: Lista enlazada simple

Cita:
Iniciado por ajr784 Ver Mensaje
¿cuál es el problema? ¿qué es el error?
El método buscar, no me funciona. Se que tengo errores, pero no los pude resolver.
Lain0x está desconectado   Responder Citando
Antiguo 07-jul-2011, 18:18   #4
Recien llegado
 
Fecha de Ingreso: diciembre-2010
Amigos 0
Mensajes: 23
Gracias: 0
Agradecido 0 veces en 0 mensajes.
Predeterminado Respuesta: Lista enlazada simple

Conseguí arreglar un poco el método buscar, y ahora quita uno de los valores ingresados, pero no muestra el valor del elemento que queda en la lista, sino que muestra su dirección.

Código:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct ElementoLista
{
        int *dato;
        struct ElementoLista *siguiente;
        }Elemento;
        
typedef struct ListaIdentificar
{
        Elemento *inicio;
        Elemento *fin;
        int tam;
        }Lista;
        
void inicializar(Lista *lista);
int insertalistavacia(Lista *lista, int *dato);
int insertalistainicio(Lista *lista, char *dato);
int inserta_final(Lista *lista, char *dato, Elemento *actual);
void visualizar(Lista *lista);
int sup_inicio (Lista * lista);
void buscar(Lista *lista, int *dato);

int main()
{
    Lista lista;
    Elemento actual;
    inicializar(&lista);
    int d = 2;
    int c = 3;
    int r;
    insertalistavacia(&lista, &d);
    insertalistavacia(&lista,&c);
    visualizar(&lista);
    buscar(&lista,&c);
     
    visualizar(&lista);
    system("pause");
    return 0;
}

void inicializar(Lista *lista)
{
     lista->inicio=NULL;
     lista->fin=NULL;
     int tam=0;
}

int insertalistavacia(Lista *lista, int *dato)
{
    Elemento *nuevo_elemento;
    if((nuevo_elemento=(Elemento *)malloc(sizeof(Elemento)))==NULL)
    return -1;
    if((nuevo_elemento->dato=(int *)malloc(50*sizeof(int)))==NULL)
    return -1;
    nuevo_elemento->dato=dato;
    nuevo_elemento->siguiente=NULL;
    lista->inicio=nuevo_elemento;
    lista->fin=nuevo_elemento;
    lista->tam++;
    return 0;
}

int insertalistainicio(Lista *lista, int *dato)
{
     Elemento *nuevo_elemento;
     if((nuevo_elemento=(Elemento *)malloc(sizeof(Elemento)))==NULL)
     return -1;
     if((nuevo_elemento->dato=(int *)malloc(50*sizeof(int)))==NULL)
     return -1;
     nuevo_elemento->dato=dato;
     nuevo_elemento->siguiente=lista->inicio;
     lista->inicio=nuevo_elemento;
     lista->tam++;
     return 0;
}
    
int inserta_final(Lista *lista, int *dato, Elemento *actual)
{
    Elemento *nuevo_elemento;
    if((nuevo_elemento = (Elemento *)malloc(sizeof(Elemento)))==NULL)
    return -1;
    if((nuevo_elemento->dato = (int *)malloc(50*sizeof(int)))==NULL)
    return -1;
    nuevo_elemento->dato=dato;
    actual->siguiente = nuevo_elemento;
    nuevo_elemento->siguiente=NULL;
    lista->fin = nuevo_elemento;
    lista->tam++;
    return 0;
}

int sup_inicio (Lista *lista)
{
  if (lista->tam == 0)
    return -1;
  Elemento *sup_elemento;
  sup_elemento = lista->inicio;
  lista->inicio = lista->inicio->siguiente;
  if (lista->tam == 1)
    lista->fin = NULL;
  free (sup_elemento->dato);
  free (sup_elemento);
  lista->tam--;
  return 0;
}

void buscar(Lista *lista, int *dato)
{
     
     Elemento *actual;
     actual = lista->inicio;
     
     while(actual!=NULL)
     {
         if(dato==actual->dato)
         {
             printf("El numero se encuentra");                  
             sup_inicio (lista);
             actual = actual->siguiente;
         }
        
     }
}

void visualizar(Lista *lista)
{
     Elemento *actual;
     actual = lista->inicio;
     while(actual!=NULL)
     {
        printf("%d\n", actual->dato);
        actual = actual->siguiente;
     }
}
  
Lain0x está desconectado   Responder Citando
Antiguo 07-jul-2011, 18:26   #5
Moderador
 
Avatar de ajr784
 
Fecha de Ingreso: marzo-2007
Amigos 5
Mensajes: 1.744
Gracias: 31
Agradecido 364 veces en 316 mensajes.
Predeterminado Respuesta: Lista enlazada simple

un error es aquello que se supone que debe hacer un programa pero no lo hace.
¿qué se supone que debe hacer el método que tiene error? y ¿ qué se supone que está haciendo?

Perdón que sea tan rompe con éste tema, pero la cosa es que por lo menos yo no me voy a tomar el trabajo de copiar tu código, compilarlo y descubrir en qué falla. Si guias un poco más por ahí me meto.... a menos que haya un alma generosa en éste foro y quiera hacer todo lo anterior.
__________________
Cita:
Yo soy del mundo, mundo de los locos. Está de moda y están todos como locos
-- Veneno - Tan Bionica --

Última edición por ajr784; 07-jul-2011 a las 18:38
ajr784 está desconectado   Responder Citando
Antiguo 27-jul-2011, 01:32   #6
Recien llegado
 
Fecha de Ingreso: julio-2011
Amigos 0
Mensajes: 1
Gracias: 0
Agradecido 0 veces en 0 mensajes.
Predeterminado Respuesta: Lista enlazada simple

hola...bueno tengo el codigo de dicho programa hecho en DEV C++.

Lista Ingresada: 12255889366
----- ---------

Lista Nueva : 1258936
----- ------

enviame mensaje sin aun estas interesado .
DjSeiku está desconectado   Responder Citando
Respuesta

Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los Códigos BB están Activado
Las Caritas están Activado
[IMG] está Activado
El Código HTML está Desactivado
Trackbacks están Activado
Pingbacks están Activado
Refbacks están Activado





Portal Hacker
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.0