elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  AYUDA ORDENAR LISTA SIMPLE[C]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: AYUDA ORDENAR LISTA SIMPLE[C]  (Leído 9,095 veces)
HRSLASH

Desconectado Desconectado

Mensajes: 33



Ver Perfil
AYUDA ORDENAR LISTA SIMPLE[C]
« en: 23 Abril 2011, 04:22 am »

Hola gente del foro!! Estoy teniendo un problema para ordenar una lista simple, se q directamente podria insertar los nodos en forma ordenada, pero lo q quiero es ordenarlo al final para hacer un algoritmo q me ordene la lista.. El problema es q no se pq no me lo ordena correctamente.. No puedo encontrar el error.. usando un puntero auxiliar quiero extraer numeros de la lista e ir insertandolos ordenadamente en otra.. Espero q puedan ayudarme pq estoy volviendome loco..
aqui el codigo..

Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. struct nodo{
  5.    char data;
  6.    struct nodo *nextPtr;
  7. };
  8.  
  9. typedef struct nodo NODO;
  10. typedef NODO *NODOPTR;
  11.  
  12. void insertNodo(NODOPTR *, char);
  13. char deleteNodo(NODOPTR *, char);
  14. int listLength(NODOPTR);
  15. void ordenarAscendente(NODOPTR *, NODOPTR *);
  16. void printLista(NODOPTR);
  17.  
  18. main()
  19. {
  20.    NODOPTR startPtr = NULL, startPtr2 = NULL;
  21.    char value;
  22.    int choice;
  23.  
  24.    printf("Ingrese una opcion: ");
  25.    scanf("%d", &choice);
  26.  
  27.    while (choice != 4){
  28.        switch (choice){
  29.            case 1:
  30.                printf("Ingrese una letra: ");
  31.                scanf("%s", &value);
  32.                insertNodo(&startPtr, value);
  33.                printLista(startPtr);
  34.                break;
  35.            case 2:
  36.                printf("Ingrese una letra para borrar: ");
  37.                scanf("%s", &value);
  38.                deleteNodo(&startPtr, value);
  39.                printLista(startPtr);
  40.                break;
  41.            case 3:
  42.                if(listLength(startPtr) == NULL)
  43.                    printf("La lista no contiene elementos\n");
  44.                else
  45.                    printf("La lista contiene %d elementos\n", listLength(startPtr));
  46.                break;
  47.            default:
  48.                printf("Opcion inexistente");
  49.        }
  50.        printf("Ingrese una opcion: ");
  51.        scanf("%d", &choice);
  52.    }
  53.  
  54.    ordenarAscendente(&startPtr, &startPtr2);
  55.    printLista(startPtr2);
  56.  
  57.    return 0;
  58. }
  59.  
  60.  
  61.  
  62.  
  63.  
  64. void insertNodo(NODOPTR *sPtr, char val)
  65. {
  66.    NODOPTR newPtr, previousPtr, currentPtr;
  67.  
  68.    newPtr = (NODO*)malloc(sizeof(NODO));
  69.  
  70.    if (newPtr != NULL){
  71.        newPtr -> data = val;
  72.        newPtr -> nextPtr = NULL;
  73.  
  74.        previousPtr = NULL;
  75.        currentPtr = *sPtr;
  76.  
  77.        while (currentPtr != NULL){
  78.            previousPtr = currentPtr;
  79.            currentPtr = currentPtr -> nextPtr;
  80.        }
  81.  
  82.        if (previousPtr == NULL){
  83.            newPtr -> nextPtr = *sPtr;
  84.            *sPtr = newPtr;
  85.        }
  86.  
  87.        else{
  88.            previousPtr -> nextPtr = newPtr;
  89.            newPtr -> nextPtr = currentPtr;
  90.        }
  91.    }
  92.    else
  93.        printf("%s not inserted. Insuficient space", val);
  94. }
  95.  
  96. char deleteNodo(NODOPTR *sPtr, char val)
  97. {
  98.    NODOPTR previousPtr, currentPtr, tempPtr;
  99.  
  100.    if (val == (*sPtr) -> data){
  101.        tempPtr = *sPtr;
  102.        *sPtr = (*sPtr) -> nextPtr;
  103.        free(tempPtr);
  104.        return val;
  105.    }
  106.    else{
  107.        previousPtr = *sPtr;
  108.        currentPtr = (*sPtr) -> nextPtr;
  109.  
  110.        while(currentPtr != NULL && currentPtr -> data != val){
  111.            previousPtr = currentPtr;
  112.            currentPtr = currentPtr -> nextPtr;
  113.        }
  114.        if(currentPtr != NULL){
  115.            tempPtr = currentPtr;
  116.            previousPtr -> nextPtr = currentPtr -> nextPtr;
  117.            free(tempPtr);
  118.            return val;
  119.        }
  120.    }
  121.  
  122.    return '\0';
  123. }
  124.  
  125. int listLength(NODOPTR currentPtr)
  126. {
  127.    int cont = 0;
  128.  
  129.    if (currentPtr == NULL)
  130.        return NULL;
  131.    else{
  132.        while (currentPtr != NULL){
  133.            cont++;
  134.            currentPtr = currentPtr -> nextPtr;
  135.        }
  136.    }
  137.  
  138.    return cont;
  139. }
  140.  
  141. void ordenarAscendente(NODOPTR *sPtr, NODOPTR *sPtr2)
  142. {
  143.    NODOPTR auxPtr, previousPtr, currentPtr, tempPtr;
  144.  
  145.    //auxPtr = *sPtr;
  146.  
  147.    if (*sPtr == NULL)
  148.        printf("No hay elementos en la lista\n");
  149.    else{
  150.        while (*sPtr != NULL){
  151.            tempPtr = *sPtr;
  152.  
  153.            previousPtr = NULL;
  154.            currentPtr = *sPtr2;
  155.  
  156.            while (currentPtr != NULL && tempPtr -> data > currentPtr -> data){
  157.                previousPtr = currentPtr;
  158.                currentPtr = currentPtr -> nextPtr;
  159.                }
  160.  
  161.            if (previousPtr == NULL){
  162.                tempPtr -> nextPtr = *sPtr2;
  163.                *sPtr2 = tempPtr;
  164.            }
  165.            else{
  166.                previousPtr -> nextPtr = tempPtr;
  167.                tempPtr -> nextPtr = currentPtr;
  168.            }
  169.  
  170.            free(tempPtr);
  171.            *sPtr = (*sPtr) -> nextPtr;
  172.        }
  173.    }
  174. }
  175.  
  176. void printLista(NODOPTR currentPtr)
  177. {
  178.    if (currentPtr == NULL)
  179.        printf("La lista esta vacia");
  180.    else{
  181.        while (currentPtr != NULL){
  182.            printf("|%c|->", currentPtr -> data);
  183.            currentPtr = currentPtr -> nextPtr;
  184.        }
  185.    }
  186.    printf("NULL\n");
  187. }
  188.  

Saludos!!


En línea

La televisión es para mi el medio mas instructivo y cultural que conozco, cuando la prenden me voy a leer
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda con esta lista encadenada simple
.NET (C#, VB.NET, ASP)
alonsomzo 0 3,159 Último mensaje 3 Abril 2009, 00:39 am
por alonsomzo
Ordenar una lista de acuerdo a un dato miembro
Java
nico56 6 8,900 Último mensaje 20 Julio 2010, 09:53 am
por Debci
AYUDA C#!!! COMO ORDENAR UAN LISTA
.NET (C#, VB.NET, ASP)
neo_angel_xxx 2 10,134 Último mensaje 27 Octubre 2010, 19:43 pm
por [D4N93R]
Problema al ordenar lista c++.
Programación C/C++
Gaspi 6 3,709 Último mensaje 20 Febrero 2015, 22:53 pm
por Gaspi
ayuda lista simple imprecion de datos
Programación C/C++
jorgecotrinax 9 2,755 Último mensaje 1 Octubre 2019, 01:39 am
por K-YreX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines