listas doblemente ligadas

20
ALGORITMOS Y ESTRUCTARA DE DATOS LISTAS DOBLEMENTE ENLAZADAS

Transcript of listas doblemente ligadas

Page 1: listas doblemente ligadas

ALGORITMOS Y ESTRUCTARA DE DATOS

LISTAS DOBLEMENTE ENLAZADAS

Page 2: listas doblemente ligadas

Defi niciones

• Cada nodo de una lista doblemente enlazada tiene dos enlaces, además de los campos de datos. Un enlace, el derecho, se utiliza para navegar la lista hacia delante. El otro enlace, el izquierdo, se utiliza para navegar la lista hacia atrás.

Page 3: listas doblemente ligadas

• Las Listas pueden crear, actualizar y eliminar elementos.

• En las Listas la posición de los elementos es relevante.

• Las Listas admiten elementos duplicados.

• Las Listas tienen dos protocolos, uno secuencial y el otro directo

Page 4: listas doblemente ligadas

DIAGRAMA DE FLUJO DE UN PROGRAMA QUE SUMA FUERZAS

Page 5: listas doblemente ligadas
Page 6: listas doblemente ligadas
Page 7: listas doblemente ligadas

#include<stdio.h>#include<stdlib.h>//definición de tipo de datos vectortypedef struct {

int compX; //componente en xint compY; //componente en yint compZ; //componente en zstruct vector *apSig; //apuntador a vectorstruct vector *apAnt; //apuntador a vector

}Vector; //fin de creación de tipo vector

Vector leeVector(); //prototipo de función que regresa un tipo de dato Vector

Page 8: listas doblemente ligadas

• int main()• {

• Vector *inicio; //apuntadores externos para manejar la lista doblemente enlazada

• Vector *ultimo;• Vector *siguiente;• Vector *anterior;

Page 9: listas doblemente ligadas

• Vector resultante; //variable del tipo Vector

• int numFuerzas=0;• int i=0;

•resultante.apAnt=NULL;//inicializacion

• resultante.apSig=NULL;• resultante.compX=0;• resultante.compY=0;• resultante.compZ=0;

Page 10: listas doblemente ligadas

• system("cls"); //limpia pantalla

• printf("Ingrese la cantidad de fuerzas que se aplicaran al sistema :");

•scanf("%d",&numFuerzas); //se piden las fuerzas al usuario

Page 11: listas doblemente ligadas

• inicio = (Vector *)malloc(sizeof(Vector)); //reserva un espacio de tamaño vector para guardar vectores y se le pasa la dirección de memoria al puntero inicio

• printf("\n\ningrese los datos del primer vector\n");

• *inicio = leeVector(); //se le asignan datos al primer nodo de la lista

• ultimo = inicio; //y también al puntero ultimo

Page 12: listas doblemente ligadas

• for(i=1;i<numFuerzas;i++)• {• printf("\nIngresa los

datos del vector: %d",i+1);• siguiente =

(Vector*)malloc(sizeof(Vector)); //reserva un espacio de tamaño vector para guardar vectores y se le pasa la dirección de memoria al puntero siguiente

Page 13: listas doblemente ligadas

• *siguiente = leeVector(); //se le asignan datos al primer nodo de la lista

• siguiente->apAnt = ultimo; //el nuevo nodo en su campo apAnt apunta a donde apunta último

Page 14: listas doblemente ligadas

• ultimo->apSig = siguiente; //al nodo que apunta último, en su campo apSig apunta a lo que apunta siguiente

• ultimo = siguiente; //último apunta a lo que apunta siguiente

• } //fin de for

Page 15: listas doblemente ligadas

• anterior = ultimo; //anterior apunta a lo que apunta ultimo

• for(i=numFuerzas;i>0;i--)• {• resultante.compX += anterior->compX;

//al campo compX de resultante, se le asigna el valor de la componente x del nodo al que apunta anterior

• resultante.compY += anterior->compY;• resultante.compZ += anterior->compZ;• anterior = anterior->apAnt;

//anterior apunta, a lo que apunta en su campo apAnt, el nodo al que apunta anterior

• } //fin de for

Page 16: listas doblemente ligadas

• //impresión de la resultante• printf("\n\nla resultante es:(%d)i+(%d)j+

(%d)k“ ,resultante.compX,resultante.compY,resultante.compZ);

• //free(inicio);• printf("\n\n");• system("pause"); //ingresa una pausa• return 0; //indica terminación exitosa del

programa• } //fin de main

Page 17: listas doblemente ligadas

//Inicio de la función lee vector• Vector leeVector()• {• Vector

fuerza={0,0,0,NULL,NULL}; //crea una variable del tipo Vector y la inicializa

• int x=0;• int y=0;• int z=0;

Page 18: listas doblemente ligadas

• printf("\n\nIngresa el valor de la componente en x: "); //ingreso de componentes

• scanf("%d",&x);

//por parte del usuario

• printf("\nIngresa el valor de la componente en y: ");

• scanf("%d",&y);• printf("\nIngresa el valor de la

componente en z: ");• scanf("%d",&z);

Page 19: listas doblemente ligadas

• fuerza.compX = x; //asignación de valores al vector

• fuerza.compY = y;• fuerza.compZ = z;

• return fuerza; //regresa un tipo de datos Vector; es decir al vector fuerza

• } //fin de función lee Vector

Page 20: listas doblemente ligadas

ALUMNOS:

DAVID ALEJANDRO DIAZ TECANTE

DAVID RODRIGUEZ FLORES