LISTAS ENLAZADAS FUNDAMENTOS TEORICOS

Documentos relacionados
Unidad Nº V Listas Enlazadas

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

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

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.

TEMA 8: Gestión dinámica de memoria

ESTRUCTURAS DINÁMICAS DE DATOS (LISTAS)

Clases e instancias. Algoritmos y Estructuras de Datos I. Clases e instancias. memoria dinámica.

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

Fundamentos de Informática

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

324 MR Versión 1 Prueba Integral 1/3 Semana 10 Lapso

Programación estructurada (Introducción a lenguaje C)

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

Estructuras de datos: Pilas, Colas, Listas

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

Tema 9. Algoritmos sobre listas. Programación Programación - Tema 9: Algoritmos sobre listas

Programación. Test Autoevaluación Tema 3

Tabla de Símbolos. Programación II Margarita Álvarez

Instituto Politécnico Nacional

Tema ADQUISICIÓN Y TRATAMIENTO DE DATOS. Departamento de Ciencias de la Computación e IA. Subprogramas en C

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

Estructuras de Datos Declaraciones Tipos de Datos

TEMA 7: Ficheros. TEMA 7: Ficheros Concepto de fichero

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

Tema 6. Gestión dinámica de memoria

Elementos de un programa en C

Tema 13: Apuntadores en C

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS

Las plantillas permiten definir funciones genéricas.

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

Procesadores de lenguaje Tema 6 La tabla de símbolos

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

FUNCIONES PHP: DECLARACIÓN Y LLAMADAS. PARÁMETROS, RETURN. EJERCICIOS EJEMPLOS RESUELTOS. (CU00827B)

Retículos y Álgebras de Boole

ORDENAMIENTO Y BÚSQUEDA EN ARREGLOS

2.2 Nombres, Ligado y Ámbito

Programación MODULAR: Subalgoritmos - funciones y procedimientos

11. Algunas clases estándar de Java (II)

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

PILAS Fundamentos

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

Tema 2. El lenguaje JAVA

EXAMEN PARCIAL TRABAJO INTEGRADOR (TI) EVALUACIÓN CONTINUA PESO PORCENTUAL PESO PORCENTUAL 1 30% 06-MAY-14 30% 03-MAY-14 20% 20%

Laboratorio de Arquitectura de Redes. Punteros en lenguaje C

El TAD Grafo. El TAD Grafo

Examen Principios de Programación Febrero 2012

El lenguaje C. 1. Estructuras. Principios de Programación Definicion de estructuras

Tema 10: Tipos de datos definidos por el usuario

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

PHP: Lenguaje de programación

LENGUAJE. Tema 1 - Introducción

Apuntadores en C y C++


Sistemas Operativos Practica 1: procesos y concurrencia.

Introducción al lenguaje C

Contenido. Capítulo 1. Introducción a lenguaje C 1

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

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:

AMBITO DE VARIABLES EN C. GLOBALES Y LOCALES. UNDECLARED (FIRST USE IN THIS FUNCTION). EJEMPLOS (CU00548F)

Estructuras de control

Funciones. Parámetros por valor

Lenguaje C Elementos de un Programa. Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006

Tema 3. Aplicaciones de Tipo Consola

Práctica 3: Vectores y matrices en C.

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Parte I: Elementos del lenguaje Ada

Uso avanzado de punteros

Unidad II: Análisis semántico

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

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

<tipo> Tipo de dato de los elementos del vector

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

Programación Estructurada

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

Procesos e Hilos en C

Manual de turbo pascal

Estructuras de Control

TADs en C. Matías Bordese Algoritmos y Estructuras de Datos II - Laboratorio 2013

TIPOS DE DATOS BASICOS EN LENGUAJE C

Listas, Pilas, Colas y Punteros. Semana 3

Fundamentos de Programación 2017-I

PROGRAMACION / Clave: 11214

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

Estructuras de datos: Pilas, Colas, Listas

Organización de Computadoras

UN TIPO ABSTRACTO DE DATOS POLINOMIO EN C++

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

Se guardan en archivos con extencion c y los cabezales con extension h

Bloque 4. La descomposición funcional y el diseño descendente

