Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Lokirs

#1
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 (cpp) [Seleccionar]
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include<windows.h>

typedef struct _nodo {
int dato;
struct _nodo *siguiente;
} tiponodo;
typedef tiponodo *pnodo;
typedef tiponodo *Lista;


void Insertar(Lista *l, int v);
void Borrar(Lista *l, int v);
void BorrarLista(Lista *);
void MostrarLista(Lista l);


main(){
     
  system("Color 1A");
  Lista lista = NULL;
  pnodo p;
  int i=0; //Contador para agregar nodos
  int nusuario=0;
  int nborrar=0;
  int ciclo=1;
  int op=0;
  int ops=0;

      while(ciclo==1){

         printf("**********  MENU  **********\n\n\n\n");
         printf(" 1) Crear nodo \n");
         printf(" 2) Eliminar\n");
         printf(" 3) Mostrar\n");
         printf(" 4) Salir\n\n\n\n\n");
         
         printf("Opcion: ");
         scanf("%d",&op);
         system("cls");

         if(op==1){
                   
            printf("\n\n 1) Insertar al inicio \n");
            printf(" 2) Insertar al medio\n");
            printf(" 3) Insertar al final\n");
            printf("Opcion:");
            scanf("%d",&ops);
           
            if(ops==1){
                system("cls");
                printf("nada");
            }
                 
        i=i+1; //Contador que indicara la cantidad de numeros ingresados
            printf(" \nIngrese un numero %d: ",i);
            scanf("%d",&nusuario);
            Insertar(&lista, nusuario);

         }

     if(op==2){
                         
            printf("\n Ingrese numero que desea borrar: ");
    scanf("%d",&nborrar);
    Borrar(&lista,nborrar);

         }

     if(op==3){
   
    MostrarLista(lista);
            getchar();
     }

     if(op==5){
                   
    ciclo=2;
   
         }
 getchar();

     }

}



void Insertar(Lista *lista, int v){
   
   pnodo nodo;
   nodo = (pnodo)malloc(sizeof(tiponodo));
   nodo->dato = v;
   if(*lista == NULL) *lista = nodo;
   else nodo->siguiente = (*lista)->siguiente;
   (*lista)->siguiente = nodo;
   
}

void Borrar(Lista *lista, int v){
   pnodo nodo;
   nodo = *lista;
   do{
       
  if((*lista)->siguiente->dato != v) *lista = (*lista)->siguiente;
 
   }while((*lista)->siguiente->dato != v && *lista != nodo);

   if((*lista)->siguiente->dato == v){
  if(*lista == (*lista)->siguiente){
 free(*lista);
 *lista = NULL;
  }
      else{
     nodo = (*lista)->siguiente;
     (*lista)->siguiente = nodo->siguiente;
     free(nodo);
      }
   }
}

void BorrarLista(Lista *lista){
   pnodo nodo;
while((*lista)->siguiente != *lista) {
nodo = (*lista)->siguiente;
(*lista)->siguiente = nodo->siguiente;
free(nodo);
}
free(*lista);
*lista = NULL;
}

void MostrarLista(Lista lista){
   pnodo nodo = lista;
do {
  printf("%d -> ", nodo->dato);
  nodo = nodo->siguiente;
} while(nodo != lista);
printf("\n");
}


De antemano gracias