Está en la página 1de 9

Carátula para entrega de prácticas

Facultad de Ingeniería Laboratorio de docencia

Laboratorios de computación
salas A y B
Profesor: Ing. Jonathan Roberto Torres Castillo

Asignatura: Estructura De Datos Y Algoritmos I

Grupo: 9

No de Práctica(s): 7

Integrante(s): VALDERRABANO VEGA ABRAHAM

Semestre: 2018-II

Fecha de entrega: 12/04/2018

Observaciones:

CALIFICACIÓN: _________

1
PRACTICA 7
ESTRUCTURAS DE DATOS LINEALES: LISTA SIMPLE Y
LISTA CIRCULAR.
ESTRUCTURA DE DATOS Y ALGORITMOS I
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO

Profesor: Ing. Jonathan Roberto Torres Castillo

1. Reglas de las Prácticas de Laboratorio


 Deberá respetar la estructura general del documento proporcionado para la respectiva
práctica y llenar cada una de las secciones que aparecen en él.
 El desarrollo de la práctica deberá ser autentico. Aquellos alumnos que presenten los
mismos cálculos, código fuente, etcétera, se les será anulada inapelablemente la
práctica correspondiente con una calificación de 0.
 Deberá subir el informe y los scripts al sistema Schoology. Los archivos deberán tener
las características descritas en el archivo “Reglas_Laboratorio.pdf” de lo contrario su
calificación será de 0.
 El día de entrega establecido deberá ser respetado por todos los alumnos, la práctica
debe ser terminada parcialmente al finalizar la clase y completada máximo a los 7 días
siguientes a la sesión de laboratorio tiempo en el cual debe subir la práctica al ítem
correspondiente a la practica en el sistema Schoology.
 No se tendrán en cuenta informes ni actividades si no asiste a la sesión de laboratorio
y no presenta justificación médica, por lo cual no tendrá derecho a la calificación de
dicha práctica y la nota será de 0.
 La inasistencia a 3 sesiones de laboratorio en el semestre será causal de reprobación
de las prácticas y del curso.

2. Objetivos
Revisarás las definiciones, características, procedimientos y ejemplos de las estructuras lineales Lista
simple y Lista circular, con la finalidad de que comprendas sus estructuras y puedas implementarlas.

3. Introducción
Las listas son un tipo de estructura de datos lineal y dinámica. Es lineal porque cada elemento tiene
un único predecesor y un único sucesor, y es dinámica porque su tamaño no es fijo y se puede
definir conforme se requiera. Las operaciones básicas dentro de una lista son BUSCAR,
INSERTAR Y ELIMINAR.

2
Licencia GPL de GNU
El software presente en esta guía práctica es libre bajo la licencia GPL de
GNU, es decir, se puede modificar y distribuir mientras se mantenga la
licencia GPL. /*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see
<http://www.gnu.org/licenses/>.
*
* Author: Jorge A. Solano
*/

4. Planteamiento del Problema y Desarrollo


A continuación se describen las actividades a realizar para la presente práctica, en cada
apartado debe colocar la descripción, los análisis numéricos y/o los resultados de cada
actividad. El código fuente del programa que permitió solucionar cada actividad debe
colocarse en la sección 5.

4.1. Actividad 1

A partir del código ‘U1_P8_listas.c’ visto en clase, realice las modificaciones necesarias en
la función ‘borrar’ para que en pantalla se despliegue un mensaje cada vez que se intente
borrar un nodo que no existe en la lista e.g. “El nodo con valor 15 no existe”.

En este apartado describa lo realizado y muestre ejemplos con los resultados obtenidos.
_________________________________________________________________________
_________________________________________________________________

4.2. Actividad 2

Realice un menú de usuario e implemente funciones y cambios en el código de la actividad


1 para que el usuario pueda crear una lista, establecer el número máximo de nodos y
determinar si la lista va a agregar nuevos nodos ordenándolos de forma ascendente o
descendente, de igual forma en el menú deben estar las demás funciones que contiene el
código.

