Un elemento de cualquier clase llamada Info; Un puntero a un nuevo nodo llamado sig; De tal forma una unión de nodos hace que tengamos una lista:



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

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

Plantillas: un mecanismo de polimorfismo

Prof. Dr. Paul Bustamante

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

Qué son los monomios?

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

Introducción a la programación orientada a objetos

Tema: Sobrecarga de Operadores.

Tema 3. Test Driven Development

Ecuaciones de primer grado con dos incógnitas

QUÉ ES UN NÚMERO DECIMAL?

Clases y Objetos. Informática II Ingeniería Electrónica

Árboles AVL. Laboratorio de Programación II

UNIDAD 1. LOS NÚMEROS ENTEROS.

Estadística con Excel Informática 4º ESO ESTADÍSTICA CON EXCEL

Prof. Dr. Paul Bustamante

Prof. Dr. Paul Bustamante

SISTEMAS DE NUMERACIÓN. Sistema decimal

Listas, Pilas, Colas y Punteros. Semana 3

Examen Septiembre Curso Programación en C++ Pág. 1

Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal)

Prof. Dr. Paul Bustamante

Clases y funciones amigas: friend

Las propiedades de la clase en java es el equivalente a las variables globales en lenguajes estructurados como el C.

6.1. Conoce la papelera

Modelos y Bases de Datos

SYMBALOO 1º.- QUÉ ES? 2º.-Darse de alta en Symbaloo

Realizado por Pablo Yela

Cómo convertir texto de Word en una tabla de datos en Excel (todas las versiones)

13.1. Tablas dinámicas de Excel

Pruebas de unidad con JUnit

Introducción a los Tipos Abstractos de Datos

LABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL

Tema 2 : NÚMEROS ENTEROS. Primero de Educación Secundaria Obligatoria. I.e.s Fuentesaúco.

Manual para la utilización de PrestaShop

MANUAL DE CS-ALMACENES (MAYO 2012)

CASO PRÁCTICO DISTRIBUCIÓN DE COSTES

Llamamos potencia a todo producto de factores iguales. Por ejemplo: 3 4 =

Interpolación polinómica

MANUAL DE AYUDA MÓDULO GOTELGEST.NET PREVENTA/AUTOVENTA

KIG: LA GEOMETRÍA A GOLPE DE RATÓN. Asesor de Tecnologías de la Información y de las Comunicaciones

Curso de Java POO: Programación orientada a objetos

Informática Bioingeniería

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

QUÉ ES LA RENTABILIDAD Y CÓMO MEDIRLA. La rentabilidad mide la eficiencia con la cual una empresa utiliza sus recursos financieros.

MANUAL DE CS-ALMACENES

ALGORITMICA Y PROGRAMACION POR OBJETOS I

Adaptación al NPGC. Introducción. NPGC.doc. Qué cambios hay en el NPGC? Telf.: Fax.:

EJERCICIOS DEL TEMA 1

FUNCIONES CUADRÁTICAS Y RACIONALES

Java Inicial (20 horas)

Tutorial de manejo de los portafolios de objetivonatural.com. Bienvenidos a Portafolios.objetivonatural.com

MÉTODO DEL CAMBIO DE BASE PARA CÁLCULO MANUAL DE SUBREDES CON IP V4.0

CAPÍTULO VI PREPARACIÓN DEL MODELO EN ALGOR. En este capítulo, se hablará acerca de los pasos a seguir para poder realizar el análisis de

MANAUAL DE MANTENIMIENTO PARA LA PÁGINA WEB DE PROYECTO ADL GESTOR DE CONTENIDOS

Ejercicios resueltos de porcentajes

Programa para el Mejoramiento de la Enseñanza de la Matemática en ANEP Proyecto: Análisis, Reflexión y Producción. Fracciones

Divisibilidad y números primos

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

SESION El comando Integrate 2. Aproximación de integrales definidas 3. Integración de funciones racionales

CURSO DE INTRODUCCIÓN AL WORD

