You are on page 1of 20

ALGORITMOS Y ESTRUCTARA DE

DATOS

LISTAS DOBLEMENTE ENLAZADAS


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.
• Las Listas pueden crear, • Las Listas admiten
actualizar y eliminar elementos duplicados.
elementos.
• Las Listas tienen dos
protocolos, uno
• En las Listas la posición secuencial y el otro
de los elementos es directo
relevante.
DIAGRAMA DE FLUJO DE UN
PROGRAMA QUE SUMA FUERZAS
#include<stdio.h>
#include<stdlib.h>
//definición de tipo de datos vector
typedef struct
{
int compX; //componente en x
int compY; //componente en y
int compZ; //componente en z
struct vector *apSig; //apuntador a vector
struct 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
• int main()
• {

• Vector *inicio;
//apuntadores externos
para manejar la lista
doblemente enlazada
• Vector *ultimo;
• Vector *siguiente;
• Vector *anterior;
• Vector resultante; //variable
del tipo Vector

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


resultante.apAnt=NULL;//inicia
lizacion
• resultante.apSig=NULL;
• resultante.compX=0;
• resultante.compY=0;
• resultante.compZ=0;
• system("cls"); //limpia
pantalla
• printf("Ingrese la cantidad
de fuerzas que se aplicaran al
sistema :");

scanf("%d",&numFuerzas);
//se piden las fuerzas al
usuario
• 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
• 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
• *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
• 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
• 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
• //impresión de la resultante
• printf("\n\nla resultante es:(%d)i+(%d)j+(%d)k“
,resultante.compX,resultante.compY,resultante.c
ompZ);
• //free(inicio);
• printf("\n\n");
• system("pause"); //ingresa una pausa
• return 0; //indica terminación exitosa del
programa
• } //fin de main
//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;
• 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);
• 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


ALUMNOS:

DAVID ALEJANDRO DIAZ TECANTE

DAVID RODRIGUEZ FLORES

You might also like