Lenguaje de Programación II Prof. Rafael Montenegro B. Carrera: T.S.U en Informática Periodo: 2014-I.

Slides:



Advertisements
Presentaciones similares
TDA LISTA ESTRUCTURAS DE DATOS.
Advertisements

Unidad 5 Listas Enlazadas Bibliografía: Algoritmos y Estructuras de datos de Aguilar y Martinez. Unidad 9 Autor: Ing Rolando Simon Titiosky.
Listas enlazadas c++ Prof. Franklin Cedeño.
Estructuras de datos y algoritmos
Clase 3: Punteros y Referencias
Programación I Teoría III
Direcciones, Arreglos y Argumentos de Funciones
Tipos de Datos Básicos y Estructurados
Tema 1. Introducción a la programación (Lenguaje java).
PROGRAMACION DE Pilas o Stacks y Colas
PROGRAMACION DE ESTRUCTURAS DE DATOS
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Teoría de lenguajes y compiladores
Implementación de Listas
M.I.A Daniel Alejandro García López.  Un TDA es un tipo de dato definido por el programador que se puede manipular de un modo similar a los tipos de.
Unidad 3 Punteros.
Colas y Listas Enlazadas
Herramientas para el acceso directo a memoria en C++
¿Qué es un PUNTERO?: Un puntero es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. No.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Estructuras dinámicas de datos, TAD Lista, parte 2
COLAS, IMPLEMENTACIÓN A PARTIR DE LISTAS Y PARA PILAS
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 6: Clases Antonio J. Sierra.
Diseño de algoritmos “Punteros”
C++ LISTAS C++ 11/04/2017 Ing. Edgar Ruiz Lizama.
Introducción a los punteros
Capítulo 5. Punteros y Cadenas de Caracteres
TIPOS Y ESTRUCTURAS BÁSICAS DE DATOS
ESTRUCTURAS DE DATOS I Conocer, comprender y analizar algunos de los principales tipos de estructuras de datos.
Archivos.
Estructuras.
Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación I.
Clase 10: Estructuras de datos y arreglos.
Listas enlazadas.
Unidad VI Registros (estructuras, uniones y enumeraciones)
Programación I Técnico Universitario en Web Dpto. de Informática FCFMyN - UNSL -11-
El lenguaje de programación C - Identificadores y variables – Isidro González Caballero ( Introducción.
PUNTEROS Ing Anghello Quintero.
1 Estructuras de Datos Elementales:stacks (pilas), queues (colas), linked lists (listas enlazadas), y rooted trees (árboles con raíz) Agustín J. González.
Informática Ingeniería en Electrónica y Automática Industrial
Aplicación de estructuras de datos
Árboles Binarios Estructuras de Datos.
Informática Ingeniería en Electrónica y Automática Industrial
Universitarios: Ricardo Gonzales Jimenez Wilfredo Coca Reinaldo Yohan Docente: Lic. Israel Torrez Valverde Tema: Listas doblemente Enlazadas.
Programación en C para electrónicos
Listas Ligadas Simples. Definíción I  Es, en sencillas palabras. un grupo de datos organizados secuencialmente, pero a diferencia de los arreglos, la.
Recursividad (2 clases) 1. Nivelación Funciones Menú Vectores String
PUNTEROS Y REFERENCIAS
Diseño de Algoritmos. Curso J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:
APUNTADORES.
Unidad 4: LISTAS.
Punteros Recomendado: 1. Nivelación Funciones
CARACTERÍSTICAS Es un lenguaje de programación estructurado de propósito general. Está estrechamente asociado al sistema operativo UNIX, ya que el propio.
INSTITUTO TECNOLOGICO DE APIZACO
Capitulo 4 Arreglos o Arrays Unidimensionales Bidimensionales Strings
Computación I. CI-2125 Tema VII
M.C. Meliza Contreras González
MEMORIA DINÁMICA.
PUNTEROS. Los punteros son de amplia utilización en programación y muchos lenguajes permiten la manipulación directa o indirecta de los mismos. Su razón.
ESTRUCTURAS DE DATOS “Conceptualización de estructuras de datos” Por: Eduardo Robayo.
Listas Dinámicas.
Tema 1. Estructuras de datos Objetivo: Objetivo: El alumno resolverá problemas de almacenamiento, recuperación y ordenamiento de datos y las técnicas de.
UNIDAD 8 Lista Enlazada: Eliminar Deseamos eliminar un elemento llamado elem de la lista enlazada. Es posible que la variable ini sea modificada. main(){
1 ListaUna Lista se define como una serie de N elementos E 1, E 2,..., E N, ordenados de manera consecutiva, es decir, el elemento E k (que se denomina.
PROF. RAFAEL MONTENEGRO B. UNELLEZ-APURE Introducci Ó n a los Arreglos (“arrays”) en C++
Introducción al Lenguaje C (I) Tipos básicos, arrays y punteros Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión
UNIVERSIDAD TECNOLÓGICA DE PANAMÁ Facultad de Ingeniería de Sistemas Computacionales Programa de Lic. en Informática Educativa Computación.
3.6 Manejo de E/S Estructuras En la creación de soluciones para algunos problemas surge la necesidad de agrupar datos de diferente tipo o de manejar datos.
Transcripción de la presentación:

Lenguaje de Programación II Prof. Rafael Montenegro B. Carrera: T.S.U en Informática Periodo: 2014-I

Plan de Evaluación Contenido Programático: Módulo I ESTRUCTURAS DINÁMICAS DE DATOS Manejo de Punteros. Asignación dinámica de memoria. Polimorfismo. Listas: Implementación y manipulación con punteros. Listas doblemente enlazadas.

Plan de Evaluación Contenido Programático: Modulo II ESTRUCTURAS DINÁMICAS DATOS Pilas: Implementación y manipulación con punteros. Colas: Implementación y manipulación con punteros. Grafos: Implementación y manipulación con punteros.

Plan de Evaluación Contenido Programático: Módulo III INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETO Conceptos de programación orientada a objetos. Los Objetos. Definición. Características. La estructura de los objetos en C++ La Herencia. Descripción. Aplicación. Los métodos. Descripción. Aplicación. Constructores y destructores. Resolución de problemas con programación orientada a objetos

Plan de Evaluación Contenido Programático: Módulo IV MANEJO DE ARCHIVOS EN C++ Definición de Archivos. Creación de Archivos en C++ Operaciones Básicas de Archivos en C++

Manejo de Punteros 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 cuando queremos indicar que un puntero no apunta a ninguna dirección. Declaración * Tipo de dato del objeto referenciado por el puntero Identificador de la variable de tipo puntero.

Manejo de Punteros Cuando se declara un puntero se reserva memoria para albergar una dirección de memoria, pero NO PARA ALMACENAR EL DATO AL QUE APUNTA EL PUNTERO. El espacio de memoria reservado para almacenar un puntero es el mismo independientemente del tipo de dato al que apunte: el espacio que ocupa una dirección de memoria. char c = ’a’; char *ptrc; int *ptri;

Manejo de Punteros Operaciones básicas con punteros Dirección Operador & & devuelve la dirección de memoria donde comienza la variable. El operador & se utiliza para asignar valores a datos de tipo puntero: int i; int *ptr;... ptr = &i;

Manejo de Punteros Indirección Operador * * devuelve el contenido del objeto referenciado por el puntero. El operador * se usa para acceder a los objetos a los que apunta un puntero: char c; char *ptr; … ptr = &c; *ptr = ‘A’; // Equivale a escribir: c = ‘A’

Manejo de Punteros Asignación Operador = A un puntero se le puede asignar una dirección de memoria concreta, la dirección de una variable o el contenido de otro puntero. Una dirección de memoria concreta: int *ptr;... ptr = 0x1F3CE00A;... ptr = NULL; La dirección de una variable del tipo al que apunta el puntero: char c; char *ptr;... ptr = &c;

Manejo de Punteros Otro puntero del mismo tipo: char c; char *ptr1; char *ptr2; … ptr1 = &c; ptr2 = ptr1; Como todas las variables, los punteros también contienen “basura” cuando se declaran, por lo que es una buena costumbre inicializarlos con NULL.

Manejo de Punteros Errores comunes Asignar punteros de distinto tipo int a = 10; int *ptri = NULL; double x = 5.0; double *ptrf = NULL;... ptri = &a; ptrf = &x; ptrf = ptri; // ERROR Utilizar punteros no inicializados char *ptr; *ptr = ‘a’; // ERROR

Manejo de Punteros Asignar valores a un puntero y no a la variable a la que apunta int n; int *ptr = &n; ptr = 9; // ERROR Intentar asignarle un valor al dato apuntado por un puntero cuando éste es NULL int *ptr = NULL; *ptr = 9; // ERROR

Manejo de Punteros Punteros a punteros Un puntero a puntero es… un puntero que contiene la dirección de memoria de otro puntero Int main () { int a = 5; int *p; // Puntero a entero int **q; // Puntero a puntero p = &a; q = &p; }

Listas Listas

Una lista se puede definir como una serie de cero o más elementos, donde cada elemento pertenece a un tipo dado. elem 1, elem 2, elem 3 … elem n - Donde: - n: Indica la longitud de la lista - Elem 1 :Primer elemento de la lista - elem n : Último elemento de la lista Una lista se dice que está vacía cuando el número de elementos, n, es cero. Las listas son estructuras de datos flexibles que se puede expandir o contraer Estructura de Datos Lista Listas

Una lista puede ser vista como un TDA al definir un conjunto de operaciones sobre ésta:  nuevo(lista)  insertar(lista, elem)  borrar(lista, pos)  encontrar(lista, elem)  obtener(lista, pos)  esvacio(lista) Lista como un TDA Listas

 Usando un arreglo se implementan las operaciones: Crear una nueva lista Insertar un elemento en una lista Eliminar un elemento de una lista Buscar un elemento en una lista Encontrar el sucesor y predecesor de un elemento en una lista Determinar si una lista está vacía Operaciones sobre una Lista Listas

#define LISTMAX 100 /* Limite máximo */ Typedef int tipo_Elem /* Definición del Type para una lista */ typedef struct { int count; /* Nro de elementos en list */ char list[LISTMAX]; } List_Array; Implementar una Lista como un Arreglo Listas

/* Crear una lista. */ void newList(List_Array *list_ptr){ int k; list_ptr->count = 0;/* No hay elementos*/ for(k = 0; k < LISTMAX; k++) /* Inicializar con un carácter null */ strcpy(list_ptr->list[k],"\0"); } Crear una Nueva Lista Listas

/* Para insertar un elemento en la lista */ int insertElement(List_Array *list_ptr,char *element) { if(list_ptr->count == LISTMAX) return (-1); /*Tamaño máximo alcanzado*/ else { strcpy(list_ptr->list[list_ptr->count],element); list_ptr->count++; /*Un elemento más*/ return(1); /* Retorna éxito */ } Insertar un Elemento en una Lista Listas

/* Eliminar un elemento en la lista dada su posición en la lista*/ int deleteElement(List_Array *list_ptr, \ int pos) { int k; /* Revisar si pos existe y errores */ if (pos list_ptr->count-1) return(-1); /* error */ Eliminar un Elemento en una Lista Listas

else { /* Mueve todos los elementos hacia arriba */ for (k = pos; k count - 1;k++) strcpy(list_ptr->list[k],list_ptr-list[k+1]); list_ptr->count--; return(1); /* Eliminación con éxito */ } Eliminar un Elemento en una Lista...1 Listas

/* Encontrar un elemento en la lista */ int find(List_Array *list_ptr, char *element){ int k = 0; while (k count - 1) /* Revisar por el nombre en k */ if (strcmp(list_ptr->list[k], element)) return(k+1); else k++; return(-1); /* Elemento no encontrado */ } Buscar un Elemento en una Lista Listas

/* Encuentra el elemento sucesor dada una posición en la lista */ char * succ(List_Array *list_ptr, int pos){ /* Revisar errores */ if (pos list_ptr->count-1) { printf("\nSuccessor - Input error: No\ tal posición en la lista\n"); /* Error */ return(NULL); } Sucesor de un Elemento en una Lista Listas

else if (pos == list_ptr->count-1) { printf("No existe sucesor para el \ último elemento en la lista!\n"); return(NULL); } else return(list_ptr->list[pos + 1]); } Sucesor de un Elemento en una Lista..1 Listas

/* Encuentra el elemento predecesor dada una posición en la lista */ char * pred(List_Array *list_ptr, int pos){ /* Revisar errores */ if (pos list_ptr->count-1){ printf("\nPredecessor - Input error: No\ existe esa posición en la lista\n");//Error return(NULL); } Predecesor de un Elemento en una Lista Listas

else if (pos == 0) { printf("No existe predecesor para el \ primer elemento en la lista!\n"); return(NULL); } else return(list_ptr->list[pos - 1]); } Predecesor de un Elemento en una Lista...1 Listas

/* Determinar si la lista está vacía o no */ int isEmpty(List_Array *list_ptr) { if (list_ptr->count == 0) return(1); /* lista está vacía */ else return(0); /* lista no está vacía */ } Determinar si la Lista Está Vacia Listas

Representación y operaciones aritméticas en enteros súper largos Representación y operaciones sobre polinomios Diversidad de listas, por ejemplo, listas de votantes, lista de elementos de compra, etc. Planificación de tareas Simulación de colas usando listas Bioinformática Aplicaciones de procesamiento de texto Implementaciones de conjuntos Aplicaciones en sistemas operativos para administrar listas de procesos y administrar la paginación de memoria Aplicaciones Usando Lista Listas

Lista Enlazada

Una lista enlazada es una colección lineal de elementos de datos llamados nodos. Cada nodo consiste de dos partes:  Campo de Información  Enlace: Contiene un puntero al siguiente nodo. Introducción a Listas Enlazadas Listas

La implementación de la lista enlazada permite expandir y contraer la lista en tiempo de ejecución. Una lista enlazada en la cual cada nodo tiene un indicador al siguiente en la lista se denomina lista enlazada simple Introducción a Listas Enlazadas...1 Listas

Insertar un Nodo Después de un Nodo Dado Listas

Insertar un Nodo Después de un Nodo Dado...1 Listas

Una lista doblemente enlazada es una colección lineal de nodos, donde el nodo consiste de:  Un campo de información  Un puntero next: Apunta al siguiente nodo en la lista  Un puntero prev : Apunta al nodo anterior en la lista Lista Doblemente Enlazada Listas

Lista Doblemente Enlazada Listas

 En una Lista Circular: El último nodo está conectado a la cabeza de la lista. No hay cabeza ni último nodo. El movimiento en una lista puede ser desde cualquier nodo a cualquier otro nodo. Un puntero externo al último nodo en la lista permite tener un puntero a la cabeza de la lista también, ya que el puntero al siguiente ( next ) del último nodo apunta al primer nodo de la lista. Lista Enlazada Circular Listas

Lista Enlazada Circular Listas

Número de elementos en una lista (tamaño) Acceso arbitrario a cualquier elemento en la lista Frecuencia de búsqueda Frecuencia de operaciones de insertar y eliminar Frecuencia de ordenamiento Orden de acceso a elementos Tipo de elemento en una lista Combinación de dos listas Implementación de una lista FIFO Implementación de una lista LIFO (pila) Técnica eficiente de ordenamiento Memoria Lista de Consideraciones Listas