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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / Listas - Ayuda porfavor [Dev C++] en: 7 Junio 2011, 23:24 pm
Buenas tardes.

Amigos alguien de buena voluntad podria ayudarme con una duda ya que mi profesor se niega a ayudarme y no tengo con quien apoyarme y no encuentro lo nesesario en tutoriales.

Problema: Debo crear un Menu de opciones, Crear nodo, Eliminar nodo, Mostrar nodos, Salir.

Tengo todo hecho pero la idea es que al crear el nodo salgan 3 opciones mas:
Insertar al inicio, Insertar entre (num,num) y insertar alfinal. Eso es lo que me tiene complicado como hacerlo con listas... tengo todo el codigo hecho en Dev C++ lo dejo por siacaso... estoy muy complicado


La más complicada es insertar entre (num,num) alguna idea? talvez modificando las funciones... lo intente y nada u.u

Código
  1. #include <stdlib.h>
  2. #include <conio.h>
  3. #include <stdio.h>
  4. #include<windows.h>
  5.  
  6. typedef struct _nodo {
  7. int dato;
  8. struct _nodo *siguiente;
  9. } tiponodo;
  10. typedef tiponodo *pnodo;
  11. typedef tiponodo *Lista;
  12.  
  13.  
  14. void Insertar(Lista *l, int v);
  15. void Borrar(Lista *l, int v);
  16. void BorrarLista(Lista *);
  17. void MostrarLista(Lista l);
  18.  
  19.  
  20. main(){
  21.  
  22.   system("Color 1A");
  23.   Lista lista = NULL;
  24.   pnodo p;
  25.   int i=0; //Contador para agregar nodos
  26.   int nusuario=0;
  27.   int nborrar=0;
  28.   int ciclo=1;
  29.   int op=0;
  30.   int ops=0;
  31.  
  32.       while(ciclo==1){
  33.  
  34.          printf("**********  MENU  **********\n\n\n\n");
  35.          printf(" 1) Crear nodo \n");
  36.          printf(" 2) Eliminar\n");
  37.          printf(" 3) Mostrar\n");
  38.          printf(" 4) Salir\n\n\n\n\n");
  39.  
  40.          printf("Opcion: ");
  41.          scanf("%d",&op);
  42.          system("cls");
  43.  
  44.          if(op==1){
  45.  
  46.             printf("\n\n 1) Insertar al inicio \n");
  47.             printf(" 2) Insertar al medio\n");
  48.             printf(" 3) Insertar al final\n");
  49.             printf("Opcion:");
  50.             scanf("%d",&ops);
  51.  
  52.             if(ops==1){
  53.                 system("cls");
  54.                 printf("nada");
  55.             }
  56.  
  57.         i=i+1; //Contador que indicara la cantidad de numeros ingresados
  58.             printf(" \nIngrese un numero %d: ",i);
  59.             scanf("%d",&nusuario);
  60.             Insertar(&lista, nusuario);
  61.  
  62.          }
  63.  
  64.      if(op==2){
  65.  
  66.             printf("\n Ingrese numero que desea borrar: ");
  67.     scanf("%d",&nborrar);
  68.     Borrar(&lista,nborrar);
  69.  
  70.          }
  71.  
  72.      if(op==3){
  73.  
  74.     MostrarLista(lista);
  75.             getchar();
  76.      }
  77.  
  78.      if(op==5){
  79.  
  80.     ciclo=2;
  81.  
  82.          }
  83.  getchar();
  84.  
  85.      }
  86.  
  87. }
  88.  
  89.  
  90.  
  91. void Insertar(Lista *lista, int v){
  92.  
  93.    pnodo nodo;
  94.    nodo = (pnodo)malloc(sizeof(tiponodo));
  95.    nodo->dato = v;
  96.    if(*lista == NULL) *lista = nodo;
  97.    else nodo->siguiente = (*lista)->siguiente;
  98.    (*lista)->siguiente = nodo;
  99.  
  100. }
  101.  
  102. void Borrar(Lista *lista, int v){
  103.    pnodo nodo;
  104.    nodo = *lista;
  105.    do{
  106.  
  107.   if((*lista)->siguiente->dato != v) *lista = (*lista)->siguiente;
  108.  
  109.    }while((*lista)->siguiente->dato != v && *lista != nodo);
  110.  
  111.    if((*lista)->siguiente->dato == v){
  112.   if(*lista == (*lista)->siguiente){
  113.  free(*lista);
  114.  *lista = NULL;
  115.   }
  116.       else{
  117.      nodo = (*lista)->siguiente;
  118.      (*lista)->siguiente = nodo->siguiente;
  119.      free(nodo);
  120.       }
  121.    }
  122. }
  123.  
  124. void BorrarLista(Lista *lista){
  125.    pnodo nodo;
  126. while((*lista)->siguiente != *lista) {
  127. nodo = (*lista)->siguiente;
  128. (*lista)->siguiente = nodo->siguiente;
  129. free(nodo);
  130. }
  131. free(*lista);
  132. *lista = NULL;
  133. }
  134.  
  135. void MostrarLista(Lista lista){
  136.    pnodo nodo = lista;
  137. do {
  138.   printf("%d -> ", nodo->dato);
  139.   nodo = nodo->siguiente;
  140. } while(nodo != lista);
  141. printf("\n");
  142. }

De antemano gracias
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines