Estructura de Datos. TDA: Listas. Primer Semestre, Indice. Tipos de estructura de datos lineales

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Estructura de Datos. TDA: Listas. Primer Semestre, 2010. Indice. Tipos de estructura de datos lineales"

Transcripción

1 Estructura de Datos TDA: Listas Prof. Mauricio Solar Prof. Lorna Figueroa Parte del material fue obtenido de Lic. Claudio Barúa Primer Semestre, 2010 Indice Tipos de estructura de datos lineales Listas Tipos de Listas TAD Lista Tipos de estructura de datos lineales Las estructuras lineales de datos se caracterizan porque sus elementos están en secuencia, relacionados en forma lineal, uno luego del otro. Cada elemento de la estructura puede estar conformado por uno o varios subelementos o campos que pueden pertenecer a cualquier tipo de dato, pero que normalmente son tipos básicos.

2 Aplicación de ED lineales Son comunes en la vida diaria: listas de alumnos, listas de clientes, listas de espera, listas de distribución de correo, etc. En el área de la Computación: El desarrollo de compiladores de lenguajes de programación que están conformados por varios subprogramas con finalidades más específicas, como por ejemplo: el analizador de léxico que genera la tabla de símbolos. La simulación discreta de sistemas a través del computador, donde la mayoría de los paquetes de simulación digital ofrecen lenguajes de simulación que soportan las primitivas para el manejo de colas y sus diferentes versiones. Aplicación de ED lineales La realización de sistemas operativos para los computadores, los cuales hacen un uso intensivo de las estructuras lineales, ya que internamente se soportan en los sistemas operativos, las colas de ejecución para los dispositivos, las pilas de llamadas a los subprogramas de cualquier programa, las listas de usuarios en los sistemas operativos multiusuarios, etc. Son estructuras de datos útiles para casos en los que se quiere almacenar información de la que no se conoce su tamaño con antelación. Son valiosas para situaciones en que el volumen de datos se puede incrementar o decrementar dinámicamente durante la ejecución del programa. Listas Una estructura lineal de datos o lista está conformada por ninguno, uno o varios elementos que tienen una relación de adyacencia ordenada donde existe un primer elemento, seguido de un segundo elemento y así sucesivamente hasta llegar al último. Son TDA secuenciales de 0 o más elementos de un tipo dado almacenados en memoria. Estructuras lineales: cada elemento de la lista, excepto el primero, tiene un único predecesor y cada elemento de la lista, excepto el último, tiene un único sucesor.

3 Listas Estructuras lineales: cada elemento de la lista, excepto el primero, tiene un único predecesor y cada elemento de la lista, excepto el último, tiene un único sucesor. Longitud: Número de elementos de la lista. Lista vacía: Si tiene 0 elementos. En una lista se puede añadir nuevos elementos o suprimirlos en cualquier posición. Ejemplo implementado con arreglos: Listas: Formalmente Dado un dominio D, una lista es una sucesión finita de elementos. Representación: <a 0, a 1, a 2,..., a n-1 > n es la longitud de la lista. 0, 1, 2,..., n-1 son las posiciones de los elementos en la lista. El elemento a i ocupa la posición i Listas: Formalmente Si la lista tiene n elementos, no existe ningún elemento que ocupe la posición n. a 0 es el primer elemento de la lista. a n-1 es el último elemento de la lista. La lista vacía se representa como <> Los elementos de una lista están ordenados por su posición. a i precede a a i+1 a i sigue a a i-1

4 Operaciones sobre Listas Algunas operaciones son: Inserción Supresión Recorrido Ordenación Búsqueda Consulta Tipos de Listas No enlazada (arreglo) Enlazada (objetos) Doblemente enlazada (anterior apunta al siguiente y viceversa) Circular (el último apunta al primero) Circular doblemente enlazada A la vez pueden estar: Ordenada No ordenada Listas enlazadas Está formada por una colección de elementos (denominados nodos). Cada nodo almacena dos valores: un valor de la lista y un puntero o referencia que indica la posición del nodo que contiene el siguiente valor de la lista. Se debe almacenar al menos la posición del primer elemento. Es dinámica, su tamaño puede cambiar durante la ejecución del programa.

5 Listas enlazadas Lista enlazada: a partir de un nodo se puede acceder al que ocupa la siguiente posición en la lista. Esta característica indica que el acceso a las listas es secuencial y no indexado, por lo que para acceder al último elemento de la lista hay que recorrer los n-1 elementos previos (n es el tamaño de la lista). Para que un nodo acceda al siguiente y la lista no se rompa en varias listas, cada nodo tiene un puntero con la dirección de memoria que ocupa el siguiente elemento. Esquema de una Lista enlazada Representación esquemática de un nodo: Información Nodo siguiente almacena el objeto a guardar mantiene la conexión con el siguiente nodo. Información Nodo siguiente Información Nodo siguiente Información Nodo siguiente Lista doblemente enlazada Tiene enlace con elemento siguiente y con el anterior. Ventaja: puede recorrerse en ambos sentidos, para efectuar una operación con cada elemento para insertar, actualizar o borrar. búsquedas son más rápidas puesto que no hace falta hacer referencia al elemento anterior. Desventaja: ocupan más memoria por nodo que una lista simple.

6 Listas circulares (enlazadas) Último elemento tiene una referencia (enlace) con el primer elemento (cabecera). Pueden ser listas simples o doblemente circulares. El TAD Lista TDA Lista Insertar Consultar Borrar Ordenar Recorrer XXX XXX XXX XXX XXX XXX... XXX XXX El TAD Lista tlista conjunto de las listas (es decir, tipo lista). telemento conjunto de los elementos básicos (el tipo de datos que se almacenará en la lista). tposicion tipo posición. Importante de la representación: utilizar conjunto finito y ordenado: Hay un primer y un último elemento. Dado un elemento se puede determinar el siguiente (si no es el último) y el anterior (si no es el primero).