x

Ejercicios - Persistencia en Android: ficheros y SQLite

Este programa mueve cada motor de forma independiente, y cuando termina una línea pasa a la siguiente.

MANUAL TIENDA VIRTUAL. Paseo del Gran Capitán, Nº 62, Salamanca. Telf.: Fax:

Ejercicios - Persistencia en Android: proveedores de contenidos y SharedPreferences

Trabajar con diapositivas

SISTEMAS DE NUMERACIÓN.

Los sistemas de numeración se clasifican en: posicionales y no posicionales.

Enunciado unidades fraccionarias fracción fracciones equivalentes comparar operaciones aritméticas fracciones propias Qué hacer deslizador vertical

INSTALACIÓN DE SIESTTA 2.0 EN UN HOSTING (Ejemplo para Guebs.com)

ELECTRÓNICA DIGITAL. Una señal es la variación de una magnitud que permite transmitir información. Las señales pueden ser de dos tipos:

Ámbito Científico-Tecnológico Módulo III Bloque 2 Unidad 1 Quien parte y reparte, se lleva la mejor parte

Curso Excel Básico - Intermedio

Gracias a ese IP único que tiene cada ordenador conectado a la red de internet se pueden identificar y comunicar los ordenadores.

1. Introducción. 1.1 Ejercicio 1: Estación Meteorológica (4.0 pts.) Ejercicio 2: Gestión Académica: Alumnos (5.0 pts.)...

CONVERSIÓN DE UN NÚMERO EN BINARIO A DECIMAL Y VICEVERSA

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

Módulo 9 Sistema matemático y operaciones binarias

SOROLLA2 GUÍA PRÁCTICA SIMPLIFICADA. Relaciones de transferencias. Marzo del 2014

Matrices equivalentes. El método de Gauss

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

GUIA PROGRAMACIÓN ORIENTADA A OBJETOS

Actividades con GeoGebra

Programación Orientada a Objetos con Java

Solmicro - expertis ERP Gestión de Tarifas

La ventana de Microsoft Excel

BASES Y DIMENSIÓN. Propiedades de las bases. Ejemplos de bases.

Programa diseñado y creado por Art-Tronic Promotora Audiovisual, S.L.

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

SISTEMAS DE COORDENADAS SISTEMA COORDENADO UNIDIMENSIONAL

Ejercicios de Trigonometría

Sistemas de numeración

MANUAL DE USUARIO DE LA APLICACIÓN DE ACREDITACION DE ACTIVIDADES DE FORMACION CONTINUADA. Perfil Entidad Proveedora

Dibujos creados con Word. Mediante autoformas, líneas, rectángulos, elipses, etc.

INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA UNIDAD CULHUACÁN INTEGRANTES

Módulo 2: Técnicas Administrativas de Compra-Venta. Unidad didáctica 5: acturación. acturaplus Élite

ZCARTAS: Iniciación a la suma y resta de números enteros Introducción Actividad 1: Escenario con cartas numeradas desde -2 hasta 2...

Transcripción:

Tipos Abstractos de Datos: TAD Lista en educación Profesional 1.- Introducción Los tipos abstractos de datos son fundamentales para la informática puesto que de ellos se sirven todos los programas para modelar situaciones del mundo real. Un tipo Abstracto de datos define un tipo de datos y unas operaciones que se pueden realizar con él, haciendo una analogía con las matemáticas si tenemos el conjunto de los número naturales, tenemos un conjunto de datos y unas operaciones que están definidas en un supuesto, por ejemplo: El conjunto de los números naturales va desde el 1 hasta el +Infinito. Operaciones: Sumar en todo el dominio; Multiplicar en todo el dominio; Restar Sólo cuando el Minuendo sea mayor que el sustraendo; Dividir sólo cuando el cociente de entero y positivo. Como en el ejemplo de las matemáticas los tipos abstractos de datos deben tener un conjunto de datos posibles y unas posibles operaciones entre ellos. En este artículo nos vamos a centrar en el tipo abstracto de datos Lista, este tipo abstracto de datos construye nodos con las siguientes características: Un elemento de cualquier clase llamada Info; Un puntero a un nuevo nodo llamado sig; De tal forma una unión de nodos hace que tengamos una lista: 2.- Implementación Por lo tanto debemos usar nodos para crear una lista, lo que nos lleva a crear el tipo abstracto de datos nodos, que tendrá un dominio, unos atributos y unas operaciones, veamos un ejemplo del tipo abstracto de datos: 1

