La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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

Presentaciones similares


Presentación del tema: "Lenguaje de Programación II Prof. Rafael Montenegro B. Carrera: T.S.U en Informática Periodo: 2014-I."— Transcripción de la presentación:

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

2 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.

3 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.

4 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

5 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++

6 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.

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

8 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;

9 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’

10 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;

11 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.

12 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

13 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

14 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; }

15 Listas Listas

16 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

17 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

18  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

19 #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

20 /* 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

21 /* 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

22 /* 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

23 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

24 /* 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

25 /* 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

26 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

27 /* 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

28 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

29 /* 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

30 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

31 Lista Enlazada

32 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

33 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

34 Insertar un Nodo Después de un Nodo Dado Listas

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

36 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

37 Lista Doblemente Enlazada Listas

38  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

39 Lista Enlazada Circular Listas

40 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


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

Presentaciones similares


Anuncios Google