Sunteți pe pagina 1din 20

INSTITUTO TECNOLGICO DE QUERTARO ESTRUCTURA DE DATOS

Que es una abstraccin? Un proceso mental, mediante el cual se extraen los rasgos esenciales de algo para representarlos por medio de un lenguaje grfico o escrito.

Puesto que es un proceso mental la accin es una accin subjetiva y creativa, esto es depende del contexto psicolgico de la persona que lo realiza.

TIPO DE DATOS ABSTRACTO


Un TDA es un tipo de dato definido por el programador que se puede manipular de un modo similar a los tipos de datos definidos por el sistema.

Est formado por un conjunto vlido de elementos y un nmero de operaciones primitivas que se pueden realizar sobre ellos.
Para construir un tipo abstracto debemos: 1. Exponer una definicin del tipo. 2. Definir las operaciones (funciones y procedimientos) que permitan operar con instancias de ese tipo. 3. Ocultar la representacin de los elementos del tipo de modo que slo se pueda actuar sobre ellos con las operaciones proporcionadas. 4. Poder hacer instancias mltiples del tipo.

ESTRUCTURA DE DATOS
Cualquier coleccin o grupo de datos organizados de tal forma que tengan asociados un conjunto de operaciones para poder manipularlos, se dice que conforma una estructura de datos.

MODULARIDAD
La Modulariad descompone un programa en un pequeo nmero de abstracciones independientes unas de otras pero fciles de conectarse entre si. Un mdulo se caracteriza principalmente por su interfaz y su implementacin.

USO TDA
Un TDA es el elemento bsico de la abstraccin de datos. Debe verse como una caja negra, pues la representacin y la implementacin deben permanecer ocultas El programador no tiene que preocuparse de cmo se representa un tipo particular de datos y slo tiene que trabajar con ellos en base a las especificaciones sintcticas y semnticas del diseador. 1. Determinar, ante un problema, los objetos candidatos a tipos de datos, estn o no estn en el lenguaje de partida. 2. Identificar las operaciones bsicas, primitivas entre dichos objetos. 3. Especificar dichas operaciones 4. Construir un programa, que usando estos tipos y estas operaciones resuelva el problema original. 5. Implementar los tipos y operaciones que no estn en el lenguaje de partida, con los elementos de dicho lenguaje 6. Determinar la eficiencia de la implementacin.

MANEJO DE MEMORIA
Para implementar alguna estructura de datos, primero es necesario tener muy claro cmo va a ser el manejo de memoria

Esttica Durante la ejecucin del programa el tamao de la estructura no cambia

Dinmica Durante la ejecucin del programa el tamao de la estructura puede cambiar

MEMORIA ESTTICA ARREGLOS


Definicin: Coleccin finita, homogenea y ordenada de elementos. Finita: Porque todo arreglo tiene un lmite. Homogenea: Porque todos los elementos son del mismo tipo. Ordenada: Porque se puede determinar cul es el ensimo elemento. Un arreglo tiene dos partes: Componentes e ndices

C1 C2 .... Cn

Componentes

i0

i1

in

ndices

Componentes: Hacen referencia a los elementos que forman el arreglo. ndices: Permiten referirse a los componentes del arreglo en forma individual.

MEMORIA ESTTICA ARREGLOS UNIDIMENSIONALES


Son los arreglos ms simples y constan de un solo ndice, tambin se llaman vectores. Notacin: Podra ser de diferentes maneras. Por ejemplo: Array [0...9] de enteros: Vector Vector: X

14 43 .... 4 x0

Componentes ndices

x1

x9

X hace referencia a todo el vector, mientras que x0, o x1 hace referencia los elementos en forma individual

MEMORIA ESTTICA ARREGLOS UNIDIMENSIONALES


Los arreglos se almacenan en forma adyacente, as que su representacin en memoria es:

X0 ,Direccin z; X1 ,Direccin z+1; Xn ,Direccin z+n

Cada elemento del arreglo se puede procesar como si fuera una variable simple. Ejemplo:
Suma X[2] i X[i] Suma + x[2] 15 3 15
15

X[i+2]

Sobre los vectores se pueden realizar las siguientes operaciones: Lectura/Escritura, Asignacin, Actualizacin (insertar, eliminar, Modificar), Ordenamiento y Bsqueda.

MEMORIA ESTTICA ARREGLOS BIDIMENSIONALES


Estos arreglos constan de dos ndices, tambin se llaman matrices. Notacin: Podra ser de diferentes maneras. Por ejemplo: Array [0...2, 0...2] de enteros: Matriz Matriz: M

Indices

34 43 90 83 2 41 56 75 3

0
1 2

Operaciones: Lectura, Escritura, Asignacin.

Componentes

MEMORIA ESTTICA ARREGLOS Y REGISTROS


I.

Registro Anidado: Por lo menos un campo del registro es de tipo registro.

Tipo registro: Domicilio Cadena: Calle Entero: Numero Cadena: Ciudad Fin Tipo Tipo registro: Cliente Cadena: Nombre Domicilio: Direccin Real: Saldo Fin Tipo

Cliente
Direccin

Nombre
Cll Num Ciu

Saldo

Notacin: Cliente.Nombre Cliente.Direccin.Calle

MEMORIA ESTTICA ARREGLOS Y REGISTROS


I.

Registro con Arreglos: Por lo menos un campo del registro es un array.

Array [0...2] de Real:Vector Tipo registro: Estudiante Cadena: Nombre Cadena: Cdigo Vector: Notas Fin Tipo
Nombre

