kintralha Posted July 12, 2011 Report Share Posted July 12, 2011 Hola querida comunidad: espero alguien pueda ayudarme porque he intentado de todas las formas habidas y por haber y no me corre el programa, debo realizar lo siguiente con codeblock v. 10.1 Crear una lista doblemente enlazada, que tenga la capacidad de agregar y eliminar nodos. Esto se debe hacer con 2 funciones una llamada 'Agregar' y la otra 'Eliminar', las cuales deben ser llamadas desde el main. El 'Agregar' debe al crear el nodo pedir de inmediato al usuario que ingrese un numero, para almacenar en el nodo ese valor. La idea es ir agregando nodos con los valores que designe el usuario y a su vez ir ordenandolos de mayor a menor. El 'Eliminar' debe eliminar el numero o valor que el usuario desee. En en main hacer un menu, para invocar a una de estas dos funciones, ademas el manu debe dar la opcion 'salir'. Si alguien puede ayudarme, estaré eternamente agradecida. :bravo: Link to comment Share on other sites More sharing options...
Th3_K4T Posted July 12, 2011 Report Share Posted July 12, 2011 (edited) y cuál es tu duda? yo te voy a dar un esbozo pero recuerda que acá no se hacen tareas. Primero una lista doblemente enlazada es una lista que se puede recorrer en dos sentidos, esto es muy útil en ciertas ocasiones, sobre todo para ordenar nodos. Gráficamente una LDE se parece a esto: NULL <---- nodo 1 <----> nodo 2 -----> NULL Ahora suponte que tengamos una lista con nodos así: typedef struct LDE{ int valor: struct LDE *siguiente; struct LDE *anterior: } lde; Partimos con un nodo null null Le asignamos un valor (3) 3 agregamos otro (2) 2-3 agregamos otro (5) 2-3-5 agregamos otro (4) 2-3-4-5 Ahora si te fijas existen estos casos: *Agregar al comienzo *Agregar al medio *Agregar al final El insertar se parecería a algo como esto, head es la cabeza de la lista que se pasa por parámetro: void insertar(lde **head){ lde *nuevo=(lde*)malloc(sizeof(lde)); lde *laux = *head; nuevo->siguiente = null; nuevo->anterior = null //pedimos el número printf("Ingrese un nº: "); scanf("%d", &(nuevo->valor)); //nos ubicamos en el nodo en el que tenemos que intertar while (laux->siguiente && nuevo->valor<laux->valor) laux=laux->siguiente; //después de eso ves los casos posibles y insertas según corresponda. } por ejemplo si insertas el 3 al medio de esta lista: null<--1<-->2<-->4-->null entonces nuevo->siguiente=nodo4; nuevo->anterior=nodo2; nodo2->siguiente=nuevo; nodo4->anterior = nuevo; pero si lo insertas al comienzo o al final eso cambia. cómo sabes si estás al medio? porque los punteros entre los que tienes que ingresar los valores no son null, nodo4 y nodo 2 no son null. Las comparaciones son de ese estilo. Y trata de no abrir otro post, es el segundo que abres con lo mismo. Edited July 12, 2011 by Th3_K4T Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now