Contenidos. Gestión dinámica de memoria. Gestión dinámica de memoria. Introducción. 1. Introducción 2. El operador NEW 3. El operador DELETE

Programación 1. Tema II. Diseño de programas elementales. Lección 7. Diseño modular y descendente de programas

USO DE SUBRUTINAS, TRANSMISIÓN DE PARÁMETROS Y COMPILACIÓN CONDICIONAL EN C++

LENGUAJE DE PROGRAMACION I. Ing. JAVIER ECHEGARAY ROJO Ing. WILDER ROMAN MUNIVE. Ing. Javier Echegaray Rojo / Ing. Wilder Román Munive Pag 1

Lección 2 Introducción al lenguaje C

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

TAD: Pila. TALLER: TAD Pila

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

Manejo de Bases de Datos Mysql en Lenguaje C

TEMA 7. ALGORITMOS DE BÚSQUEDA, ORDENACIÓN

Transcripción:

LISTAS ENLAZADAS FUNDAMENTOS TEORICOS Una lista enlazada es una colección o secuencia de elementos dispuestos uno detrás de otro, en la que cada elemento se conecta al siguiente elemento por un «enlace» o «puntero». La idea básica consiste en construir una lista cuyos elementos llamados nodos se componen de dos partes o campos: la primera parte o campo contiene la información y es, por consiguiente, un valor de un tipo genérico (denominado Dato, TipoElemento, Znfo, etc.) y la segunda parte o campo es un puntero (denominado enlace o sgte) que apunta al siguiente elemento de la lista. CLASIFICACIÓN DE LAS LISTAS ENLAZADAS Las listas se pueden dividir en cuatro categorías : Listas simplemente enlazadas. Cada nodo (elemento) contiene un único enlace que conecta ese nodo al nodo siguiente o nodo sucesor. La lista es eficiente en recorridos directos ((<adelante»). Listas doblemente enlazadas. Cada nodo contiene dos enlaces, uno a su nodo predecesor y el otro a su nodo sucesor. La lista es eficiente tanto en recorrido directo («adelante») como en recorrido inverso («atrás»). Lista circular simplemente enlazada. Una lista enlazada simplemente en la que el último elemento (cola) se enlaza al primer elemento (cabeza) de tal modo que la lista puede ser recorrida de modo circular («en anillo»). Lista circular dohlenzente enlazada. Una lista doblemente enlazada en la que el último elemento se enlaza al primer elemento y viceversa. Esta lista se puede recorrer de modo circular (en anillo) tanto en dirección directa («adelante») como inversa («atrás»). OPERACIONES EN LISTAS ENLAZADAS Una lista enlazada requiere unos controles para la gestión de los elementos contenidos en ellas. Estos controles se manifiestan en forma de operaciones que tendrán las siguientes funciones: Declaración de los tipos nodo y puntero a nodo. Iniciulización o creación. Insertar elementos en una lista. Eliminar elementos de una lista. Buscar elementos de una lisfa (comprobar la existencia de elementos en una lista). Recorrer una lista enlazada (visitar cada nodo de la lista).

Declaración de un nodo Una lista enlazada se compone de una serie de nodos enlazados mediante punteros. Cada nodo es una combinación de dos partes: un tipo de dato (entero, real, doble, carácter o tipo predefinido) y un enlace (puntero) al siguiente nodo. En C, se puede declarar un nuevo tipo de dato por un nodo mediante las palabras reservadas STRUCT que contiene las dos partes citadas. Struct nodo Struct nodo *enlace; ; Struct nodo *cabecera; cabecera=null; utilizando la instrucción typedef: typedef struct Elemento int dato; struct Elemento *enlace; Nodo; Nodo * cabecera; Cabecera = NULL; Construcción de una lista Un algoritmo para la creación de una lista enlazada entraña los siguientes pasos: Paso 1: Declarar el tipo de dato y el puntero de cabeza o primero. Struct nodo Struct nodo *enlace; ; Struct nodo *primero; primero=null; Paso 2: Asignar memoria para un elemento del tipo definido anteriormente utilizando alguna de las funciones de asignación de memoria (mdiloc ( ), calioc ( ), realioc ( ) ). primero=(struct nodo*)malloc(sizeof(struct nodo)); Paso 3: Crear iterativamente el primer elemento (cabeza) y los elementos sucesivos de una lista enlazada simplemente. Paso 4: Repetir hasta que no haya más entrada para el elemento. Ejemplo: La operación de crear un nodo se puede hacer en una función a la que se pasa el valor del campo dato y del campo siguiente. La función devuelve un puntero al nodo creado: Nodo* Crearnodo(1nt x, Nodo* enlace)

Nodo *p; p = (Nodo*)malloc(sizeof(Nodo)); p->dato = x; p->siquiente = enlace; return p; La llamada a la función Crearnodo ( ) para crear el primer nodo de la lista: Primero = Crearnodo(l1, NULL); Si ahora se desea añadir un nuevo elemento con un valor 6, y situarlo en el primer lugar de la lista se escribe simplemente: Primero = Crearnodo(6,Primero); En el siguiente ejemplo se visualiza el programa en Lenguaje C que ejecuta la operación de crear nodos e ir añadiendo los mismos a la lista: #include<stdio.h> struct nodo Struct nodo *siguiente; ; struct nodo *primero; primero= NULL; struct nodo* Crearnodo(1nt x, struct nodo* enlace) Struct nodo *p; p = (stuct nodo*)malloc(sizeof(struct nodo)); p->dato = x; p->siquiente = enlace; return p; main ( ) primero = Crearnodo(l1, NULL); primero = Crearnodo(6,primero); primero= Crearnodo(4, primero); Insertar un nuevo elemento en la cabeza de una lista Aunque normalmente se insertan nuevos datos al final de una estructura de datos, es más fácil y más eficiente insertar un elemento nuevo en la cabeza de una lista. El proceso de inserción se puede resumir en este algoritmo: void InsertarCabezaLista (struct nodo* cabeza, int entrada) struct nodo *nuevo ;

nuevo = (struct nodo*)malloc(sizeof(struct nodo)); / * asigna nuevo nodo * / nuevo -> dato = entrada; / * pone elemento en nuevo * / nuevo -> siguiente = cabeza; / * enlaza nuevo nodo al frente de la lista*/ cabeza = nuevo; / * mueve puntero cabeza y apunta al nuevo nodo * / La función InsertarCabezaLista actúa también correctamente si se trata el caso de añadir un primer nodo o elemento a una lista vacía. Buscar un Elemento en una Lista Enlazada La función BuscarLista utiliza una variable puntero denominado auxiliar(aux) que va recorriendo la lista nodo a nodo. Mediante un bucle, auxiliar apunta a los nodos de la lista de modo que si se encuentra el nodo buscado, se devuelve un puntero al nodo buscado con la sentencia de retorno (return); en el caso de no encontrarse el nodo buscado la función debe devolver NULL (return NULL) Struct nodo*buscarlista(struct nodo*primero, int x) struct nodo* aux; if primero==null printf ( Lista vacia ); else aux=primero; while (aux!=null) If (aux->dato==x) return (aux); else aux=aux->siguiente; return NULL; Eliminar un Elemento de la Lista Enlazada La operación de eliminar un nodo de una lista enlazada supone enlazar el nodo anterior con el nodo siguiente al que se desea eliminar y liberar la memoria que ocupa. El algoritmo para eliminar un nodo que contiene un dato se puede expresar en estos pasos: void eliminar (struct nodo** cabeza, int entrada) Struct nodo* actual, *anterior; int encontrado = 0; actual = *cabeza; anterior = NULL; while ((actual!=null) && (encontrado==0)) / * Bucle de búsqueda * / encontrado = (actual->dato = = entrada); if (encontrado==0) anterior = actual; actual = actual -> siguiente;

if (actual!= NULL) / * Enlace de nodo anterior con siguiente * / / * Se distingue entre que el nodo sea el cabecera o del resto de la lista * / if (actual == cabeza) cabeza = actual->siguiente; Else anterior -> siguiente = actual ->siguiente free(actua1); Mostrar los Elementos de una Lista Enlazada La operación de recorrer e imprimir los elementos de una lista se resume en l el siguiente algoritmo: Void mostrarlista (struct nodo*primero) struct nodo*aux=primero; While (aux!= NULL) printf ( %i, aux->dato); aux=aux->siguiente;