Universidad Autónoma del Estado de México 2016, Año del 60 Aniversario de la Universidad Autónoma del Estado de México

Documentos relacionados
UNIVERSIDAD AUTONOMA DE MADRID ESCUELA POLITÉCNICA SUPERIOR ESTRUCTURAS DE DATOS Y ALGORITMOS

Estructuras de Datos

ESTRUCTURAS DINÁMICAS DE DATOS (PILAS) EN C

ESTRUCTURAS DINÁMICAS DE DATOS (PILAS)

Estructura de datos Colas

IMPLEMENTACIÓN DE PILAS CON LISTAS EN C++

Realizar el ejercicio anterior utilizando Punteros

Estructura de Datos L I S T A

LISTAS ENLAZADAS FUNDAMENTOS TEORICOS

UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros.

Este material es de uso exclusivo para estudio, los textos fueron tomados textualmente de varios libros por lo que está prohibida su impresión y

Notas de estructura de datos con lenguaje C. Estructuras de datos dinámicas

Tema: Tipos Abstractos de Datos (TAD s) en C++.

Estructuras Dinámicas de datos.

UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros.

UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros.

Algoritmo, Estructuras y Programación II Ing. Marglorie Colina

Tipos de Datos Recursivos

APUNTADORES. Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable.

Tipos Recursivos de Datos

Repaso 02: Apuntadores y manejo de memoria dinámica

Capítulo. Listas, pilas y colas en C. Contenido. Introducción

Capitulo V Listas Enlazadas

Estructuras Dinámicas

Tema 4. Estructuras Dinámicas

Implementación de las Clases Pila, Cola, Lista y Arbol

Implementación de las Clases Pila, Cola, Lista y Arbol

Listas. Programación en C LISTAS. Prof. Álvaro Sánchez Miralles. Programación en C. Listas. Objetivos

Son aquellas que se implementan usando vectores por lo que tienen un número de elementos limitado.

Sistemas Operativos Problemas frecuentes con el lenguaje C

Segundo Parcial de Programación 2 7 de junio de 2017

Objetivos. El alumno conocerá y aplicará el concepto de apuntador para la realización de programas de manejo eficiente de memoria.

Introducción general al Lenguaje C (2010/2011)

Estructuras de Datos Dinámicas

ESTRUCTURAS DINÁMICAS DE DATOS (LISTAS)

1 Introducción a los algoritmos y a la programación de computadoras... 1

Estructura de datos y algoritmos. Tema IV: TIPOS DE DATOS ABSTRACTOS DINÁMICOS LINEALES

ESTRUCTURAS DINÁMICAS DE DATOS (COLAS) EN C

Elementos de un programa en C

UNIVERSIDAD BANCARIA DE MEXICO CONSTANCIA UNIDAD Y TRABAJO Guadalupe Godínez Maldonado Prof. Juan Carlos Martínez

Tema 18: Memoria dinámica y su uso en C

ESTRUCTURA DE DATOS. Memoria estática Memoria dinámica Tipo puntero Declaración de punteros Gestión de memoria dinámica Resumen ejemplo

Tema 04: TAD Lista. M. en C. Edgardo Adrián Franco Martínez edgardoadrianfrancom

INGENIERIA DE SISTEMAS 1 ESTRUCTURAS DE DATOS (Listas simples) INTRODUCCIÓN A LAS ESTRUCTURAS DE DATOS

CLASE 10 - ESTRUCTURAS DE DATOS DINÁMICAS

Estructura de Datos. Centro Universitario UAEM Valle de México. Unidad II. Estructuras de Datos Lineales - Listas

3 - Tipos Inductivos (Recursivos)

TIPOS DE DATOS ABSTRACTOS

Tema 2: Lenguajes de Programación de Sistemas: C

Contenido. Estructura de Datos Tema 1: Pilas. 1. Definición y operaciones. 2. Implementación estática. 3. Implementación dinámica. 4.

Apuntadores en C y C++

Tema 8. Listas. José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz

Biblioteca de templates. template <typename T> void eliminar(t arr[], int& len, int pos);

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

Algoritmos y estructuras de datos

Tema 6. Gestión dinámica de memoria

Programación I Teoría III.

Tema: Estructura Pila.

Ingeniera de Sistemas: Luz Esperanza Espitia Tutora de Estructura de datos.

Estructuras dinámicas lineales (i)

Contenido PARTE II: ESTRUCTURAS DE DATOS AVANZADAS

INFORMATICA II PRIMER PARCIAL

ESTRUCTURAS DINÁMICAS DE DATOS (LISTAS)

Memoria Dinámica. Jornadas de Marzo 2010 Grupo de Usuarios de Linux Tania Pérez

Tema: Tipos Abstractos de Datos (TAD s) en C#.

Tipos de Datos Abstractos

Unidad III: Estructuras lineales

2. ESTRUCTURAS BÁSICAS

Tema 1. Programación modular. Programación Avanzada Ingeniería Técnica en Informática de Gestión Jorge Badenas

Clase Práctica Administración de Memoria en C. Organización de Computadoras Depto. Cs. e Ing. de la Comp. Universidad Nacional del Sur

2. Variables dinámicas

Estructuras Enlazadas AyED UTN-BA

Estructuras de Datos Dinámicas: Listas

UNIVERSIDAD AUTONOMA DEL ESTADO DE MEXICO CENTRO UNIVERSITARIO UAEM ATLACOMULCO ESTRUCTURAS DE DATOS ING. GREGORIO GARCIA ESTRADA INTEGRANTES:

Manejo de memoria en C

Tema 6: Memoria dinámica

Apuntadores (Punteros)

1. El Tipo Abstracto de Datos.

Estructura de Datos. Temario Unidad VI. Árboles Árboles Binarios

PUNTEROS (APUNTADORES)

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Tema 13: Apuntadores en C

