Jump to content

Ayuda Estructura de Datos


Recommended Posts

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

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 by Th3_K4T
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...