listas doblemente ligadas

Post on 25-Jun-2015

742 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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, 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

DIAGRAMA DE FLUJO DE UN PROGRAMA QUE SUMA FUERZAS

#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

• 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;//inicializacion

• 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.compZ);

• //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

top related