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
#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