[C con Clase] AYUDA EN IMPLEMTANCION DE CODIGO

Adrian Ferreres Esteller adrian.ardi en hotmail.com
Vie Nov 28 09:15:14 CET 2008


Hola Cesar:

¿Cual es la fuente donde sacas los elementos? un archvo, una lista de argumentos... de todas formas sea como sea que quieras hacerlo yo creo que para ordenarlos automaticamente lo mejor es el quick sort ¿lo conoces?

http://es.wikipedia.org/wiki/Quicksort

Aqui tiene una manera de insercion de forma creciente. Aunque... para que te sea mas facil a lo mejor te interesa complicar un poco mas las estructura usando una lista doblemente enlazada, con un campo que te indique siempre la longitud y un puntero al principio y al final de la lista.

Luego para buscar es facil. Si conservas la longitud de la lista sabes que (longitud de la lista)/2 esta el elemento medio. Como tu nueva lista es doblemente enlazada puedes ir al elemento siguiente o al anterior. Si el elemento a buscar es menor que el elemento central mueve el puntero al siguiente elemento. Si el elemento central es mayor que el elemento a buscar pasate al elemento anterior.

Saludos:

Adrian Ferreres


> 1) Insertar los elementos en orden creciente.
> 2) Busca un valor dado en la lista. 
> 3) Eliminar un dato en la posición determinada 
> 4) Imprimir la lista. 
> 
> EL CODIGO QUE TENGO INSERTA LOS ELEMENTOS DE FORMA MANUAL Y NO SE COMO HACERLE PARA QUE LOS INSERTE AUTOMATICAMENTE DE FORMA CRECIENTE Y QUE LOS BUSQUE:::
> 
> AQUI ESTA EL CODIGO:
> 
> #include <stdio.h>
> #include <stdlib.h>
> 
> typedef struct nod{
>        int value;
>        struct nod* next;
> }node, *pNode, *List;
> 
> void add(List*, int, int);
> void dropList(List *);
> void removeElement(List*, int);
> void show(List);
> void mainMenu(List);
> 
> int main(int argc, char *argv[]){
>     List list = NULL;
>     
>     mainMenu(list);
>     return 0;
> }
> 
> void add(List *list, int v, int position){    
>      
>      printf("Agregando el elemento %d\n", v);
>      pNode toAdd;
>      pNode last = *list;
> 
>      int i;
>     
>      /* Crear un nodo nuevo */
>      toAdd = (pNode)malloc(sizeof(node));
>      toAdd -> value = v;
>     
>      /* Si la lista está vacía */
>      if (!last || position <= 0){
>         if (!last){
>            printf("%d es el primer elemento en la lista\n", v);
>         }else{
>               printf("Se agrego el elemento en la posicion inicial\n");
>         }
>         toAdd->next = *list;
>         *list = toAdd;
>         return;
>      }
>     
>      /* Se encuentra la posición en la que se agregará, si es mayor a 
>         la última posición, entonces se pondrá en la última posición */
>      for (i = 2; i<position; i++){
>          if (!last->next){
>             i++;
>             break;
>          }
>          last = last->next;
>      }
>      
>      /* Añadimos la lista a continuación del nuevo nodo */
>      toAdd->next = last->next;
>      last->next = toAdd;
>      printf("Se agrego el elemento %d en la posicion %d\n", v, i);
> }
> 
> void dropList(List *list){
>      printf("Borrando elementos de la lista\n");
>      int n=0;
>      pNode node;
> 
>      while (*list) {
>            node = *list;
>            *list = node->next;
>            free(node);
>            n++;
>      }
>      printf("Se han eliminado %d elementos de la lista\n", n);
> }
> 
> void removeElement(List *list, int v){
>      pNode last=NULL;
>      pNode node=*list;
>      int n=0;
>    
>      while (node && node->value != v) {
>            last = node; 
>            node = node->next;
>            n++;
>      }
>      
>      if (!node || node->value != v){
>         printf("No se ha encontrado el elemento\n");
>         return;
>      }
>      else { /* Borrar el nodo */
>           if (!last){ /* Primer elemento */
>              *list = node->next;
>           }
>           else {  /* un elemento cualquiera */
>                last->next = node->next;
>           }
>           printf("Eliminando el elemento en la posicion %d\n", n);
>           free(node);
>       }
> }
> 
> void show(List listHead){
>      if (!listHead){
>         printf("la lista esta vacia\n");        
>      }
>      else{     
>          printf("%d ", *listHead);
>          
>          while (listHead->next){
>                listHead=listHead->next;
>                printf("%d ", *listHead);
>          }
>          printf("\n");
>      }
> }
> 
> void mainMenu(List list){
>      int opc;
>      int val;
>      int pos;
>      
>      system("cls");
>      printf("Escoja la opcion\n 1. Imprimir lista\n 2. Agregar elemento\n 3. Borrar elemento\n 4. Salir\n");
>      fflush(stdin);
>      scanf("%d", &opc);
>      
>      system("cls");     
>      
>      switch (opc){
>             case 1:
>                  show(list);
>                  break;
>             case 2:
>                  printf("Ingrese el valor (entero) de la lista\n");
>                  fflush(stdin);
>                  scanf("%u", &val);
>                  printf("Ingrese la posicion en la que se agregara el elemento (si es mayor al tamano, este se agregara al final de la lsita)\n");
>                  fflush(stdin);
>                  scanf("%u", &pos);
>                  add(&list, val, pos);
>                  break;
>             case 3:
>                  printf("Ingrese el valor (entero) de la lista a eliminar\n");
>                  fflush(stdin);
>                  scanf("%u", &val);
>                  removeElement(&list, val);
>                  break;
>             case 4:
>                  dropList(&list);
>                  system("PAUSE");
>                  return;        
>      }
>      system("PAUSE");
>      mainMenu(list);
> } 


_________________________________________________________________
¡Este Otoño reta a tus amigos con el nuevo juego de preguntas LiveQuiz!
http://www.vivelive.com/LiveQuiz/
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20081128/d5102cd8/attachment.html>


Más información sobre la lista de distribución Cconclase