7 El TAD Lista Si una lista tiene longitud n y se elimina el elemento que ocupa una determinada posición i, entonces : la longitud pasa a ser n-1 el elemento que estaba en la posición i+1 pasará a ocupar la posición i, el de la posición i+2 pasará a ocupar la posición i+1 y así sucesivamente. Operaciones primitivas del TAD Lista Se proponen las siguientes primitivas : void vacia(tlista L) tposicion primero(tlista L) tposicion fin(tlista L) tposicion siguiente(tposicion p, tlista L) tposicion anterior(tposicion p, tlista L) tposicion posicion(telemento x, tlista L) telemento elemento(tposicion p, tlista L) void insertar(telemento x, tposicion p, tlista L) void borrar(tposicion p, tlista L) Especificación semántica y sintáctica void vacia(tlista L) PRE: L = <a 1,a 2,...,a n > POST: L = < > { deja vacía la lista tposicion primero(tlista L) PRE: L está inicializada. POST: RESULTADO = (L) { devuelve la primera posición de la lista Si la lista es < > coincide con fin(l) tposicion fin(tlista L) PRE: L está inicializada. POST: RESULTADO = (n + 1) { posición detrás de la última

8 Especificación semántica y sintáctica tposicion siguiente(tposicion p, tlista L) PRE: L = <a 1,a 2,...,a n >, 1 <= p <= n POST: RESULTADO = p + 1 { devuelve la posición siguiente a la posición p tposicion anterior(tposicion p, tlista L) PRE: L = <a 1,a 2,...,a n >, 2 <= p <= n+1 POST: RESULTADO = p 1 { devuelve la posición anterior a la posición p Especificación semántica y sintáctica tposicion posicion(telemento x, tlista L) PRE: L está inicializada. POST: Si j {1,2,...,n / a j = x RESULTADO = i, donde i verifica: a i = x y si a j = x j >= i { entrega la posición de la primera aparición de x en la lista L telemento elemento(tposicion p, tlista L) PRE: L = <a 1,a 2,...,a n >, 1 <= p <= n POST: RESULTADO = a p { devuelve el elemento ubicado en la posición p Especificación semántica y sintáctica void insertar(telemento x, tposicion p, tlista L) PRE: L = <a 1, a 2,...,a n >, 1 <= p <= n+1 POST: L = <a 1,...,a p-1, x, a p+1,...,a n > { Resulta una lista de longitud n+1, en la que x ocupa la posición p. Si p = n entonces la lista resultante es L =< a 1,...,a n-1,x,a n > void borrar(tposicion p, tlista L) PRE: L = <a 1,a 2,, a p-1, a p,a p+1,...,a n >, 1 <= p <= n POST: L = <a 1,...,a p-1, a p+1,...,a n > { elimina el elemento que ocupa la posición p, de forma que ahora la posición p la ocupa el elemento que se encontraba en la posición p+1.

9 Ejercicios Definir la especificación semántica y sintáctica de las siguientes operaciones: crear // Crear una Lista inicialmente vacía escribir // muestra el contenido de un nodo destruir // elimina una Lista Ejemplos Ejemplo 1: 1: escribir todos los los elementos de de una lista. void salida (tlista L) L) { tposicion p; p; telemento x; x; for for (p (p = primero(l); p!=!= fin(l); p = siguiente(p, L)) { x = elemento(p, L); L); escribe(x); // // definir operación en en el el TAD Ejemplos Ejemplo 2: 2: copia de de una lista en en otra tlista copia (tlista L) L) { tlista L2; tposicion p; p; vacia(l2); for for (p (p = primero(l); p!=!= fin(l); p = siguiente(p,l)) insertar(elemento(p,l), fin(l2), L2); return L2;

10 Ejemplos Ejemplo 3: eliminar todos los elementos repetidos de una lista dada. Suponer : existe una función lógica, es_igual(x,y), para determinar si son iguales dos elementos de este tipo. No basta considerar el operador de igualdad del C ( == ), porque es posible que no coincidan con la igualdad de telemento. Ejemplos Por qué no basta? Ejemplo: los números racionales definidos como: typedef struct { int num; int den; racional; int intes_igual (racional x; x; racional y) y) { return (x.num*y.den == == y.num*x.den); Ejemplos void elimina(tlista L) L) { tposicion p, p, q; q; for for (p (p = primero(l); p!=!= fin(l); p = siguiente(p, L)) { q = siguiente(p,l); while (q (q!= fin(l)) if if ((*es_igual(elemento(p, L), L), elemento(q, L))) borrar(q, L); L); else q = siguiente(q, L); L);

11 Ejemplos Ejemplo 4: Definir una función que: guarda en una lista los números enteros del 0 al 9, después la recorre eliminando los impares, y por último escribe el resultado dos veces: desde el primer elemento al último, y desde el último al primero. void voidejemplo4 (()) { int inti; i; tlista L; L; tposicion p; p; for for (( i=0; i=0; i i < 10; 10; i++ i++ )) insertar( i, i, primero(l), L ); ); for for (( p = primero(l); p!=!= fin(l); )) { i i = elemento(p,l); if if (i (i% 2) 2) borrar(p,l); else else p = siguiente(p,l); for for (( p = primero(l); p!=!= fin(l); p = siguiente(p,l) )) { i i = elemento(p,l); printf("elemento: %d %d\n",i); for for (p (p = fin(l); p!=!= primero(l); p = anterior(p,l)) { i i = elemento(anterior(p,l), L); L); printf("elemento: %d %d\n", i); i); destruir(l); // // agregar definición en en el el TAD Implementación del TAD Listas

12 Implementación Dinámica de Listas Las estructuras dinámicas permiten : Crear estructuras de datos que se adapten a las necesidades reales. Crear estructuras de datos muy flexibles, ya sea en cuanto a el orden (tamaño), la estructura interna o las relaciones entre los elementos que las componen. Implementación Dinámica de Listas Las estructuras de datos dinámicas, están compuestas de : otras estructuras llamadas nodos o elementos, que agrupan los datos con los que trabajará el programa. uno o más punteros autorreferenciales, punteros a objetos del mismo tipo de la estructura nodo. Implementación Dinámica de Listas Estructura básica de un nodo para crear listas: struct nodo { int info; struct nodo *sig; ; info sig El campo sig es un puntero que apunta a un objeto del tipo nodo. Para acceder a un nodo de la estructura sólo se necesita un puntero a un nodo.

13 Implementación Dinámica de Listas Tipos de estructuras dinámicas: dependen de: Número de punteros y Relaciones entre nodos Tipos básicos: Listas secuenciales Pilas Colas Listas circulares Listas doblemente enlazadas Arboles Grafos Listas secuenciales La forma más simple de estructura dinámica es la lista secuencial. Los nodos se organizan de modo que cada uno apunta al siguiente El último apunta a nada, Campo sig vale NULL. info sig dato 1 dato... 2 dato n-1 dato n Listas secuenciales L info sig dato... 1 dato n-1 dato n Existe un nodo especial: el primero, conocido como cabecera, header. la única información que contiene es la referencia (dirección de memoria) al primer nodo de la Lista. Siempre debe existir un puntero al primer nodo de la lista, es el único puntero por el que se puede acceder a la lista. Si la lista está vacía puntero para accesar la lista es NULL.

14 Listas secuenciales Nodo típico para construir listas: struct nodo { int info; struct nodo *sig; ; nodo info sig Listas Gráficamente, una lista se visualiza: L dato 1 dato... 2 dato n Es importante que nunca se pierda el valor del puntero al primer elemento, Si se pierde, será imposible acceder al nodo y no se podrá administrar el espacio de memoria que ocupa. Listas en C Se definen varios tipos que facilitan el manejo de las listas. Ejemplo : typedef struct nodo { int intinfo; struct nodo *sig; TNodo; typedef TNodo *pnodo; typedef TNodo *TLista; TNodo es el tipo para declarar nodos. pnodo es el tipo para declarar punteros a un nodo. TLista es el tipo para declarar listas.

15 Implementación de las primitivas del TAD Lista void crear(tlista *L) void vacia(tlista L) tposicion primero(tlista L) tposicion fin(tlista L) tposicion siguiente(tposicion p, tlista L) tposicion anterior(tposicion p, tlista L) tposicion posicion(telemento x, tlista L) telemento elemento(tposicion p, tlista L) void insertar(telemento x, tposicion p, tlista L) void borrar(tposicion p, tlista L) Implementación Dinámica del TAD listas void voidcrear(tlista *L) *L){ // // crea crea una una lista lista inicialmente vacía L = (tlista)malloc(sizeof(nodo)); if if (L (L == == NULL) { printf("memoria Insuficiente."); exit(1); L sig = NULL; void voidvacia (tlista *L) *L){ // // elimina los los nodos de de una una lista, lista, // // y libera el el espacio de de memoria pnodo pos pos = L; L; while( L!=!= NULL) { L = L sig; free(pos); pos pos = L; L; Implementación Dinámica del TAD listas pnodo* primero (tlista L) L) { return L; L; pnodo* fin fin (tlista L) L) { pnodo pos pos = L; L; while (pos (pos!=!= NULL) pos pos = pos pos sig; sig; return pos; pos; pnodo* siguiente (pnodo pos, pos, tlista L) L) { if if (pos->sig == == NULL) { printf( Fin de de lista"); exit(1); return pos->sig;

16 Implementación Dinámica del TAD listas pnodo* posicion (telemento x, x, tlista L) L) { pnodo pos; int intesta; pos pos = primero(l); esta = 0; 0; while ((pos!=!= NULL) && (!esta)) { if if (L (L sig sig info == == x) x) esta = 1; 1; else siguiente(pos); return pos; Implementación Dinámica del TAD listas telemento elemento (pnodo pos, tlista L) L) { if if (pos == == NULL) { printf("error: posicion fin(l)."); exit(1); return pos pos info; Implementación Dinámica del TAD listas Insertar; en esta operación se debe considerar : insertar un nodo en una lista vacía, insertar un nodo al principio de una lista no vacía, insertar un nodo al final, insertar un nodo en una posición intermedia

17 Insertar lista vacía Es el caso más sencillo. Consideraciones: Ya se tiene el nodo a insertar, un puntero que apunte a él, El puntero a la lista valdrá NULL L NULL q nodo nodo dato info sig Insertar lista vacía 1. q sig apunte a NULL : L NULL q dato info sig 1 Insertar lista vacía 2. L apunte a lo mismo que q : L q 2 dato info NULL sig Finalmente : L q dato info sig

18 Insertar primera posición de la lista Consideraciones: Ya se tiene el nodo a insertar y, un puntero que lo referencie. q 0 Una lista no vacía: L Insertar primera posición de la lista 1. Hacer que q sig apunte a L: L q 0 info sig 1 Insertar primera posición de la lista 2. Hacer que L tome el valor q: q L info sig Finalmente : L q 0 info sig

19 Insertar última posición de la lista Se asumirá: Que la lista no está vacía : L dato... 1 dato 2 dato n-1 dato n Que existe un puntero llamado ult : ult Y un puntero llamado q con el elemento a insertar : q dato i Insertar última posición de la lista 1. Se requiere un puntero al último elemento de la lista: Desde el primer nodo, avanzar hasta que el campo sig sea NULL L ult 1 Insertar última posición de la lista 2. Hacer que q sig sea NULL: q Hacer que ult sig apunte a q: L ult 3 q 123

20 Insertar última posición de la lista Finalmente : L ult q Insertar posición intermedia de la lista Se asumirá: Que la lista no está vacía : L dato... 1 dato 2 dato n-1 dato n Que existe un puntero llamado ant : ant Y un puntero llamado q con el elemento a insertar: q dato i Insertar posición intermedia de la lista 1. El nodo ant será aquel a continuación del cual se insertará el nuevo nodo: L ant 1 q 47

21 Insertar posición intermedia de la lista 2. Hacer que q sig tome el valor de ant sig L ant q 47 2 Insertar posición intermedia de la lista 3. Hacer que ant sig apunte a q L q ant 47 Insertar posición intermedia de la lista Finalmente : L ant q

22 Insertar posición intermedia de la lista Tarea : implementar las funciones : anterior borrar más ejemplos Recorrer una lista Es común recorrer una lista, para buscar un valor o un nodo. Las listas sólo pueden recorrerse en un sentido: Cada nodo apunta al siguiente. No se puede obtener un puntero al nodo anterior desde un nodo cualquiera; a menos que se recorra la lista desde el principio.

23 Recorrer una lista Modo de recorrer una lista: Usar un puntero auxiliar para recorrer la lista: Asignar al puntero auxiliar el valor del puntero inicial de la lista. Iniciar un ciclo que al menos debe tener la condición que el puntero auxiliar no sea nulo. Dentro del ciclo asignar al puntero auxiliar el valor del nodo siguiente al nodo actual. Mostrar valores almacenados en una lista typedef struct nodo { int intinfo; struct nodo *sig; TNodo; typedef TNodo *pnodo; typedef TNodo *TLista;... pnodo aux; Tlista L; L;... aux = L; L; while(aux) { printf("%d\n", aux info); aux = aux sig;... Ejemplo: mostrar valores almacenados en una lista hasta encontrar uno que sea mayor que 100. aux = L; L; while(aux && aux info <= <= 100) { printf("%d\n", aux info); aux = aux sig;......

24 Eliminar nodo en una lista Considerar que el nodo a eliminar sea: El primer nodo de la lista. Un nodo cualquiera de la lista. El último nodo de la lista. Eliminar primer nodo de la lista Se asume que se tiene: Una lista con uno o más nodos: L Un puntero auxiliar, q: q Eliminar primer nodo de una lista 1. Hacer que q apunte al primer elemento de la lista (L). L dato 1 dato 2... q 1

25 Eliminar primer nodo de una lista 2. Asignar a L la dirección del segundo nodo de la lista: L = L sig; 2 L dato 1 dato 2... q Eliminar primer nodo de una lista 3. Liberar memoria asignada a primer nodo. L q dato 1 dato Finalmente : L... dato 2 Eliminar primer nodo de una lista IMPORTANTE: Si no se guarda el puntero al primer nodo antes de actualizar L, después no se puede liberar la memoria que ocupa. Si se libera la memoria antes de actualizar L, se pierde la dirección de la lista. Si la lista sólo tiene un nodo, el proceso también es válido, ya que el valor de L sig es NULL. Después de eliminar el primer nodo, la lista queda vacía, y el valor de L es NULL. El proceso para borrar listas completas eficientemente, es eliminar desde el primer nodo hasta que la lista esté vacía.

26 Eliminar nodo intermedio de una lista Se tiene : Una lista L con al menos dos elementos. Un puntero al nodo anterior al que se quiere eliminar. Nodo a eliminar L dato 1 dato 2 dato 3 dato 4 ant Un puntero auxiliar q: q Eliminar nodo intermedio de una lista 1. Hacer que q apunte al nodo que se quiere borrar. L dato 1 dato 2 dato 3 dato 4... ant q 1 Eliminar nodo intermedio de una lista 2. Asignar a la dirección del nodo anterior, la dirección que tiene el nodo que se eliminará: ant sig = q sig; 2 L dato 1 dato 2 dato 3 dato... 4 ant q

27 Eliminar nodo intermedio de una lista 3. Liberar la memoria asociada al nodo que se quiere eliminar. L dato 1 dato 2 ant q dato 3 dato 4 3 Finalmente : L dato 1 dato 2 dato 4 ant Eliminar último nodo de una lista Se usa el procedimiento anterior, ya que: ant pasará a ser el último nodo, y ant sig valdrá NULL Acceder elementos en una lista Sólo hay un modo de moverse a través de una lista: hacia adelante. A veces es necesario acceder a elementos de una lista, por ejemplo: el primero, el siguiente, el anterior, el último.

28 Acceder al primer elemento de una lista Más accesible; es al que apunta el puntero que define la lista. Para obtener un puntero al primer elemento bastará con copiar el puntero L (que es el puntero al primer nodo de la lista). q = L; Acceder al elemento siguiente Suponiendo que se tiene un puntero q que señala a un elemento de una lista. Para obtener un puntero al siguiente bastará con asignarle el campo sig del nodo, q = q sig; Acceder al elemento anterior No es posible retroceder en una lista, por lo tanto, para obtener un puntero al nodo anterior a uno dado: Empezar a recorrer la lista desde el primer nodo. Ir avanzando hasta que el nodo siguiente sea el nodo buscado.

29 Acceder al último elemento Para obtener un puntero al último elemento de una lista: Se parte de un nodo cualquiera, por ejemplo el primero. Se avanza hasta que el campo sig del nodo sea NULL. Lista vacía? Basta con comparar el puntero L con NULL if (L == NULL) Algoritmo para borrar un elemento Se asume lista ordenada ascendentemente. Para eliminar nodo q se necesita puntero al nodo anterior: Partir del primer nodo. Avanzar mientras la lista no esté vacía, o mientras no se cumpla la condición de búsqueda. Localizar el nodo a eliminar, si es que existe, sin perder el puntero al nodo anterior.

30 Algoritmo para borrar un elemento Puede darse tres casos: 1. Que q sea NULL: valores almacenados en la lista son menores que el que se busca el nodo buscado no existe. Retornar sin borrar nada. 2. Que el valor almacenado en q sea mayor que el buscado, retornar sin borrar nada significa que el nodo buscado no existe. 3. Que el valor almacenado en el nodo sea igual al que se busca. Algoritmo para borrar un elemento Si existe el dato a borrar, se dan dos casos: 1. Que el nodo a eliminar sea el primero de la lista. Modificar valor de puntero inicial para que apunte al nodo siguiente. 2. Que el nodo a eliminar no sea el primero de la lista. asignar a ant sig la dirección del nodo a eliminar Liberar memoria del nodo. void Borrar(TLista *L, int intx) x) { pnodo ant, q = L; L; ant ant = NULL; while( (q (q!=null) && (q (q info < x) x) )){ ant ant = q; q; q = q sig; if( if( q = = NULL) return; else if if (q (q info!=!= x )) return; else { // // borrar el el nodo if(ant == == NULL) // // primer elemento L = q sig; else // // un un elemento cualquiera ant ant sig sig = q sig; free(q);

31 Ejemplo: lista ordenada en C Construir una lista para almacenar números enteros, de modo que siempre esté ordenada de menor a mayor. El primer elemento se introducirá en una lista vacía, y el resto, en la posición adecuada. Insertar un elemento en una lista vacía es equivalente a insertarlo en la primera posición. No se incluirá una función para asignar un elemento en una lista vacía la función para insertar en la primera posición sirva para ese caso también. Ejemplo: lista ordenada en C Algoritmo de inserción: 1. Crear un nodo q para el dato a insertar. 2. Si L es NULL, o el valor del primer elemento de la lista es mayor que el nuevo, insertar el nuevo nodo en la primera posición de la lista. 3. En caso contrario, buscar el lugar adecuado para la inserción: Se tiene un puntero ant. Inicializarlo con el valor de L, y avanzar mientras ant sig no sea NULL y el dato que contiene ant sig sea menor o igual que el dato a insertar. 4. Como ant señala al nodo adecuado, insertar el nuevo nodo a continuación de él. void Insertar(Lista *L, int intx) x) { pnodo nuevo, ant; // // Crear un un nodo nuevo nuevo = (pnodo)malloc(sizeof(tnodo)); nuevo info = x; x; // // Si Si la la lista está vacía if((listavacia(l)) (L (L info > x)) x)) { // // Añadir al al inicio de de lista el el nuevo nodo nuevo sig sig = L; L; // // Comienzo de de lista es es nodo nuevo L = nuevo;

32 else { // // Buscar el el nodo de de valor menor a x ant ant = L; L; // // Avanzar hasta último elemento o hasta que // // siguiente tenga valor mayor que x. x. while((ant sig sig!=!= NULL)&&(ant sig info <= <= x)) x)) ant ant = ant ant sig; nuevo sig sig = ant sig; // // Insertar nuevo nodo ant sig sig = nuevo; Listas Circulares Último elemento de la lista Primer elemento de la lista Listas Circulares Secuencia de elementos donde el último elemento de la lista apunta al primero. Estructura en la que todo elemento tiene un sucesor y un predecesor. Estructuras con características parecidas: redes de computadores con configuraciones de anillo. comunicación mediante paso de mensajes, interfaces de usuario, etc.

33 Implementación en C Listas Circulares #include <stdlib.h> #include <stdio.h> typedef struct _nodo { int intvalor; struct _nodo *sig; tiponodo; typedef tiponodo *pnodo; typedef tiponodo *Lista; // // Funciones con con listas: void Insertar(Lista *l, *l, int intv); void Borrar(Lista *l, *l, int intv); void BorrarLista(Lista *); *); void MostrarLista(Lista l); l); Implementación en C Listas Circulares int intmain() { Lista lista = NULL; pnodo p; p; Insertar(&lista, 10); Insertar(&lista, 40); Insertar(&lista, 30); Insertar(&lista, 20); Insertar(&lista, 50); MostrarLista(lista); Borrar(&lista, 30); Borrar(&lista, 50); MostrarLista(lista); BorrarLista(&lista); system("pause"); return 0; 0; Implementación en C Listas Circulares void Insertar(Lista *lista, int intv) v) { pnodo nodo; // // Creamos un un nodo para el el nuevo valor a insertar nodo = (pnodo)malloc(sizeof(tiponodo)); nodo valor = v; v; // // Si Si la la lista está vacía, la la lista será el el nuevo nodo // // Si Si no no lo lo está, insertamos el el nuevo nodo a // // continuación del del apuntado por por lista if(*lista == == NULL) *lista = nodo; else nodo sig sig = (*lista) sig; sig; // // En En cualquier caso, cerramos la la lista circular (*lista) sig sig = nodo;

34 Implementación en C Listas Circulares void Borrar(Lista *lista, int intv) v) { pnodo nodo; nodo = *lista; // // Hacer que que lista apunte al al nodo anterior al al de de valor v do do { if((*lista) sig valor!=!= v) v) *lista = (*lista) sig; sig; while((*lista)->sig valor!=!= v && *lista!=!= nodo); // // Si Si existe un un nodo con con el el valor v: v: if((*lista) sig valor == == v) v) { // // Y si si la la lista sólo tiene un un nodo Implementación en C Listas Circulares if(*lista == == (*lista) sig) sig) { // // Borrar toda la la lista free(*lista); *lista = NULL; else { // // Si Si la la lista tiene más de de un un nodo, borrar el el nodo de de valor v nodo = (*lista) sig; sig; (*lista) sig sig = nodo sig; sig; free(nodo); Implementación en C Listas Circulares void BorrarLista(Lista *lista) { pnodo nodo; // // Mientras la la lista tenga más de de un un nodo while((*lista) sig sig!=!=*lista) { // // Borrar el el nodo siguiente al al apuntado por por lista nodo = (*lista) sig; sig; (*lista) sig sig = nodo sig; sig; free(nodo); // // Y borrar el el último nodo free(*lista); *lista = NULL;

35 Implementación en C Listas Circulares void MostrarLista(Lista lista) { pnodo nodo = lista; do do { printf("%d ", ", nodo valor); nodo = nodo sig; sig; while (( nodo!=!= lista ); ); printf("\n"); Ejemplos: int intlargo (struct nodo* Lc) Lc) { //// devuelve el el largo de de una una lista circular struct nodo * ptr; ptr; int inti i = 0; 0; if if (( Lc Lc!=!= NULL )){ ptr ptr = Lc; Lc; i++; ptr ptr = ptr sig; sig; while (ptr (ptr!=!= Lc) Lc) { i++; ptr ptr = ptr sig; sig; return i; i; Ejemplos: void Mostrar (struct nodo* Lc) Lc) { //// imprime el el contenido de de los los datos //// almacenados en en una una lista circular struct nodo * ptr; ptr; if if (( Lc Lc!=!= NULL )){ ptr ptr = Lc; Lc; printf( \n \n%d %d,, Lc info); ptr ptr = ptr sig; sig; while (ptr (ptr!=!= Lc) Lc) { printf( \n \n%d %d,, Lc info); ptr ptr = ptr sig; sig;

36 int intcontprimos (struct nodo* Lc) Lc) // // devuelve la la cantidad de de números primos en en // // una una lista circular Lc Lc { struct nodo *ptr; int inti i = 0; 0; if if (Lc (Lc!=!= NULL) { ptr ptr = Lc; Lc; if if (Primos(Lc info)) i++; ptr ptr = ptr sig; sig; while (ptr (ptr!=!= Lc) Lc) { if(primos(ptr info)) i++; ptr= ptr sig; sig; return i; i; boolean Primos(tElemento x) x) { // // Determina si si x es es número primo int inti i = 2, 2, contdiv = 2; 2; while ((contdiv == == 2) 2) && (i<=x/2)) { if(x if(x % i i == == 0) 0) contdiv++; i++; if(contdiv == == 2) 2) return true; else return false; Ejemplos : void Menor (telemento dato, struct nodo *Lc) { // // elimina de de la la lista circular, los los elementos menores que que dato struct nodo *ptr; if if (( Lc Lc!=!= NULL )){ ptr ptr = Lc; Lc; ptr ptr = ptr sig; sig; while (ptr (ptr!=!= Lc) Lc) { if( if( ptr info < dato) EliminarNodoLC(Lc, ptr); // // IMPLEMENTAR ptr= ptr sig; sig;

37 Listas Doblemente Enlazadas struct nodold { int intinfo; struct nodold *sig, *ant; ; ; struct nodold * ld ld ;; Listas dobles Insertar void InsertarLD(nodoLD *ld, int intx) x) { // // Inserta en en una una lista doble ordenada ascendentemente nodold aux, actual; // // Crear un un nodo nuevo aux aux = (nodold)malloc(sizeof(nodold)); aux info = x; x; aux ant ant = NULL aux sig sig = NULL; // // Colocar actual en en la la primera posición de de la la lista actual = ld; ld; if(actual==null) // // la la lista está vacía ld ld = aux; Sigue Listas dobles Insertar else // // la la lista no no está vacía if(actual info > x) x) { // // el el primer elemento es es mayor // // Añadir al al principio de de la la lista el el nuevo nodo aux sig sig = actual; aux ant ant = NULL; actual ant ant = aux; ld ld = aux; else { // // el el primer elemento es es menor // // Avanzar hasta el el último elemento o hasta que que el el // // siguiente nodo tenga un un valor mayor que que x while((actual sig sig!=null)&&(actual sig info<= x)) x)) actual = actual sig; sig; Sigue

38 Listas dobles Insertar // // Insertar el el nuevo nodo después del del nodo anterior if if (( actual sig sig == == NULL) { aux sig sig = actual sig; sig; actual sig sig = aux; aux ant ant = actual; else { actual sig ant ant = aux; aux sig sig = actual sig; sig; aux ant ant = actual; actual sig sig = aux; Listas dobles Borrar Localizar el el nodo de de valor a eliminar Existe? SI: SI: Es Es el el nodo apuntado por por lista? SI: SI: Hacer que que lista apunte a otro sitio. Es Es el el primer nodo de de la la lista? NO: nodo->anterior->sgte = nodo->sgte Es Es el el último nodo de de la la lista? NO: nodo->sgte->anterior = nodo->anterior Borrar nodo NO NO :: No No existe el el nodo Listas dobles Borrar a ant info sig b p c p ant sig=p sig; a b c p p sig ant = p ant; a b c p free(p); a b c p

39 Listas dobles Borrar void BorrarLD(struct nodold *p) *p) { // // elimina el el nodo apuntado por por p if if (p ant ant!=!= NULL) p ant sig sig = p sig; sig; if if (p sig sig!=!= NULL) p sig ant ant = p ant; ant; Listas dobles Imprimir void MostrarLD(nodoLD ld) ld) { nodold p = ld; ld; if( if( ld ld == == NULL )) printf("lista vacía"); else while(p!=!= NULL) { printf("%d ", ", p info); p = p->sig; Listas dobles Programa en C #include <stdlib.h> #include <stdio.h> #define ASCENDENTE 1 #define DESCENDENTE 0 typedef struct _nodo { int intvalor; struct _nodo *sigte; struct _nodo *anterior; tiponodo; typedef tiponodo *pnodo; typedef tiponodo *Lista; // // Funciones con con listas dobles: void Insertar(Lista *ls, *ls, int intv); void Borrar(Lista *ls, *ls, int intv); void BorrarLista(Lista *); *); void MostrarLista(Lista ls, ls, int intorden);

40 Listas dobles Programa en C int intmain() { Lista ls ls = NULL; pnodo p; p; Insertar(&ls, 20); Insertar(&ls, 10); Insertar(&ls, 40); Insertar(&ls, 30); MostrarLista(ls, ASCENDENTE); MostrarLista(ls, DESCENDENTE); Borrar(&ls, 10); Borrar(&ls, 15); Borrar(&ls, 45); Borrar(&ls, 30); MostrarLista(ls, ASCENDENTE); MostrarLista(ls, DESCENDENTE); BorrarLista(&ls); system("pause"); return 0; 0; Listas dobles Programa en C void MostrarLista(Lista lst, lst, int intorden) { pnodo nodo = lst; lst; if(!lst) printf("lista vacía"); nodo = lst; lst; if(orden == == ASCENDENTE) { while(nodo anterior) nodo = nodo anterior; printf("orden ascendente: "); "); while(nodo) { printf("%d ", ", nodo valor); nodo = nodo sigte; Listas dobles Programa en C else { while(nodo siguiente) nodo = nodo siguiente; printf("orden descendente: "); "); while(nodo) { printf("%d ", ", nodo valor); nodo = nodo anterior; printf("\n");

41 Matrices Dispersas Tienen gran cantidad de ceros: Ejemplo: Matrices Dispersas Almacenamiento en arreglos (que es el usual): Ineficiente. Solución: almacenar sólo los elementos distintos de cero. Ocupar estructuras de listas enlazadas. Construir las listas usando como base un nodo con las siguientes características: Abajo Fila Columna Derecha Valor Fila y Columna: enteros que indican el número de la columna y fila a la cual se enlazan. Abajo: puntero que enlaza al próximo elemento no nulo de la misma columna. Derecha: puntero que enlaza el próximo elemento no nulo en la misma fila. Valor: información almacenada. Matrices Dispersas Se forman varias listas circulares: una por cada fila y columna, una lista de todas las cabezas de filas y otra de las cabezas de columna.

42 Ejercicios: Crear las siguientes funciones en C: 1. void Ultimo( Lista L, int *Elemento) // devuelve el último elemento de la lista (el más a la derecha). 2. int Está_en ( int Elemento, Lista) // Devuelve Verdad si el Elemento está en la Lista, // y Falso en otro caso. 3. void Duplicar( Lista L1, Lista *L2) // Devuelve una lista en la que cada elemento de la lista // ha sido duplicado. Ejemplo : Duplicar( H,O,L,A) devuelve ( H,H,O,O,L,L,A,A). Ejercicios: 4. int Buscar( Lista L, int Elemento) // el objetivo es retornar la posición i-ésima en la que se // almacena el valor dado como argumento. Ejemplo: Buscar([A,B,C,G,H,S,C,A,G], H) = 5 Buscar([A,B,C,G,H,S,C,A,G], P) = 0 Buscar([A,B,C,G,H,S,C,A,G], G) = 4 donde [A,B,C,G,H,S,C,A,G] representa a una lista. Bibliografía - Webgrafía Abstracción de datos 1. Estructura de Datos Como programar en Java. Deitel y Deitel. Listas Listas, pilas y colas. Ejercicios 7. Fundamentos de programación. Libro de problemas. Luis Joyanes Aguilar 8.

INTRODUCCIÓN. Estructura de Datos Tipos Abstractos de Datos (TAD S) Profs. Lorna Figueroa M. Mauricio Solar F. UTFSM 1 / 2008

INTRODUCCIÓN. Estructura de Datos Tipos Abstractos de Datos (TAD S) Profs. Lorna Figueroa M. Mauricio Solar F. UTFSM 1 / 2008 INTRODUCCIÓN Estructura de Datos Tipos Abstractos de Datos (TAD S) Para poder obtener un programa que resuelva un problema dado, son necesarios varios pasos : La formulación y especificación del problema

Más detalles

Tema 2. Memoria Dinámica. 2.1 Datos estáticos y dinámicos

Tema 2. Memoria Dinámica. 2.1 Datos estáticos y dinámicos Tema 2 Memoria Dinámica 2.1 Datos estáticos y dinámicos Datos estáticos: su tamaño y forma es constante durante la ejecución de un programa y por tanto se determinan en tiempo de compilación. El ejemplo

Más detalles

DEFINICION. Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

DEFINICION. Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006 ARBOLES ESTRUCTURAS DE DATOS 2006 DEFINICION Un árbol (tree) es un conjunto finito de nodos. Es una estructura jerárquica aplicable sobre una colección de elementos u objetos llamados nodos; uno de los

Más detalles

Instituto Politécnico Nacional

Instituto Politécnico Nacional Instituto Politécnico Nacional Secretaria Académica Dirección de Estudios Profesionales Escuela Superior de Ingeniería Mecánica y Eléctrica Unidad Culhuacan Ingeniería en Comunicaciones y Electrónica Academia

Más detalles

INSTITUTO SUPERIOR TECNOLÓGICO NORBERT WIENER

INSTITUTO SUPERIOR TECNOLÓGICO NORBERT WIENER INSTITUTO SUPERIOR TECNOLÓGICO NORBERT WIENER ASIGNATURA: Estructura de la Información PROGRAMA: S3C Lima-Perú 2 LISTAS 1. INTRODUCCIÓN. Dado un dominio D, una lista de elementos de dicho conjunto es una

Más detalles

Árboles. Cursos Propedéuticos 2015. Dr. René Cumplido M. en C. Luis Rodríguez Flores

Árboles. Cursos Propedéuticos 2015. Dr. René Cumplido M. en C. Luis Rodríguez Flores Árboles Cursos Propedéuticos 2015 Dr. René Cumplido M. en C. Luis Rodríguez Flores Contenido de la sección Introducción Árbol genérico Definición y representación Árboles binarios Definición, implementación,

Más detalles

PRÁCTICA No. 13 ÁRBOL BINARIO DE BÚSQUEDA

PRÁCTICA No. 13 ÁRBOL BINARIO DE BÚSQUEDA INSTITUTO POLITÉCNICO NACIONAL SECRETARIA ACADÉMICA DIRECCIÓN DE EDUCACIÓN SUPERIOR ESIME CULHUACAN NOMBRE ALUMNO: FECHA DIA MES AÑO INGENIERÍA EN COMPUTACIÓN ASIGNATURA 1. Objetivo Apellido paterno ESTRUCTURAS

Más detalles

Estructuras de Datos Dinámicas. Diseñar y programar en lenguaje C soluciones utilizando estructuras de datos dinámicas

Estructuras de Datos Dinámicas. Diseñar y programar en lenguaje C soluciones utilizando estructuras de datos dinámicas Fundación Misión Sucre Colegio Universitario de Caracas Taller 3: Estructuras de Datos Dinámicas Objetivo Diseñar y programar en lenguaje C soluciones utilizando estructuras de datos dinámicas Contenido

Más detalles

ELO320 Estructuras de Datos y Algoritmos. Arboles Binarios. Tomás Arredondo Vidal

ELO320 Estructuras de Datos y Algoritmos. Arboles Binarios. Tomás Arredondo Vidal ELO320 Estructuras de Datos y Algoritmos Arboles Binarios Tomás Arredondo Vidal Este material está basado en: Robert Sedgewick, "Algorithms in C", (third edition), Addison-Wesley, 2001 Thomas Cormen et

Más detalles

Tecnólogo Informático- Estructuras de Datos y Algoritmos- 2009

Tecnólogo Informático- Estructuras de Datos y Algoritmos- 2009 Árboles Ejemplos de estructuras arborescentes: con forma de árbol Regla de Alcance: los objetos visibles en un procedimiento son aquellos declarados en él mismo o en cualquier ancestro de él (cualquier

Más detalles

TAD Lineales: Pila, Cola y Lista

TAD Lineales: Pila, Cola y Lista TAD Lineales: Pila, Cola y Lista Objetivos! Dar a conocer los TAD lineales pila, cola y lista! Presentar la especificación de cada uno de los TAD! Discutir implementaciones alternativas para cada uno de

Más detalles

ÁRBOLES GENERALES Y Y ESTRUCTURAS DE ÍNDICES DEFINICIONES Y REPRESENTACIONES DEFINICIONES Y REPRESENTACIONES. NOMENCLATURA SOBRE ÁRBOLES. DECLARACIÓN Y REPRESENTACIÓN.. CONSTRUCCIÓN.. ÁRBOLES 2-3-4. ÁRBOLES

Más detalles

Estructuras de datos: Árboles binarios de

Estructuras de datos: Árboles binarios de Estructuras de datos: Árboles binarios de búsqueda, Dep. de Computación - Fac. de Informática Universidad de A Coruña Santiago Jorge santiago.jorge@udc.es Árboles binarios de búsqueda, Table of Contents

Más detalles

Organización de Computadoras

Organización de Computadoras Organización de Computadoras Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Segundo Cuatrimestre de 2015 Proyecto N 1 Programación en Lenguaje C El objetivo principal

Más detalles

Arreglos. // Incluir E/S y Librerías Standard #include #include

Arreglos. // Incluir E/S y Librerías Standard #include <stdlib.h> #include <stdio.h> Arreglos Introducción. En los temas anteriores se han estudiado los diferentes tipos de datos simples de C++, usados para representar valores simples como enteros, reales o caracteres. Sin embargo, en

Más detalles

Práctica 7. TAD aplicación

Práctica 7. TAD aplicación bjetivos. Práctica 7. TAD aplicación Se trata de construir el TAD APLICACIN con una implementación acotada. Se introducen la dispersión (hashing) y las cachés como técnicas de implementación para mejorar

Más detalles

Punteros. Definición Un puntero es un dato que contiene una dirección de memoria.

Punteros. Definición Un puntero es un dato que contiene una dirección de memoria. Punteros Definición Un puntero es un dato que contiene una dirección de memoria. NOTA: Existe una dirección especial que se representa por medio de la constante NULL (definida en ) y se emplea

Más detalles

Estructura de datos Tema 3: El TAD Lista lineal. Universidad de Valladolid. Departamento de informática. Campus de Segovia

Estructura de datos Tema 3: El TAD Lista lineal. Universidad de Valladolid. Departamento de informática. Campus de Segovia Universidad de Valladolid Departamento de informática Campus de Segovia Estructura de datos Tema 3: El TAD Lista lineal Prof. Montserrat Serrano Montero ÍNDICE El TAD lista lineal Implementación con estructuras

Más detalles

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

En cualquier caso, tampoco es demasiado importante el significado de la B, si es que lo tiene, lo interesante realmente es el algoritmo. Arboles-B Características Los árboles-b son árboles de búsqueda. La "B" probablemente se debe a que el algoritmo fue desarrollado por "Rudolf Bayer" y "Eduard M. McCreight", que trabajan para la empresa

Más detalles

Examen Principios de Programación Febrero 2012

Examen Principios de Programación Febrero 2012 Por favor siga las siguientes indicaciones: Escriba con lápiz. Escriba su nombre y número de documento en todas las hojas que entregue. Numere las hojas e indique el total de hojas en la primera de ellas.

Más detalles

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA UNED Centro Asociado de Cádiz RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA 1. OBJETOS Cualquier elemento del programa es un objeto. Un programa es un conjunto de objetos que se comunican entre sí

Más detalles

ARBOLES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES

ARBOLES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES ARBOLES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES Características ARBOLES - CONCEPTOS Cada elemento del árbol se relaciona con cero o más elementos a quienes llama hijos. Si el árbol no

Más detalles

El programa que permite el manejo de la base de datos tiene la siguiente funcionalidad:

El programa que permite el manejo de la base de datos tiene la siguiente funcionalidad: El TAD Diccionario Cuando se usa un conjunto en el diseño de un algoritmo podría no ser necesario contar con operaciones de unión o intersección. A menudo lo que se necesita es simplemente manipular un

Más detalles

Laboratorio 7 Motor de búsqueda web basado en el TAD Árbol Binario de Búsqueda GUIÓN DEL LABORATORIO

Laboratorio 7 Motor de búsqueda web basado en el TAD Árbol Binario de Búsqueda GUIÓN DEL LABORATORIO Laboratorio 7 Motor de búsqueda web basado en el TAD Árbol Binario de Búsqueda GUIÓN DEL LABORATORIO 1.- Objetivos del laboratorio Diseño de clases en C++ Comprensión y uso del TAD Árbol Binario de Búsqueda

Más detalles

TEMA 8: ESTRUCTURAS DE DATOS COMPLEJAS 1 VECTORES ESTÁTICOS 2 2 CADENAS O VECTORES DE CARACTERES 6 3 PASO DE CADENAS Y ARRAYS A FUNCIONES 8

TEMA 8: ESTRUCTURAS DE DATOS COMPLEJAS 1 VECTORES ESTÁTICOS 2 2 CADENAS O VECTORES DE CARACTERES 6 3 PASO DE CADENAS Y ARRAYS A FUNCIONES 8 TEMA 8: ESTRUCTURAS DE DATOS COMPLEJAS 1 VECTORES ESTÁTICOS 2 1.1 VECTORES O ARRAYS UNIDIMENSIONALES 2 1.2 ARRAYS MULTIDIMENSIONALES 3 1.3 INICIALIZACIÓN DE ARRAYS 4 1.3.1 INICIALIZACIÓN DE ARRAYS SIN

Más detalles

El lenguaje de Programación C. Fernando J. Pereda

El lenguaje de Programación C. Fernando J. Pereda <ferdy@gentoo.org> El lenguaje de Programación C Fernando J. Pereda Por qué aprender C? Portable y muy extendido Estándar (C89, C99) El lenguaje de los sistemas Un lenguaje fácil (no, no es broma) Por

Más detalles

Tema 1: Implementación del sistema de archivos

Tema 1: Implementación del sistema de archivos Tema 1: Implementación del sistema de archivos 1. Introducción 2. Implementación 3. Estructura del almacenamiento secundario Dpto. Tema Lenguajes 1: Implementación y Sistemas del Informáticos. sistema

Más detalles

Programación Avanzada para Sistemas de Telecomunicación. Objetos y clases. J.C. Cruellas. Objetos y clases

Programación Avanzada para Sistemas de Telecomunicación. Objetos y clases. J.C. Cruellas. Objetos y clases Programación Avanzada para Sistemas de Telecomunicación Objetos y clases Juan Carlos Cruellas cruellas@ac.upc.es Objetos y clases Concepto de objeto. Concepto de clase. Clases, objetos y programas. Clases

Más detalles

Listas, Pilas, Colas y Punteros. Semana 3

Listas, Pilas, Colas y Punteros. Semana 3 Listas, Pilas, Colas y Punteros Semana 3 Dictado por Marco González Núñez 14 de Febrero de 2011 Estructuras de datos simples Hoy hablaremos de lo que sin duda me motivó a crear este curso que son los punteros,

Más detalles

Compiladores y Lenguajes de Programación. Maria de Guadalupe Cota Ortiz

Compiladores y Lenguajes de Programación. Maria de Guadalupe Cota Ortiz Compiladores y Lenguajes de Programación Maria de Guadalupe Cota Ortiz Organizaciones que rigen las normas para estandarización de Lenguajes de Programación IEEE (Instituto de Ingenieros Eléctricos y Electrónicos)

Más detalles

Contenido. Prólogo... Capítulo 1. Algoritmos y estructuras de datos... 1. Introducción... 24

Contenido. Prólogo... Capítulo 1. Algoritmos y estructuras de datos... 1. Introducción... 24 Contenido Prólogo... vii Capítulo 1. Algoritmos y estructuras de datos... 1 Introducción... 2 1.1. Tipos de datos... 2 1.1.1. Tipos primitivos de datos... 3 1.1.2. Tipos de datos compuestos y agregados...

Más detalles

Estructuras de Datos Abstractas en Lenguaje Java

Estructuras de Datos Abstractas en Lenguaje Java Universidad de Santiago de Chile Facultad de Ingeniería Departamento de Ingeniería Industrial Estructuras de Datos Abstractas en Lenguaje Java Listas Enlazadas, Colas, Pilas y Árboles Binarios Creado por

Más detalles

ESTRUCTURA DE DATOS: ARREGLOS

ESTRUCTURA DE DATOS: ARREGLOS ESTRUCTURA DE DATOS: ARREGLOS 1. Introduccion 2. Arreglos - Concepto - Caracteristicas 3. Arreglos Unidimensionales 4. Arreglos Bidimensionales 5. Ventajas del uso de arreglos 6. Ejemplo 1. Introducción

Más detalles

Capítulo 12: Indexación y asociación

Capítulo 12: Indexación y asociación Capítulo 12: Indexación y asociación Conceptos básicos Índices ordenados Archivos de índice de árbol B+ Archivos de índice de árbol B Asociación estática Asociación dinámica Comparación entre indexación

Más detalles

CI2126 PRÁCTICA 9: TAD COLA. 1) Implemente las operaciones C_Insert y C_Remove del TAD COLA usando a. un arreglo. La estructura sería:

CI2126 PRÁCTICA 9: TAD COLA. 1) Implemente las operaciones C_Insert y C_Remove del TAD COLA usando a. un arreglo. La estructura sería: CI2126 PRÁCTICA 9: TAD COLA. 1) Implemente las operaciones C_Insert y C_Remove del TAD COLA usando a. un arreglo La estructura sería: typedef struct s_cola ELEM elementos[max]; int primero,ultimo; STRUCTCOLA,*COLA;

Más detalles

ESTRUCTURAS DE DATOS ÁRBOLES 143

ESTRUCTURAS DE DATOS ÁRBOLES 143 ESTRUCTURAS DE DATOS ÁRBOLES 143 TEMA 4. ÁRBOLES 4.1. CONCEPTOS GENERALES. Un árbol es una estructura de datos ramificada (no lineal) que puede representarse como un conjunto de nodos enlazados entre sí

Más detalles

Examen escrito de Programación 1

Examen escrito de Programación 1 Examen escrito de Programación 1 Escuela de Ingeniería y Arquitectura Departamento de Informática e Ingeniería de Sistemas 2 de septiembre de 2015 Se debe disponer sobre la mesa en lugar visible un documento

Más detalles

Reconocímíentes y Agradecimientos 5 Indice 6 Prólogo 11

Reconocímíentes y Agradecimientos 5 Indice 6 Prólogo 11 índice Reconocímíentes y Agradecimientos 5 Indice 6 Prólogo 11 Capítulo 1: Introducción a c/e++ Introducción a C/C++ 13 Introducción 14 Primeros Pasos en C/C++ 15 Mi Primer Programa 15 Bibliotecas 17 Archivos

Más detalles

El concepto de función en programación se fundamenta en el concepto de función matemática 1

El concepto de función en programación se fundamenta en el concepto de función matemática 1 FUNCIONES Y PROCEDIMIENTOS OBJETIVOS Aprender a resolver problemas grandes y complejos dividiendo un problema en subproblemas a través del uso de procedimientos y funciones. Distinguir entre parámetros

Más detalles

Tema 9. Vectores y Matrices

Tema 9. Vectores y Matrices Tema 9. Vectores y Matrices OBJETIVO En temas anteriores hemos declarado variables simples de tipo int, float, o de cualquier otro tipo simple. A menudo necesitaremos declarar una colección de variables,

Más detalles

Una variable de clase escalar tiene un nivel de indirección igual a 1. Por ejemplo, las variables i, b y x definidas como se muestra a continuación.

Una variable de clase escalar tiene un nivel de indirección igual a 1. Por ejemplo, las variables i, b y x definidas como se muestra a continuación. Descripción de la semántica de ALFA En esta descripción sólo se mencionarán los aspectos en los que el lenguaje de programación ALFA pueda diferir de otros lenguajes de programación de alto nivel. Se sobreentienden

Más detalles

Tema 1. Introducción a los TAD

Tema 1. Introducción a los TAD Tema 1. Introducción a los TAD Objetivos En este tema nos ocupamos inicialmente del concepto de abstracción, dedicando la mayor atención a la abstracción de datos, estudiando aspectos relacionados con

Más detalles

ARREGLOS DEFINICION GENERAL DE ARREGLO

ARREGLOS DEFINICION GENERAL DE ARREGLO ARREGLOS DEFINICION GENERAL DE ARREGLO Conjunto de cantidades o valores homogéneos, que por su naturaleza se comportan de idéntica forma y deben de ser tratados en forma similar. Se les debe de dar un

Más detalles

ARCHIVOS. 1. Introducción. 2. Definición de archivo. 3. Archivos de acceso secuencial. 4. Gestión de un archivo secuencial de estructuras

ARCHIVOS. 1. Introducción. 2. Definición de archivo. 3. Archivos de acceso secuencial. 4. Gestión de un archivo secuencial de estructuras ARCHIVOS 1. Introducción 2. Definición de archivo 3. Archivos de acceso secuencial 3.1. fopen 3.2. fclose 3.3. fcloseall 3.4. putc 3.5. getc 3.6. fscanf 3.7. fprintf 4. Gestión de un archivo secuencial

Más detalles

TEMA 3: EL LENGUAJE C: PRESENTACIÓN

TEMA 3: EL LENGUAJE C: PRESENTACIÓN TEMA 3: EL LENGUAJE C: PRESENTACIÓN Historia del lenguaje C Características del lenguaje C Estructura de un programa en C El editor de textos: elementos Funciones: de usuario y de librería Librerías de

Más detalles

8. Sentencia return y métodos

8. Sentencia return y métodos 92 A. García-Beltrán y J.M. Arranz 8. Sentencia return y métodos Objetivos: a) Describir el funcionamiento de la sentencia return b) Interpretar el resultado de una sentencia return en el código fuente

Más detalles

Introducción a los Tipos Abstractos de Datos

Introducción a los Tipos Abstractos de Datos Página 1 de 8 Introducción a los Tipos Abstractos de Datos Introducción: Concepto de abstracción Abstracción funcional y abstracción de datos Construcción de tipos abstractos de datos Especificación de

Más detalles

Estructura de datos Tema 6: Tablas de dispersión (hashing)

Estructura de datos Tema 6: Tablas de dispersión (hashing) Universidad de Valladolid Departamento de informática Campus de Segovia Estructura de datos Tema 6: Tablas de dispersión (hashing) Prof. Montserrat Serrano Montero ÍNDICE Conceptos básicos Funciones hash

Más detalles

CONCEPTOS BASICOS DEL LENGUAJE JAVA

CONCEPTOS BASICOS DEL LENGUAJE JAVA CONCEPTOS BASICOS DEL LENGUAJE JAVA NOMENCLATURA GENERAL En Java se distinguen las letras mayúsculas y minúsculas. Las reglas del lenguaje respecto a los nombres de variables son muy amplias y permiten

Más detalles

PROGRAMACIÓ DIDÁCTICA: Secuanciación, Temporalización y Unidades Didácticas

PROGRAMACIÓ DIDÁCTICA: Secuanciación, Temporalización y Unidades Didácticas Departamento de Informática PROGRAMACIÓN DIDÁCTICA Curso 11-12 1 CONSEJERÍA DE EDUCACIÓN I.E.S. NERVIÓN Departamento de Informática CICLO FORMATIVO: TÉCNICO SUPERIOR EN DESARROLLO DE APLICACIONES MULTIPLATAFORMA.

Más detalles

Resolución de Problemas

Resolución de Problemas Resolución de Problemas con algoritmos Colaboratorio de Computación Avanzada (CNCA) 2015 1 / 27 Contenidos 1 Introducción 2 Elementos de algoritmos Elementos Variables Estructuras de Control Condicionales

Más detalles

Contenido. Sistema de archivos. Operaciones sobre archivos. Métodos de acceso a archivos. Directorio. Sistema de archivos por capas.

Contenido. Sistema de archivos. Operaciones sobre archivos. Métodos de acceso a archivos. Directorio. Sistema de archivos por capas. Contenido Sistema de archivos Operaciones sobre archivos Métodos de acceso a archivos Directorio Sistema de archivos por capas Espacio libre Sistema de archivos Proporciona el mecanismo para el almacenamiento

Más detalles

Estructuras de Datos en Java

Estructuras de Datos en Java Estructuras de Datos en Java 1. Antecedentes Introducción a la Orientación a Objetos La programación orientada a objetos (POO) es una nueva manera de enfocar la programación. Desde sus comienzos, la programación

Más detalles

OBJETIVOS. Explicar el manejo de archivos de texto. Explicar el manejo de archivos binarios. Desarrollar programas que usen archivos.

OBJETIVOS. Explicar el manejo de archivos de texto. Explicar el manejo de archivos binarios. Desarrollar programas que usen archivos. / OBJETIVOS Explicar el manejo de archivos de texto. Explicar el manejo de archivos binarios. Desarrollar programas que usen archivos. LABORATORIO 6 MANEJO DE ARCHIVOS DE TEXTO Y BINARIOS Msc. Walter Fernandez

Más detalles

Capítulo 6. Asociaciones y Declaraciones.

Capítulo 6. Asociaciones y Declaraciones. Capítulo 6. Asociaciones y Declaraciones. Lenguajes de Programación Carlos Ureña Almagro Curso 2011-12 Contents 1 Asociaciones, entornos y ámbitos 2 2 Declaraciones y definiciones 6 3 Definiciones de valores,

Más detalles

1. Ejemplo de clase : La clase Cuenta 2. Uso de la clase Cuenta. 3. Métodos y objetos receptores de mensajes (Importante)

1. Ejemplo de clase : La clase Cuenta 2. Uso de la clase Cuenta. 3. Métodos y objetos receptores de mensajes (Importante) 1. : La clase Cuenta. Uso de la clase Cuenta 3. Métodos y objetos receptores de mensajes (Importante) 1 Una clase para cuentas de un banco Vamos a modelar con una clase, un nuevo tipo de datos, donde los

Más detalles

1. Manejo de memoria estática 2. Manejo de memoria dinámica

1. Manejo de memoria estática 2. Manejo de memoria dinámica 1. Manejo de memoria estática 2. Manejo de memoria dinámica *La administración de memoria de una computadora es una tarea fundamental debido a que la cantidad de memoria es limitada. *El sistema operativo

Más detalles

CURSO DE PROGRAMACIÓN PHP MySQL

CURSO DE PROGRAMACIÓN PHP MySQL CURSO DE PROGRAMACIÓN PHP MySQL MASTER EN PHP MÓDULO NIVEL BASICO PRIMER MES Aprende a crear Sitios Web Dinámicos con PHP y MySQL 1. Introducción Qué es PHP? Historia Por qué PHP? Temas de instalación

Más detalles

TEMA 5. CONTROL DE FLUJO DEL PROGRAMA. Sentencia Instrucción Expresión Operadores + Operandos Sintaxis: Sentencia ;

TEMA 5. CONTROL DE FLUJO DEL PROGRAMA. Sentencia Instrucción Expresión Operadores + Operandos Sintaxis: Sentencia ; TEMA 5. CONTROL DE FLUJO DEL PROGRAMA 5.1 Sentencias Una sentencia es una expresión seguida de un punto y coma. Sentencia Instrucción Expresión Operadores + Operandos Sintaxis: Sentencia ; El ; es obligatorio

Más detalles

MANUAL DE REFERENCIA DE C++

MANUAL DE REFERENCIA DE C++ MANUAL DE REFERENCIA DE C++ UNIVERSIDAD NACIONAL DE COLOMBIA FACULTAD DE INGENIERÍA DEPARTAMENTO DE INGENIERÍA DE SISTEMAS E INDUSTRIAL BOGOTÁ D.C. 2009 Objetivo: Brindar a los estudiantes del curso de

Más detalles

TEMA 7. EL TDA PILA. 7.1. Definición

TEMA 7. EL TDA PILA. 7.1. Definición TEM 7. EL TD PIL 7.1. Definición 7.2. Operaciones del TD PIL 7.3. Implementaciones más usuales: vectores y listas enlazadas 7.4. Utilidades de las Pilas ibliografía Weiss Cairó y Guardati ho, Hopcroft

Más detalles

ARBOLES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES

ARBOLES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES ARBOLES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES Introducción al tema a. Formar grupos de 4 personas b. Tomar una hoja en blanco y una lapicera o lápiz c. En la hoja en blanco diseña un

Más detalles

Mi primer proyecto en Dev-C++

Mi primer proyecto en Dev-C++ Mi primer proyecto en Dev-C++ Para realizar esta actividad deberás disponer de un ordenador en el que esté instalado el Dev-C++. Debes ir realizando cada uno de los pasos indicados, en el mismo orden en

Más detalles

14. ÁRBOLES. 14.1 Fundamentos y terminología básica

14. ÁRBOLES. 14.1 Fundamentos y terminología básica Ricardo Ferrís / Jesús Albert Algoritmos y estructuras de datos I 14. ÁRBOLES 14.1 FUNDAMENTOS Y TERMINOLOGÍA BÁSICA... 79 14.2. ÁRBOLES BINARIOS... 81 14.3. FUNDAMENTOS... 82 14.3. OPERACIONES CON ÁRBOLES

Más detalles

Instituto de Computación - Facultad de Ingeniería - Universidad de la República

Instituto de Computación - Facultad de Ingeniería - Universidad de la República Parcial de Programación 2 Julio de 2011 Generalidades: La prueba es individual y sin material. Duración: 3hs. Sólo se contestan dudas acerca de la letra de los ejercicios. Escriba las hojas de un sólo

Más detalles

Preliminares. Tipos de variables y Expresiones

Preliminares. Tipos de variables y Expresiones Preliminares. Tipos de variables y Expresiones Felipe Osorio Instituto de Estadística Pontificia Universidad Católica de Valparaíso Marzo 5, 2015 1 / 20 Preliminares Computadoras desarrollan tareas a un

Más detalles

Java Inicial (20 horas)

Java Inicial (20 horas) Java Inicial (20 horas) 1 Temario 1. Programación Orientada a Objetos 2. Introducción y Sintaxis Java 3. Sentencias Control Flujo 4. POO en Java 5. Relaciones entre Objetos 6. Polimorfismo, abstracción

Más detalles

Ejemplos de conversión de reales a enteros

Ejemplos de conversión de reales a enteros Ejemplos de conversión de reales a enteros Con el siguiente programa se pueden apreciar las diferencias entre las cuatro funciones para convertir de reales a enteros: program convertir_real_a_entero print

Más detalles

Metodología de la Programación II. Recursividad

Metodología de la Programación II. Recursividad Metodología de la Programación II Recursividad Objetivos Entender el concepto de recursividad. Conocer los fundamentos del diseño de algoritmos recursivos. Comprender la ejecución de algoritmos recursivos.

Más detalles

Estructura de datos (arreglos) Vectores y Matrices

Estructura de datos (arreglos) Vectores y Matrices Apunte del curso PROGRAMACIÓN (FI-UBA,, J. T. P. Ing. Z. CATALDI; A.T.P. Srta. A Pauluzzi, Sr. C Corradino, Sr. F Gómez Estructura de datos (arreglos) Hasta aquí se han visto distintos tipos de estructuras

Más detalles

COLAS. GRUPO # 22 Alumnos: Aguilar Elba Barrios Miguel Camacho Yaquelin Ponce Rodríguez Jhonny

COLAS. GRUPO # 22 Alumnos: Aguilar Elba Barrios Miguel Camacho Yaquelin Ponce Rodríguez Jhonny COLAS 2002 GRUPO # 22 Alumnos: Aguilar Elba Barrios Miguel Camacho Yaquelin Ponce Rodríguez Jhonny ESTRUCTURA DE DATOS TEMA 4 Estructura de datos Cola ÍNDICE 4.1. Definición y ejemplos...3 4.2. El TAD

Más detalles

Unidad III El lenguaje de programación C 1. 2. 3. 4. 5. 6. 7. 8.

Unidad III El lenguaje de programación C 1. 2. 3. 4. 5. 6. 7. 8. Unidad III 1. Introducción. 2. Breve historia del C. 3. Lenguajes de programación de alto nivel, bajo nivel y nivel medio. 4. Compiladores e intérpretes. 5. Compilación, enlace y generación de un programa

Más detalles

Práctica 6: Utilización de Registros y Vectores

Práctica 6: Utilización de Registros y Vectores Práctica 6: Utilización de Registros y Vectores Objetivos de la práctica El objetivo de esta práctica es ejercitarse en el empleo de estructuras de datos de tipo registro y vector para modelar datos, así

Más detalles

Almacenamiento y Recuperación de la Información

Almacenamiento y Recuperación de la Información Almacenamiento y Recuperación de la Información Estructuras basicas de archivos Archivos Secuenciales 2do Semestre 2005 Wenceslao Palma M. www.inf.utfsm.cl/~wpalma/ari Una estructura

Más detalles

FUNDAMENTOS DE PROGRAMACIÓN

FUNDAMENTOS DE PROGRAMACIÓN FUNDAMENTOS DE PROGRAMACIÓN Sabino Miranda Jiménez Universidad Autónoma del Estado de México (UAEM) Apuntadores (1) Un apuntador es una variable que contiene la dirección de una ora variable Generan código

Más detalles

INDICE Parte I. Conceptos 1. El estudio de los lenguajes de programación 2. Cuestiones de diseño de lenguajes

INDICE Parte I. Conceptos 1. El estudio de los lenguajes de programación 2. Cuestiones de diseño de lenguajes INDICE Parte I. Conceptos 1 1. El estudio de los lenguajes de programación 1.1. Por qué estudiar lenguajes de programación? 2 1.2. Breve historia de los lenguajes de programación 1.2.1. Desarrollo de los

Más detalles

INSTITUTO TECNOLÓGICO DE NUEVO LAREDO ING. EN SISTEMAS COMPUTACIONALES

INSTITUTO TECNOLÓGICO DE NUEVO LAREDO ING. EN SISTEMAS COMPUTACIONALES OBJETIVO: El estudiante desarrollará aplicaciones mediante la implementación de estructuras de datos basadas en Pilas. MATERIAL Y EQUIPO NECESARIO: Papel y lápiz Se recomienda la comprobación de los ejercicios

Más detalles

Convivencia. Gestión del Sistema de Archivos

Convivencia. Gestión del Sistema de Archivos Convivencia Gestión del Sistema de Archivos Dra. Carolina Carolina Mañoso Mañoso Dpto. Dpto. Imformática Informática y y Automática.UNED Introducción Se necesitan tres condiciones para el almacenamiento

Más detalles

DIAGRAMA DE FLUJO DE DATOS

DIAGRAMA DE FLUJO DE DATOS DIAGRAMA DE FLUJO DE DATOS AUTOR: CORDOVA NERI, TEODORO Lima Perú Córdova Neri, Teodoro 2 Diagrama de Flujo de Datos INTRODUCCIÓN La presente guía denominada DIAGRAMA DE FLUJO DE DATOS, ilustra una de

Más detalles

Tema 4.- Pilas y Colas

Tema 4.- Pilas y Colas Apuntes elaborados por: Eduardo Quevedo, Raquel López y Aaron Asencio Revisado por: Javier Miranda el???? Tema 4.- Pilas y Colas Las pilas y colas son estructuras de datos que se utilizan generalmente

Más detalles

Contenidos. Funciones (suplemento) Funciones. Justificación del uso de Funciones

Contenidos. Funciones (suplemento) Funciones. Justificación del uso de Funciones Contenidos 1. Justificación del uso de funciones. 2. Declaración de funciones: prototipos. 3. Prototipos y ficheros de cabecera. 4. Polimorfismo (sobrecarga de funciones). 5. Argumentos formales y actuales.

Más detalles

Estructura de Datos: Archivos. Programacion I Mgter. Vallejos, Oscar A.

Estructura de Datos: Archivos. Programacion I Mgter. Vallejos, Oscar A. Archivo: Concepto Para poder acceder a determinada información en cualquier momento, se necesitará que ella esté depositada en soportes físicos los cuales la almacenan en forma permanente. Este es el caso

Más detalles

Programación Estructurada

Programación Estructurada Programación Estructurada PROGRAMACIÓN ESTRUCTURADA 1 Sesión No. 11 Nombre: Manejo de archivos Contextualización En los lenguajes de programación estructurada como C, que carecían de una conexión a base

Más detalles

Solución al Examen de Prácticas de Programación (Ingeniería Informática)

Solución al Examen de Prácticas de Programación (Ingeniería Informática) Solución al Examen de Prácticas de Programación (Ingeniería Informática) Junio 2006 Parte I. Cuestiones (3 puntos=50% nota del examen) 1) Se desea crear un conjunto de clases para representar en un programa

Más detalles

árbol como un conjunto de nodos y líneas

árbol como un conjunto de nodos y líneas ÁRBOLES CAPÍTULO 6 ÁRBOLES Desde el punto de vista conceptual, un árbol es un objeto que comienza con una raíz (root) y se extiende en varias ramificaciones o líneas (edges), cada una de las cuales puede

Más detalles

CURSO DE PROGRAMACIÓN WEB EJERCICIOS PHP

CURSO DE PROGRAMACIÓN WEB EJERCICIOS PHP CURSO DE PROGRAMACIÓN WEB EJERCICIOS PHP Tabla de contenido Ejercicio 1... 3 Ejercicio 2... 4 Ejercicio 3... 4 Ejercicio 4... 5 Ejercicio 5... 5 Ejercicio 6... 6 Ejercicio 7... 7 Ejercicio 8... 8 Ejercicio

Más detalles

Introducción al tipo de dato ARRAY

Introducción al tipo de dato ARRAY CONTENIDOS. Introducción al tipo de dato ARRAY. Definición, Características, Declaración, Acceso e Inicialización.. Arrays multidimensionales Definición, Declaración, Acceso e Inicialización. Introducción

Más detalles

7. Manejo de Archivos en C.

7. Manejo de Archivos en C. 7. Manejo de Archivos en C. Los datos que hemos tratado hasta el momento han residido en la memoria principal. Sin embargo, las grandes cantidades de datos se almacenan normalmente en un dispositivo de

Más detalles

Actividades de Divulgación del Centro Atómico Bariloche. Qué hay detrás de un programa de computadora? Daniela Arnica Pablo E. Argañaras.

Actividades de Divulgación del Centro Atómico Bariloche. Qué hay detrás de un programa de computadora? Daniela Arnica Pablo E. Argañaras. Actividades de Divulgación del Centro Atómico Bariloche Qué hay detrás de un programa de computadora? Expositores: Daniela Arnica Pablo E. Argañaras División Mecánica Computacional Gerencia de Investigación

Más detalles

Unidad 2: Gestión de Memoria

Unidad 2: Gestión de Memoria Unidad 2: Gestión de Memoria Tema 3, Gestión de Memoria: 3.1 Definiciones y técnicas básicas. 3.2 Gestión de memoria contigua: Partición, fragmentación, algoritmos de ubicación... 3.3 Paginación: Estructura

Más detalles

Tema: FUNCIONES, PROCEDIMIENTOS Y RECURSIVIDAD.

Tema: FUNCIONES, PROCEDIMIENTOS Y RECURSIVIDAD. Programación I, Guía 6 1 Facultad : Ingeniería Escuela : Computación Asignatura: Programación I Tema: FUNCIONES, PROCEDIMIENTOS Y RECURSIVIDAD. Objetivos Utilizar la sintaxis de las funciones definidas

Más detalles

Mensajes. Interbloqueo

Mensajes. Interbloqueo CONCURRENCIA DE PROCESOS Preparado por: Angel Chata Tintaya (angelchata@hotmail.com) Resumen Los procesos comparten variables globales, comparten y compiten por recursos, se ejecutan simultáneamente intercalándose

Más detalles

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO. Introducción FACULTAD DE INGENIERÍA. Ordenación

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO. Introducción FACULTAD DE INGENIERÍA. Ordenación Introducción Uno de los procedimientos más comunes y útiles en el procesamiento de datos, es la clasificación u ordenación de los mismos. Se considera ordenar al proceso de reorganizar un conjunto dado

Más detalles

Tipos Abstractos de Datos

Tipos Abstractos de Datos Objetivos Repasar los conceptos de abstracción de datos y (TAD) Diferenciar adecuadamente los conceptos de especificación e implementación de TAD Presentar la especificación algebraica como método formal

Más detalles

Primer Parcial de Programación 3 (1/10/2009)

Primer Parcial de Programación 3 (1/10/2009) Primer Parcial de Programación (/0/009) Instituto de Computación, Facultad de Ingeniería Este parcial dura horas y contiene carillas. El total de puntos es 0. En los enunciados llamamos C* a la extensión

Más detalles

1 Estructura básica de un programa C++

1 Estructura básica de un programa C++ Elementos básicos de un lenguaje de alto nivel: C++ CONTENIDOS 1. Estructura básica de un programa C++. 2. Tipos de datos simples. 3. Constantes y variables en C++. Declaración. 4. Operadores y expresiones.

Más detalles

construcción de programas Prof. Eliana Guzmán U.

construcción de programas Prof. Eliana Guzmán U. Unidad II. Metodología para la construcción de programas Prof. Eliana Guzmán U. Semestre: A-2015 Introducción Resolver un problema con una computadora conduce a la escritura de un programa y a su ejecución.

Más detalles

Tema 7 Vectores y cadenas de caracteres. Fundamentos de Informática

Tema 7 Vectores y cadenas de caracteres. Fundamentos de Informática Tema 7 Fundamentos de Informática Índice 1. Qué es un vector? 2. Vectores unidimensionales 3. Cadenas de caracteres 4. Paso de vectores unidimensionales a funciones. 5. Vectores multidimensionales: matrices

Más detalles

Estructuras de Datos. Curso 2006/2007 Ingeniería Informática Enunciado de la Práctica 1

Estructuras de Datos. Curso 2006/2007 Ingeniería Informática Enunciado de la Práctica 1 Estructuras de Datos. Curso 2006/2007 Ingeniería Informática Enunciado de la Práctica 1 1. Introducción Una imagen digital de niveles de gris puede verse como una matriz bidimensional de puntos (píxeles,

Más detalles