Nodo template <class T> class Nodo friend class Lista<T>; private: //atributos T info; Nodo<T> *sig; //constructor Nodo (const T&); // devuelve la informacion del nodo T& getinfo(); // devuelve el siguiente nodo Nodo<T> *getsig(); // modifica el puntero que apunta al siguiente Nodo void setsig(nodo<t> *); // modifica la información void setinfo(const T&); ; // funcines de la clase Nodo // Constructor de la clase Nodo, crea una información del tipo T llamada info. Nodo<T>::Nodo(const T& e) info=e; sig=null; //Método observador de la clase, obtenemos una información de tipo T T& Nodo<T>::getInfo() return info; // método que nos devuelve el puntero a siguiente de uno de los campos de 2

Nodo<T>* Nodo<T>::getSig() return sig; //método que actualize el valor a siguiente en la clase Nodo void Nodo<T>::setSig(Nodo<T> *p) sig=p; //método que actualize la información del tipo T del nodo void Nodo<T>::setInfo(const T &e) info=e; Con estas funciones tenemos el esqueleto de nuestra lista, así como los ladrillos son para una casa, la clase Nodo será para nuestra lista, tenemos la base para construir la lista. Qué operaciones tendrá que tener nuestra clase lista?, a continuación expondré una lista de las operaciones necesarias que debe de tener nuestro tipo abstracto de datos: 1. Constructores de la clase. 2. Destructor de la clase. 3. Saber en qué nodo estamos; 4. Ir al nodo inicial. 5. Ir al nodo final. 6. Pasar de un nodo al siguiente. 7. Insertar un nodo en la lista. 8. Borrar un nodo en la lista. 9. Modificar la información de un nodo de la lista 10. Borrar la lista 11. Obtener la información actual. 12. Comprobar que es vacia 13. Buscar en la lista, entre otras Veamos como construiríamos la lista: template <class T> class Lista friend ostream& operator<<(ostream &, const Lista<T> &); friend istream& operator>>(istream &, Lista<T> &); 3

; private: Nodo<T> *datos; Nodo<T> p; public: Lista(); Lista(const T&); Lista(const Lista<T>&); ~Lista(); Nodo<T>* getp() const; void primero(); void ultimo(); void siguiente(); void insertar(const T&); void borrar(); boid borrarlista(); void modificar(const T&); T& obtener() const; Logico esvacia() const; Logico esultimo() const; Logico buscar(const T&) const; int longitud() const; int numveces(const T&) const; Lista<T> & operator=(const Lista<T>&); Visto el prototipo que tendría nuestra lista veamos cuales serian nuestras funciones miembro de la clase: // funciones de la clase lista // constructor por defecto Lista<T>::Lista() datos=null; p=null; 4

Con este constructor realizamos este resultado: // constructor con parametros Lista<T>::Lista(const T &e) datos=null; p=null; insertar(e); Con este contructor obtendríamos el siguiente resultado: // constructor copia Lista<T>::Lista(const Lista<T> &l) Nodo<T> *aux, *aux1; datos=null; p=null; aux=l.datos; while(aux!=null) insertar(aux->getinfo()); if(aux==l.p) aux1=p; aux=aux->getsig(); p=aux; 5