3
En este apartado describa lo realizado y muestre ejemplos con los resultados obtenidos.

5. Código
En esta sección se presenta el código fuente del programa que permitió cumplir los
objetivos propuestos. El programa debe estar comentado en cada una de sus líneas de código
y/o en sus ciclos iterativos.

5.1. Código Actividad 1


#include <stdlib.h>
#include <stdio.h>

typedef struct _nodo {


int valor;
struct _nodo *siguiente;
} tipoNodo;
typedef tipoNodo *pNodo;
typedef tipoNodo *Lista;

/* Funciones con listas: */

4
void Insertar(Lista *l, int v);
void Borrar(Lista *l, int v);
int ListaVacia(Lista l);
void BorrarLista(Lista *);
void MostrarLista(Lista l);

int main(){
Lista lista = NULL;
pNodo p;

Insertar(&lista, 20);
Insertar(&lista, 10);
Insertar(&lista, 40);
Insertar(&lista, 30);

MostrarLista(lista);

Borrar(&lista, 10);
Borrar(&lista, 15);
Borrar(&lista, 45);
Borrar(&lista, 30);
Borrar(&lista, 40);

MostrarLista(lista);

BorrarLista(&lista);

5
system("PAUSE");
return 0;
}

void Insertar(Lista *lista, int v)


{
pNodo nuevo, anterior;

/* Crear un nodo nuevo */


nuevo = (pNodo)malloc(sizeof(tipoNodo));
nuevo->valor = v;

/* Si la lista está vacÃ-a */


if(ListaVacia(*lista) || (*lista)->valor > v) {
/* Añadimos la lista a continuación del nuevo nodo */
nuevo->siguiente = *lista;
/* Ahora, el comienzo de nuestra lista es en nuevo nodo */
*lista = nuevo;
}
else {
/* Buscar el nodo de valor menor a v */
anterior = *lista;
/* Avanzamos hasta el último elemento o hasta que elsiguiente tenga un
valor mayor que v */
while(anterior->siguiente && anterior->siguiente->valor <=v)
anterior = anterior->siguiente;
/* Insertamos el nuevo nodo después del nodo anterior */
nuevo->siguiente = anterior->siguiente;
anterior->siguiente = nuevo;

6
}
}

void Borrar(Lista *lista, int v)


{
pNodo anterior, nodo;

nodo = *lista;
anterior = NULL;
while(nodo && nodo->valor < v) {
anterior = nodo;
nodo = nodo->siguiente;
}
if(!nodo || nodo->valor != v){
printf("\n\n\t el elemento %d no fue encontrado\n",v);
return;
}

else {
/* Borrar el nodo */
if(!anterior)
/* Primer elemento */
*lista = nodo->siguiente;
else
/* un elemento cualquiera */
anterior->siguiente = nodo->siguiente;
free(nodo);
}

7
}

int ListaVacia(Lista lista)


{
return (lista == NULL);
}
void BorrarLista(Lista *lista)
{
pNodo nodo;
while(*lista) {
nodo = *lista;
*lista = nodo->siguiente;
free(nodo);
}
}
void MostrarLista(Lista lista)
{
pNodo nodo = lista;
if(ListaVacia(lista))
printf("Lista vacÃ-a\n");
else {
while(nodo) {
printf("%d -> ", nodo->valor);
nodo = nodo->siguiente;
}
printf("\n");
}
}

8
5.2. Código Actividad 2
_________________________________________________________________________
________________________________________________________

6. Conclusiones
_________________________________________________________________________
__________________________________________________________________

7. Referencias
[1] GARCÍA CANO, Edgar, SOLANO GÁLVEZ, Jorge, Guía práctica de estudio #,
Nombre de la practica, Facultad de ingeniería, UNAM.

[2] CORMEN, Thomas, LEISERSON, Charles, et al. Introduction to Algorithms 3rd


edition MA, USA The MIT Press, 2009

También podría gustarte