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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Listas Doblemente Ligadas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Listas Doblemente Ligadas  (Leído 4,694 veces)
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Listas Doblemente Ligadas
« en: 14 Enero 2013, 19:10 pm »

Saludos tengo unas cuantas dudas de cómo funcionan las Listas Doblemente Ligadas, cuando quiero insertar en alguna posición por ejemplo por la cabeza, como es doblemente ligada ¿tengo que hacer dos operaciones?¿una en cada dirección? algo como insertar por cabeza hacia adelante ó insertar por cabeza hacia atrás??

Aquí está como lo estoy enlazando:

Código
  1. NODO* crear_nodo(int x)
  2. {
  3.    NODO *p;
  4.    p = (NODO*)malloc(sizeof(NODO));
  5.    p->dato = x;
  6.    p->ant = NULL;
  7.    p->sig = NULL;
  8.    return p;
  9. }
  10.  
  11. void insertar_cabeza(NODO **cabeza,int x)
  12. {
  13.    NODO *nuevo;
  14.    nuevo = crear_nodo(x);
  15.    nuevo->sig = *cabeza;
  16.    nuevo->ant = ???;
  17.    *cabeza = nuevo;
  18. }

solo que en el nuevo->ant no se que poner porque el puntero anterior también debería apuntar a cabeza

de antemano gracias


En línea

dooque

Desconectado Desconectado

Mensajes: 170



Ver Perfil
Re: Listas Doblemente Ligadas
« Respuesta #1 en: 14 Enero 2013, 20:37 pm »

Hola!

En una lista doblemente enlazada cada nodo apunta hacia los vecinos que tiene, en los casos de los extremos, el primer y el último elemento de la lista solo apuntan al vecino que tiene sentido, i.e. el primer elemento apunta al siguiente, y ultimo al anterior, al resto de los campos deberías asignarles el valor NULL, i.e. el valor de "ant" en la cabeza es NULL, y el valor de "sig" en el ultimo elemento es NULL. Esto les de una propiedad en particular a estos elementos, que podes saber cual es el primero y cual es el ultimo con solo mirar sus campos.

Saludos.


En línea

Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.  -- Kernighan
twins

Desconectado Desconectado

Mensajes: 54


Ver Perfil
Re: Listas Doblemente Ligadas
« Respuesta #2 en: 15 Enero 2013, 23:24 pm »

Hola en una lista doble, el primer nodo y el ultimo nodo deben apuntar a NULL, por lo tanto tu codigo esta perfecto solo que en donde tienes nuevo->ant =???, aqui debes poner NULL ,saludos
En línea

m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: Listas Doblemente Ligadas
« Respuesta #3 en: 16 Enero 2013, 02:06 am »

Muchas gracias por sus respuestas :) pero entonces cuando quiero insertar por una posición no tengo que hacer dos operaciones?? por ejemplo si quiero insertar por cabeza tengo que hacer una función para insertar por cabeza hacia adelante y hacia atrás???

saludos
En línea

dooque

Desconectado Desconectado

Mensajes: 170



Ver Perfil
Re: Listas Doblemente Ligadas
« Respuesta #4 en: 16 Enero 2013, 02:32 am »

Hola!

¿Que sería insertar por cabeza hacia adelante o hacia atrás? Definí que serían para vos esas operaciones por favor.

Por otro lado, en un TAD (http://es.wikipedia.org/wiki/Tipo_de_dato_abstracto) "Lista" (puro) uno debería tener una única función de inserción, que es la que permite meter un elemento a la lista por adelante, comunmente llevan los nombres "append" o "insert_front" o cosas de ese estilo, que creo que es a lo que vos te referís con "insertar por cabeza".
En una lista doblemente enlazada, uno tiene tres operaciones de inserción debido a la facilidad que esta permite, estas operaciones son:

1) insertar por adelante.
2) insertar en la i-esima posición.
3) insertar por detrás.

son las tres funcionalidad básicas que tu TAD debería soportar siendo una Lista Doblemente Enlazada (http://es.wikipedia.org/wiki/Lista_(inform%C3%A1tica)#Lista_Doblemente_Enlazada).

Saludos.
En línea

Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.  -- Kernighan
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines