Estás en: Inicio >> Foros >> Informática >> Programación
Programación /

Listas enlazadas Insertar!

Participa en el tema Listas enlazadas Insertar! en el foro Programación.
Hola, quisiera que me ayudaran, es que quisiera que me codigo, inserte al inicio y ...

Buscar en este tema:
 
  •  
    #1 Listas enlazadas Insertar!
    Hola, quisiera que me ayudaran, es que quisiera que me codigo, inserte al inicio y al final de la lista. Al me podria ayudar con esto y ver como quedaria ya con esas implementaciones, se los agardeceria, ya llevo mucho tiempo y no me sale

    #include"stdafx.h"
    #include"stdio.h"
    #include"conio.h"
    #include"stdlib.h"
    #include"malloc.h"
    struct nodoLista{
    char dato;
    struct nodoLista *ptrsig; /*apuntador al siguiente nodo*/
    };
    typedefstruct nodoLista NodoLista;
    typedef NodoLista *ptrNodoLista;
    void insertar(ptrNodoLista *ptrS,char valor);
    char eliminar (ptrNodoLista *ptrS,char valor);
    void imprime(ptrNodoLista ptrActual);
    int vacia(ptrNodoLista ptrS);
    int main(){
    ptrNodoLista ptrInicial=NULL;/*No existen nodos*/
    int opc;
    char elemento;
    do{
    printf("---Menu---\n");
    printf("1..Insertar\n");
    printf("2..Eliminar\n");
    printf("3..Salir\n");
    printf("opc:");scanf("%d",&opc);
    switch(opc){
    case 1:
    system("cls");
    printf("Introduzca Caracter:");scanf("\n%c",&elemento);
    insertar(&ptrInicial,elemento);
    imprime(ptrInicial);
    system("cls");
    break;
    case 2:
    system("cls");
    if(!vacia(ptrInicial)){
    printf("Introduzca elemento a Eliminar:");scanf("\n%c",&elemento);
    /*si encuentra el carater lo remueve*/
    if(eliminar(&ptrInicial,elemento)){
    printf("Caracter eliminado\n");
    imprime(ptrInicial);
    }else printf("No se encuentra el caracter %c\n",elemento);
    }/*fin del if*/
    else printf("La lista esta vacia\n");
    system("cls");
    break;
    case 3:exit(0);break;
    defaultrintf("Opcion Invalidad\n");
    }}while(opc!=3);
    getch();
    return 0;
    }
    void insertar(ptrNodoLista *ptrS,char valor){
    ptrNodoLista ptrNuevo; /*apuntador nuevo nodo*/
    ptrNodoLista ptrAnterior;/*apuntador a un nodo anterior*/
    ptrNodoLista ptrActual;/*apuntador al nodo actual*/
    ptrNuevo=(struct nodoLista*)malloc(sizeof(NodoLista));/*crea un nodo*/
    if(ptrNuevo!=NULL){
    ptrNuevo->dato=valor;
    ptrNuevo->ptrsig=NULL;
    ptrAnterior=NULL;
    ptrActual=*ptrS;
    /*localiza la ubicacion correcta de la lista*/
    while(ptrActual!=NULL && valor> ptrActual->dato){
    ptrAnterior=ptrActual;
    ptrActual=ptrActual->ptrsig;/*siguiente nodo*/
    }
    /*insertar un nuevo nodo al principio de la lista*/
    if(ptrAnterior==NULL){
    ptrNuevo->ptrsig = *ptrS;
    *ptrS=ptrNuevo;
    }else{
    ptrAnterior->ptrsig=ptrNuevo;
    ptrNuevo->ptrsig=ptrActual;
    }
    }/*fin de if*/
    else printf("No se inserto dato no hay espacio disponible en memoria");
    }/*fin de la funcion insertar*/
    char eliminar (ptrNodoLista *ptrS,char valor){
    ptrNodoLista ptrAnterior;
    ptrNodoLista ptrActual;
    ptrNodoLista ptrTemp;/*apuntador a un nodo temporal*/
    /*eliminar primer nodo*/
    if(valor==(*ptrS)->dato){
    ptrTemp=*ptrS;/*almacena el nodo a eliminar*/
    *ptrS=(*ptrS)->ptrsig;/*desata el nodo*/
    free(ptrTemp);/*libera memoria del nodo desatado*/
    return valor;
    }/*fin del if*/
    else {
    ptrAnterior=*ptrS;
    ptrActual=(*ptrS)->ptrsig;
    while(ptrActual!=NULL && ptrActual->dato !=valor){
    ptrAnterior=ptrActual;
    ptrActual=ptrActual->ptrsig;
    }
    /*elimina nodo actual*/
    if(ptrActual!=NULL){
    ptrTemp=ptrActual;
    ptrAnterior->ptrsig=ptrActual->ptrsig;
    free(ptrTemp);
    return valor;
    }
    }/*fin else*/
    getch();
    }/*fin dela funcion eliminar*/
    void imprime(ptrNodoLista ptrActual){
    if(ptrActual==NULL)printf("La lista esta vacia\n");
    else{
    /*mientras no sea el final de la lista*/
    while(ptrActual!=NULL){
    printf("%c->",ptrActual->dato);
    ptrActual=ptrActual->ptrsig;
    }
    printf("NULL\n");
    }/*fin del else*/
    getch();
    }/*fin de la funcion imprimir*/
    int vacia(ptrNodoLista ptrS){
    return ptrS==NULL;
    }/*fin dela funcion vacia*/


    los system cls, es clrscr. Espero me puedan ayudar, se los agradeceria.
    +
     
    0
    Me gusta
     
    http://www.psicofxp.com/forums/programacion.313/905848-listas-enlazadas-insertar.html
    | Más
  • #2 Re: Listas enlazadas Insertar!

    1ero, Te compila asi tal cual esta?
    2do, queres que te inserte al principio o al final? las dos cosas a la vez no se puede. Salvo que hagas dos funciones insertarInicio, insertarFinal.
    3ro, Para insertar al final te recomiendo modificar la estructura e incluir un nodo mas que apunte al ultimo nodo. Con esto la insercion es muy sencilla sin necesidad de recorrer la lista desde el principio.
    Me gusta este mensaje
  • #3 Re: Listas enlazadas Insertar!

    Me olvidaba, te falta implementar una funcion que libere la memoria que asignas con malloc antes de terminar el programa.
    Código:
    void liberaMemoria(Lista *list){
        if(list==NULL) return;
          
        Lista*aux = NULL;
        while(list->ptrsig!=NULL){
            aux = list;
            list = list->ptrsig;
            free(aux);
            aux = NULL;
        }
        if(list->ptrsig==NULL){
            free(list);
            list = NULL;
            return;
        }
    }
    
    Me gusta este mensaje
Estás en: Inicio >> Foros >> Informática >> Programación


Estadísticas del tema
  • 2 RESPUESTAS
  • 2161 VISTAS
  • 2 USUARIOS RESPONDIERON
 
Ir arriba
Contacto | Acerca de | Ayuda | Términos Legales | privacidad | Pautas de convivencia | Mapa de los foros | TrabajÁ con nosotros
©2008 Psicofxp.com S.A. - Todos los derechos reservados
Certifica IAB