Con el constructor copia obtendríamos una copia idéntica de la lista que se le pasa como parámetro: // destructor Lista<T>::~Lista() borrarlista(); Borrariamos la lista y nos quedaría: NULL //obtener el nodo actual de la lista Nodo<T>* Lista<T>::getP() const return p; // se sitúa el primero de la lista void Lista<T>::primero() assert(!esvacia()); //hacemos el actual el primero p=datos; 6

// se situa el último de la lista void Lista<T>::ultimo() assert(!esvacia()); while(p->getsig()!=null) p=p->getsig(); Último E NULL F NULL G NULL // se situa en el siguiente de la lista void Lista<T>::siguiente() assert(!esvacia() &&!esultimo()); p=p->getsig(); // inserta un elemento en la lista void Lista<T>::insertar(const T &e) Nodo<T> *aux; 7

aux = new Nodo<T>(e); assert(aux!=null); if(esvacia()) datos=aux; else aux->setsig(p->getsig()); p->setsigaux); p=aux; Actual Siguiente E NULL F NULL G NULL H Nuevo Nodo // borra un elemento de la lista void Lista<T>::borrar() Nodo<T> *ant; assert(!esvacia()); if(p==datos) 8

datos=p->getsig(); delete p; p=datos; else ant=datos; while(ant->getsig()!=p) ant=ant->getsig(); ant->setsig(p->getsig()); delete p; p=ant; // borra toda la lista void Lista<T>::borrarLista() if(!esvacia()) 9

primero(); while(!esvacia) borrar(); // modifica el elemento actual de la lista template <class T> void Lista<T>::modificar(const T&e) assert(!esvacia()); p->setinfo(e); //obtiene el elemento actual T& Lista<T>::obtener() const 10

assert(!esvacia()); return(p->getinfo()); //vemos si es una lista vacia Logico Lista<T>::esVacia() const Logico res=falso; if(datos==null) res=cierto; return res; //comprobamos que sea el ultimo elemento de la lista 11

Logico Lista<T>::esUltimo() const Logico res=falso; assert(!esvacia()); if(p->getsig()!=null) res=cierto; return res; // busca elementos en una lista Logico Lista<T>::buscar(const T&e) const Logico res=falso; Nodo<T> *aux; if(!esvacia()) aux=datos; while(aux!=null &&!enc) if(aux->getinfo()==e) res=cierto; aux=aux->getsig(); 12

return res; // calcula el tamaño de una lista template <class T> int Lista<T>::longitud() const Nodo<T> *aux; int l=0; aux=datos; while(aux!=null) l++; aux=aux->getsig(); return l; // calcula el numero de veces que ocurre un elemento en la lista template <class T> int Lista<T>::numVeces(const T&e) const Nodo<T> *aux; 13

int nv=0; aux=datos; while(aux!=null) if(aux->getinfo()==e) nv++; aux=aux->getsig(); return nv; // operador de asignacion template <class T> Lista<T> & Lista<T>::operator=(const Lista<T> &l) Nodo<T> *aux, *aux1; borrarlista(); p=null; datos=null; aux=l.datos; while(aux!=null) insertar(aux->getinfo()); if(aux==l.p) aux1=p; aux=aux->getsig(); p=aux1; return *this; De esta manera podemos construirnos una lista de tipo genérico que puede ser de mucha utilidad al alumnado, ya que con ella se pueden realizar multitud de prácticas en programación. 3.- Conclusión 14

Los tipos de datos son muy importantes en la informática, puesto que en ello se basan multitud de aplicaciones de propósito general y los mismos sistemas operativos, aplicaciones web como un carro de la compra, aplicaciones para pedir citas en un lugar, algoritmos de planificación de procesos, todos utilizan el tipo abstracto de datos lista, un tipo abstracto de datos fundamental para la manipulación de datos en la actualidad. La ejemplificación que aquí se ha mostrado puede ser de mucha utilidad para comprender los algoritmos de planificación de procesos en los módulos de sistemas operativos de las distintas ramas de la familia profesional de informática, por lo que el alumno puede comprender de una manera más factible cómo funcionan las listas. 15