Estudiante
Notas

Cdigo

Notacin: Estudiante.Nombre Estudiante. Notas[0]

MEMORIA ESTTICA IMPLEMENTACIN DE VECTORES Y MATRICES EN C++


Los ndices en C++ van de la posicin 0 hasta la posicin tamao - 1
int arregloEntero[10];
//Declaracion de un arreglo de 10 elementos, sin inicializar.

arregloEntero[5] = 45; //Asignacion de 45 al elemento 6 del arreglo. double arrPuntoFlotante[3] = {1.1,1.2,1.3};


//Declaracion y asignacion en un arreglo de 3 elementos double.

int a[4], b[5];


//Declaracion de dos arreglos enteros, de 4 y 5 elementos. Char m[2][3]; // Declaracin de una matriz de 2 renglones y 3 columnas de tipo char

En C++ no se puede asignar un arreglo completo a otro arreglo, es decir esto no se puede hacer: Char A[10], B[10]; . B = A; // No se puede asignar

MEMORIA ESTTICA IMPLEMENTACIN DE REGISTROS EN C++


VENDEDORES
NOMBRE APELLIDOS DIRECCION ID CANTIDAD DE PRODUCTOS NOMBRE

VARIOS PRODUCTOS PRODUCTO


CANTIDAD PRECIO SUBTOTAL PRECIO

struct unProducto { char name_prod[MAXCAD]; int cantidad; int precio ; int subtotal; }; struct variosProductos { int numProd ; unProducto vp[MAX_PV]; int precioTotal ; };

// nombre del producto

// numero de productos por vendedor //varios productos cada uno en una posicin del vector

struct Vendedor { char nombre[MAXCAD] ; char apellido[MAXCAD] ; char direccion[MAXCAD]; int ID ; variosProductos P ; };
struct Vendedor lista[MAX_V]; // Se crea un arreglo de vendedores struct Vendedor aux;

MEMORIA DINMICA APUNTADORES


Es tambin llamada almacenamiento libre y en estos casos el programador solicita (new) memoria para almacenar un objeto y es responsable de liberarla (delete) para que pueda ser reutilizada por otros objetos. Es aquella que se reserva en tiempo de ejecucin despus de leer los datos y de conocer el tamao exacto del problema a resolver. El sitio donde se almacenan los objetos se le denomina HEAP = MONTCULO pero el sitio preciso donde se encuentra tal montculo depende del compilador y el tipo de puntero utilizado en la reserva de memoria dinmica. Puntero (apuntador): un puntero o apuntador es un tipo especial de variable que almacena el valor de una direccin de memoria la cual puede ser de una variable individual, de un elemento de un arreglo, una estructura u objeto de una clase y se anota de la siguiente manera: Tipo de apuntador + nombre de la variable. Int * Pint; apuntador a un entero. Char * Pchar; apuntador de carcter.

La variable ptrcont contiene la direccin de memoria de la variable cont

ptrcont
29DC

cont 2

MEMORIA DINMICA APUNTADORES


Cuando el sistema operativo carga un programa para ejecutarlo y lo convierte en proceso, le asigna cuatro partes logicas en memoria principal:

Texto, Datos (estaticos), Pila y una Zona Libre. Esta zona libre (o Heap) es la que va a contener los datos dinamicos, la cual, a su vez, en cada instante de la ejecucion tendra partes asignadas a los mismos y partes libres que fragmentaran esta zona, siendo posible que se agote si no se liberan las partes utilizadas ya inservibles. (La pila tambien varia su tamano dinamicamente, pero la gestiona el sistema operativo, no el programador):

Fsicamente, un puntero no es ms que una direccin de memoria. En el ejemplo de la imgen derecha se muestra el contenido de la memoria con un puntero que apunta a la direccin 78AC(16, la cual contiene 6677(16:

MEMORIA DINMICA APUNTADORES

La referenciacin es la obtencin de la direccin de una variable. En C++ esto se hace a travs del operador &, aplicado a la variable a la cual se desea saber su direccin.

Ejemplo: int int p = q = i = 5; *p, *q; &i; // Se le asigna a p la direccin de i p; // Se le asigna a q la direccin almacenada en p (la misma de i)

La desreferenciacin es la obtencin del valor almacenado en el espacio de memoria donde apunta un apuntador. En C++ esto se hace a travs del operador *, aplicado al apuntador que contiene la direccin del valor.

Ejemplo: int x = 17, y; int *p; p = &x; cout << "El valor de x es: " << *p << endl; // Imprime 17 y=*p+3; // a y se le suma 3 ms para valer 20

MEMORIA DINMICA APUNTADORES

C++ ademas provee el operador binario ->, utilizado para obtener campos de un registro con un apuntador al mismo de una manera m as facil y legible.
struct Datos { char nombre[20]; int edad;

};
Datos d; Datos *pd = &d; (*pd).edad = 23; // Acceso al campo edad utilizando el operador . pd->edad = 23; // Acceso al campo edad utilizando el operador ->

MEMORIA DINMICA APUNTADORES Operadores New y Delete de C++

Operadores new y new[ ] Para solicitar memoria dinmica es: pointer = new type o pointer = new type [elementos]

int * empleado; empleado = new int [5]; If (empleado == NULL) { // error en la asignacin... };

empleado Operador delete y delete [] Una vez que no se necesita ms debera ser liberada para que se convierta en disponible para futuras solicitudes de memoria dinmica. Para este propsito existe el operador delete, cuya forma es: delete pointer; o delete [] pointer;

S-ar putea să vă placă și