ESTRUCTURAS. Struct Identificador_ tipo_estructura { Tipo miembro_1; /*Declaración de los miembros*/

Una clave Definición informal La clave debe contener una secuencia de una o más letras seguidas por uno o más dígitos

GESTIÓN DE MEMORIA DINÁMICA EN C 1. Creación y destrucción de variables dinámicas

Unidad 2: Estructuras de Datos Tema III. Estructuras de datos Compuestas. Pilas, Colas y Listas implementadas con punteros

ESTRUCTURAS DINÁMICAS DE DATOS EN LENGUAJE C

Informática Ingeniería en Electrónica y Automática Industrial

Tema 02: TAD Pila. M. en C. Edgardo Adrián Franco Martínez edgardoadrianfrancom

PUNTEROS (Apuntadores)

Examen de Traductores, Intérpretes y Compiladores. Convocatoria ordinaria de Junio de er Curso de I.T. Informática de Sistemas.

Árboles. Árboles. Árboles binarios de búsqueda. Árboles. Inserción en un árbol. Árbol binario de búsqueda

Introducción al lenguaje C

Pilas, Colas. Andrea Rueda. Estructuras de Datos. Pontificia Universidad Javeriana Departamento de Ingeniería de Sistemas

Instituto Politécnico Nacional

Estructuras de Datos Clase 4 Pilas y colas

PUNTEROS EN C (APUNTADORES)

Transcripción:

Universidad Autónoma del Estado de México 2016, Año del 60 Aniversario de la Universidad Autónoma del Estado de México Unidad Académica Profesional Tianguistenco Ingeniería de Software Estructura de Datos Unidad II Pilas M.C. Angélica Millán Díaz Semestre 2016J

Estructuras de datos

El tamaño ocupado en la memoria se define antes de que el programa se ejecute y no puede modificarse dicho tamaño durante la ejecución del programa e s t á t i c a s Estructuras de datos

simples o primitivas int char float bool compuestas arreglos strings estructuras archivos e s t á t i c a s 2.1 Definición Estructuras de datos

simples o primitivas int char float bool compuestas arreglos strings estructuras archivos e s t á t i c a s Estructuras de datos d i n á m i c a s No tienen limitaciones en el tamaño de la memoria ocupado, utilizan los apuntadores para construir estructuras de datos dinámicas. Con un solo nombre se hace referencia a un grupo de casillas de la memoria.

simples o primitivas lineales int char float bool compuestas arreglos strings estructuras archivos e s t á t i c a s Estructuras de datos d i n á m i c a s pila cola lista no lineales árboles grafos

lista Organiza la información como un vector, pero no es necesario conocer la dimensión del mismo. A cada uno de los elementos de la lista se le llaman nodos. Las operaciones básicas a realizar con las listas son: insertar, eliminar, buscar, recorrer, vaciar y determinar el tamaño de la lista. pila cola

lista Organiza la información como un vector, pero no es necesario conocer la dimensión del mismo. A cada uno de los elementos de la lista se le llaman nodos. Las operaciones básicas a realizar con las listas son: insertar, eliminar, buscar, recorrer, vaciar y determinar el tamaño de la lista. pila Estructura de datos dónde el último elemento en entrar es el primero en salir (LIFO). Solo se tiene acceso a la cabeza o cima de la pila. Las operaciones básicas a realizar son: insertar (push), eliminar (pop), vaciar la pila y llenar. cola

lista Organiza la información como un vector, pero no es necesario conocer la dimensión del mismo. A cada uno de los elementos de la lista se le llaman nodos. Las operaciones básicas a realizar con las listas son: insertar, eliminar, buscar, recorrer, vaciar y determinar el tamaño de la lista. pila Estructura de datos dónde el último elemento en entrar es el primero en salir (LIFO). Solo se tiene acceso a la cabeza o cima de la pila. Las operaciones básicas a realizar son: insertar (push), eliminar (pop), vaciar la pila y llenar. cola Estructura de datos dónde el primer elemento en entrar es el primero en salir (FIFO). Una cola es una lista enlazada con acceso FIFO a la que solo se tiene acceso al final de la lista ara meter los elementos y al principio para sacarlos. Las operaciones básicas a realizar son: insertar, eliminar, vaciar y llenar.

//declaración de una estructura struct nodo{ int num; //cada elemento de la lista esta formado por un número struct nodo *sig; //apuntador al siguiente nodo ; 5 num *sig Ésta estructura contiene 2 miembros, num y *sig, éste último apunta a una estructura del mismo tipo en el cual se encuentra definido. *sig hace referencia a un enlace entre cada uno de los elementos de la lista.

//declaración de una estructura struct nodo{ int num; //cada elemento de la lista esta formado por un número struct nodo *sig; //apuntador al siguiente nodo ; 5 5 3 num *sig En esta representación gráfica, para indicar que el último elemento de la lista no apunta hacia otro dato es decir, apunta a nulo (NULL)- se indica con una diagonal.

Como estos tipos de datos no tienen asignada una determinada cantidad de memoria, es necesario asegurar que se tendrá suficiente espacio en el tiempo de ejecución del programa, con la finalidad de que se puedan crear nodos, así como para liberar espacio que ya no se necesita. El límite de la asignación de memoria dinámica puede ser tan grande como la cantidad de memoria virtual disponible en el sistema.

Como estos tipos de datos no tienen asignada una determinada cantidad de memoria, es necesario asegurar que se tendrá suficiente espacio en el tiempo de ejecución del programa, con la finalidad de que se puedan crear nodos, así como para liberar espacio que ya no se necesita. El límite de la asignación de memoria dinámica puede ser tan grande como la cantidad de memoria virtual disponible en el sistema.

Como estos tipos de datos no tienen asignada una determinada cantidad de memoria, es necesario asegurar que se tendrá suficiente espacio en el tiempo de ejecución del programa, con la finalidad de que se puedan crear nodos, así como para liberar espacio que ya no se necesita. El límite de la asignación de memoria dinámica puede ser tan grande como la cantidad de memoria virtual disponible en el sistema.

Como estos tipos de datos no tienen asignada una determinada cantidad de memoria, es necesario asegurar que se tendrá suficiente espacio en el tiempo de ejecución del programa, con la finalidad de que se puedan crear nodos, así como para liberar espacio que ya no se necesita. El límite de la asignación de memoria dinámica puede ser tan grande como la cantidad de memoria virtual disponible en el sistema. malloc sizeof free Toma como argumento el número bytes que serán asignados y regresa un puntero de tipo void* (puntero a nulo) de la memoria asignada.

Como estos tipos de datos no tienen asignada una determinada cantidad de memoria, es necesario asegurar que se tendrá suficiente espacio en el tiempo de ejecución del programa, con la finalidad de que se puedan crear nodos, así como para liberar espacio que ya no se necesita. El límite de la asignación de memoria dinámica puede ser tan grande como la cantidad de memoria virtual disponible en el sistema. malloc sizeof free Toma como argumento el número bytes que serán asignados y regresa un puntero de tipo void* (puntero a nulo) de la memoria asignada. Determina el largo de la estructura en bytes.

Como estos tipos de datos no tienen asignada una determinada cantidad de memoria, es necesario asegurar que se tendrá suficiente espacio en el tiempo de ejecución del programa, con la finalidad de que se puedan crear nodos, así como para liberar espacio que ya no se necesita. El límite de la asignación de memoria dinámica puede ser tan grande como la cantidad de memoria virtual disponible en el sistema. malloc sizeof free Toma como argumento el número bytes que serán asignados y regresa un puntero de tipo void* (puntero a nulo) de la memoria asignada. Determina el largo de la estructura en bytes. Es común utilizar ambas funciones para determinar si existe espacio disponible para asignar un nuevo nodo

Como estos tipos de datos no tienen asignada una determinada cantidad de memoria, es necesario asegurar que se tendrá suficiente espacio en el tiempo de ejecución del programa, con la finalidad de que se puedan crear nodos, así como para liberar espacio que ya no se necesita. El límite de la asignación de memoria dinámica puede ser tan grande como la cantidad de memoria virtual disponible en el sistema. malloc sizeof free nuevon = (Nodos *)malloc(sizeof(nodos));

Como estos tipos de datos no tienen asignada una determinada cantidad de memoria, es necesario asegurar que se tendrá suficiente espacio en el tiempo de ejecución del programa, con la finalidad de que se puedan crear nodos, así como para liberar espacio que ya no se necesita. El límite de la asignación de memoria dinámica puede ser tan grande como la cantidad de memoria virtual disponible en el sistema. malloc sizeof free nuevon = (Nodos *)malloc(sizeof(nodos)); Evalúa el tamaño del nodo para determinar el tamaño en bytes de la estructura Nodos, asigna una nueva área en la memoria de esa cantidad de bytes, y almacena un apuntador de la localidad de memoria en la variable nuevon. La localidd de memoria no se inicializa. Si no hay memoria disponible, malloc retorna un valor de NULL.

Como estos tipos de datos no tienen asignada una determinada cantidad de memoria, es necesario asegurar que se tendrá suficiente espacio en el tiempo de ejecución del programa, con la finalidad de que se puedan crear nodos, así como para liberar espacio que ya no se necesita. El límite de la asignación de memoria dinámica puede ser tan grande como la cantidad de memoria virtual disponible en el sistema. malloc sizeof free Toma como argumento el número bytes que serán asignados y regresa un puntero de tipo void* (puntero a nulo) de la memoria asignada. Determina el largo de la estructura en bytes. Libera espacio de memoria asignada, con lo cual dicha memoria puede ser reasignada en el futuro. free(ptemp);

Se tiene la siguiente estructura struct nodo{ int num; struct nodo *sig; ; 2.2 Operaciones Se denominan los siguientes alias a la estructura y al enlace de la misma typedef struct nodo Nodos; //alias de la estructura nodo typedef Nodos *nsig; //alias al apuntador del siguiente nodo Se declaran los siguientes prototipos de funciones para la pila void insertar(nsig *finp, int inf); int eliminar(nsig *finp); int vacia(nsig finp); void imprimir(nsig nactual); void instrucciones(void);

Se tiene la siguiente estructura struct nodo{ int num; struct nodo *sig; ; 2.2 Operaciones Se denominan los siguientes alias a la estructura y al enlace de la misma typedef struct nodo Nodos; //alias de la estructura nodo typedef Nodos *nsig; //alias al apuntador del siguiente nodo Se declaran los siguientes prototipos de funciones para la pila void insertar(nsig *finp, int inf); int eliminar(nsig *finp); int vacia(nsig finp); void imprimir(nsig nactual); void instrucciones(void);

2.2 Operaciones La función principal contiene los siguientes elementos: int main(){ nsig pilaa=null; //apunta la cima de la pila int op,valor; instrucciones(); printf("que desea hacer? "); scanf("%d",&op); while(op!=3){//mientras que el usuario no escriba un 3 switch (op){ case 1:{//insertar elementos printf("numero a insertar: "); scanf("%d",&valor); insertar(&pilaa,valor); imprimir(pilaa); break;

2.2 Operaciones La función principal contiene los siguientes elementos: (continuación) case 2:{ if(!vacia(pilaa)){ printf("el ultimo valor es %d.\n",eliminar(&pilaa)); imprimir(pilaa); break; default:{ printf("opcion no valida"); instrucciones(); break; printf("que desea hacer? "); scanf("%d",&op);

2.2 Operaciones La función principal contiene los siguientes elementos: (continuación) printf("fin de la ejecucion"); return 0; La definición de la función instrucciones sería: void instrucciones(void){ printf("acciones a realizar \n" "1) Insertar un elemento a la pila\n" "2) Eliminar un elemento de la pila\n" "3) Salir del programa\n");

2.2 Operaciones La definición de la función insertar sería: void insertar(nsig *finp, int inf){ nsig nuevon; nuevon = (Nodos *)malloc(sizeof(nodos)); if(nuevon!=null){ nuevon->num=inf; nuevon->sig=*finp; *finp=nuevon; else{ Crea un nuevo nodo llamando a malloc, asignando la localidad de memoria a nuevon printf("no se pudo insertar dato. No hay memoria suficiente");

2.2 Operaciones La definición de la función insertar sería: void insertar(nsig *finp, int inf){ nsig nuevon; nuevon = (Nodos *)malloc(sizeof(nodos)); if(nuevon!=null){ else{ nuevon->num=inf; nuevon->sig=*finp; *finp=nuevon; Asigna el apuntador *finp para hacer el enlace al nuevo elemento printf("no se pudo insertar dato. No hay memoria suficiente");

2.2 Operaciones La definición de la función insertar sería: void insertar(nsig *finp, int inf){ nsig nuevon; nuevon = (Nodos *)malloc(sizeof(nodos)); if(nuevon!=null){ else{ nuevon->num=inf; nuevon->sig=*finp; *finp=nuevon; Hace al elemento insertado el inicio de la pila printf("no se pudo insertar dato. No hay memoria suficiente");

2.2 Operaciones Lo que realiza la función insertar es: *finp 5 3

2.2 Operaciones Lo que realiza la función insertar es: *finp 5 3 Se inserta un nuevo valor nuevon 8

2.2 Operaciones Lo que realiza la función insertar es: *finp 5 3 nuevon 8

2.2 Operaciones Lo que realiza la función insertar es: *finp 5 3 8

2.2 Operaciones La definición de la función eliminar sería: int eliminar(nsig *finp){ nsig ptemp; int valorn; ptemp = *finp; valorn=(*finp)->num; *finp=(*finp)->sig; free(ptemp); return valorn;

2.2 Operaciones La definición de la función imprimir sería: void imprimir(nsig nactual){ if(nactual==null){ printf("la pila esta vacia\n"); else{ printf("la pila es: \n"); while(nactual!=null){ printf("%d-->",nactual->num); nactual=nactual->sig; printf("null\n\n");

La definición de la función vacía sería: int vacia(nsig finp){ return finp==null; 2.2 Operaciones