ALGORITMOS Y ESTRUCTURA
DE DATOS
UNIVERSIDAD NACIONAL “PEDRO RUIZ GALLO”
FACULTAD DE INGENIERIA CIVIL, SISTEMAS Y ARQUITECTURA
Escuela Profesional de Ingeniería de Sistemas
ASIGNATURA :
DOCENTE :
EQUIPO DE TRABAJO:
“Algoritmo y Estructura de Datos”
Ing. Regis Díaz Plaza
Jamanca Chávez Aldo Misael Ríos Damián Tito Gabriel
LAMBAYEQUE, JUNIO 2010
Aquino Sánchez Fiorella InésTIPOS DE DATOS
DATOS ESTATICOS.-
Cuando el tamaño ocupado en la
memoria es fijo, siempre ocupa la misma cantidad de
espacio en la memoria.
DATOS DINÁMICOS.-
Son estructuras que crecen a medida
que se ejecuta un programa. Una estructura dinámica de
datos, es una colección de elementos llamados “nodos”.
Estos se clasifican en:
Lineales:
Listas, Pilas y Colas
No lineales:
Arboles y Grafos
LISTAS
En algunas ocasiones , no se conoce por adelantado
cuanta memoria se requerirá para un programa. En esos
casos es conveniente disponer de un método para
adquirir posiciones de memoria a medida que se
necesiten durante la ejecución del programa y liberarlas
cuando no se necesitan.
Las variables que se crean y están disponibles durante la
ejecución de un programa se llaman VARIABLES
DINAMICAS DE DATOS.
Una lista de datos se amplía y contrae durante la
ejecución del programa.
VENTAJAS DE TRABAJAR CON LISTAS
Se crean las variables
conforme se requieran y se liberan cuando ya no se necesitan.
Optimiza el uso de la
memoria.
Más directo, dado que
trabajamos con direcciones de memoria.
DESVENTAJAS DE USAR LISTAS:
El acceso a un elemento
es más lento, debido a
que la información no está
en posiciones contiguas
de memoria, por lo que no
podemos acceder a un
Formado por nodos (colección de elementos). Cada nodo almacena dos valores:
• Valor de la lista • Puntero o referencia
El ultimo nodo de la lista se representa por un enlace con la palabra
NIL (NULO).
Una lista enlazada sin ningún elemento se llama LISTA VACÍA.
LISTAS DOBLEMENTE
ENLAZADAS
Estas listas se pueden recorrer en ambas direcciones.
Cada nodo tiene dos enlaces:
Uno apunta al nodo anterior, o apunta al valor NULL o a
la lista
vacía si es el primer nodo.
Otro que apunta al siguiente nodo siguiente, o apunta al
valor
NULL o a la lista vacía si es el último nodo.
Una lista doblemente enlazada contiene tres valores: el
valor, el link al
LISTAS CIRCULARES
En una lista enlazada circular, el primer y el último
nodo están unidos juntos.
Para recorrer un lista enlazada circular podemos
empezar por cualquier nodo y seguir la lista en
cualquier dirección hasta que se regrese hasta el
nodo original.
CLASE PRINCIPAL MAIN ()
import PAQUETE.*
Inicio
Declarar gcOpción, Array gnLista [100][3], gnInic, gnValor, gnContador, gnPrimerE, gnControl
gnValor <- 0 gnInic <- (-1) gnContador <- 0 gnPrimerE <- 0 gnControl <- 0
MENU
Leer gcOpcion
Mientras (gcOpcion <> “S”) hacer Según gcOpcion
PROCEDIMIENTO MENU
Mostrar “Simulación de una Lista Enlazada” Mostrar “1 Insertar el primer elemento al inicio”
Mostrar “2 Insertar elementos despues del primero” Mostrar “3 Eliminar un elemento indicado”
Mostrar “4 Contar elementos existentes en la lista” Mostrar “5 Buscar elemento”
Mostrar “6 Mostrar los elementos de la lista” Mostrar “S Salir”
PROCEDIMIENTO InsertarElementoIni()
Declarar nElemento, nResultado Mostrar “Ingrese elemento”
Leer nElemento
Crear OBJLISTA tipo LISTA ()
nResultado <- OBJLISTA.INSERTARELEMENTOINI(Array gnLista[100] [3], gnInic, gnValor, gnContador, nElemento)
Si (nResultado==1)
Mostrar “Se inserto el primer elemento” Si no
Mostrar “Ya existe el primer elemento” Fin Si
Destruir OBJLISTA
FIN PROCEDIMIENTO
PROCEDIMIENTO InsertarElementosDif()
Declarar nElemento, nPosic, nResultado Mostrar “Ingrese elemento”
Leer nElemento Repetir
Mostrar "Ingrese la posicion de elemento, debe ser un valor entre 1-100" Leer nPosic
Hasta (nPosic >= 1 and nPosic <= 100)
Crear OBJLISTA1 tipo LISTA ()
nResultado <- OBJLISTA1.INSERTARELEMENTOSDIF(Array gnLista[100][3], gnInic, gnValor, nElemento, gnContador)
Si (nResultado==1)
Mostrar “Se inserto el elemento” Si no
Si (nResultado == 0)
Mostrar "Posicion ocupada" Si no
Mostrar "No se coloco el primer elemento o la lista está llena"
Fin Si Fin Si
Destruir OBJLISTA1
PROCEDIMIENTO EliminarElemento()
Declarar nElemento, nResultado Mostrar "Ingrese elemento"
Leer nElemento
Crear OBJLISTA2 tipo LISTA ()
nResultado <- OBJLISTA2.ELIMINARELEMENTO(Array gnLista[100][3], nElemento, gnContador)
Si (nResultado==1)
Mostrar “Se elimino el elemento” Si no
Mostrar "No existe el elemento" Fin Si
Destruir OBJLISTA2
FIN PROCEDIMIENTO
PROCEDIMIENTO ContarElementos()
Declarar nResultado
Crear OBJLISTA3 tipo LISTA ()
nResultado <- OBJLISTA3.CONTARELEMENTOS(gnContador) Mostrar "En la lista hay: ",nResultado," ","elementos"
Destruir OBJLISTA3
FIN PROCEDIMIENTO
PROCEDIMIENTO BuscarElemento()
Declarar nElemento, nResultado Leer nElemento
Crear OBJLISTA4 tipo LISTA ()
nResultado <- OBJLISTA4.BUSCARELEMENTO(Array gnLista[100][3], nElemento)
Si (nResultado==1)
Mostrar “El elemento se encuentra en la lista” Si no
Mostrar "No existe el elemento" Fin Si
Destruir OBJLISTA4
FIN PROCEDIMIENTO
PROCEDIMIENTO MostrarLista()
Declarar nElemento, nContador1 nContador1 <- 1
Crear OBJLISTA5 tipo LISTA ()
Mientras (nContador1 <= gnContador) hacer
nElemento <- OBJLISTA5.MOSTRARLISTA(Array gnLista[100][3], gnPrimerE, gnControl)
Mostrar nElemento
nContador1 <- nContador1+1 Fin Mientras
Destruir OBJLISTA5
FIN PROCEDIMIENTO
PAQUETE Clase LISTA ()
PROPIEDADES
Array gnLista[100][3] gnInic
gnVacio gnContador gnPrimerE gnControl nResultado1 nElemento1
METODOS
INSERTARELEMENTOINI(gnLista[100][3], gnInic, gnValor, gnContador, nElemento, nResultado1)
Declarar nAuxi
Si (gnInic=-1) entonces nAuxi <- gnValor
gnLista[nAuxi][0] <- 0
gnLista[nAuxi][1] <- nElemento gnLista[nAuxi][2] <- gnInic
gnInic <- 0
gnContador <- gnContador+1 nResultado1 <- 1
Si no
nResultado1 <- 0 Fin Si
retornar nResultado1
INSERTARELEMENTOSDIF(gnLista[100][3], gnInic, gnValor, gnContador, nElemento, nPosic, nResultado1)
Declarar nAuxi
Si (gnInic <> -1 && gnContador <> 100) entonces Si (gnLista[nPosic-1][1] == NULL)
nAuxi <- nPosic-1
gnLista[nAuxi][1] <- nElemento gnLista[gnValor][2] <- nPosic-1 gnLista[nAuxi][2] <- (-1)
gnValor <- nPosic-1
gnContador <- gnContador+1 nResultado1 <- 1
Si no
nResultado1 <- 0 Fin Si
Si no
nResultado1 <- 2 Fin Si
retornar nResultado1
ELIMINARELEMENTO(gnLista[100][3], nElemento, gnContador, nResultado1)
Declarar i, j, nAuxi i <- 0
j <- 0
Mientras (i <= 99) hacer
Si (gnLista[i][1] = nElemento) entonces gnLista[i][1] <- NULL
gnContador <- gnContador-1 Si (gnLista[i][0] = 0) entonces
Si no
Mientras (j <= 100) entonces
Si (gnLista[j][2] = i) entonces gnLista[j][2] <- gnLista[i][2] j <- 100
Fin Si j <- j+1 Fin Mientras
nResultado1 <- 1 i <- 100
Fin Si Si no
nResultado1 <- 0 Fin Si
i <- i+1 Fin Mientras
retornar nResultado1
CONTARELEMENTOS(gnContador, nResultado1) nResultado1 <- gnContador
retornar nResultado1
BUSCARELEMENTO(gnLista[100][3], nElemento, nResultado1) Declarar i
i<-0
Mientras (i <= 99) hacer
Si (gnLista[i][1] = nElemento) entonces nResultado1 <- 1
i <- 100 Si no
nResultado1 <- 0 Fin si
i <- i+1 Fin Mientras
retornar nResultado1
MOSTRARLISTA(gnLista[100][3], gnPrimerE, gnControl, nElemento1) Declarar i, nAuxi
i <- 0
Si (gnPrimerE == 0) entonces Mientras (i <= 99) hacer
Si (gnLista[i][0] == 0) entonces nElemento1 <- gnLista[i][1] gnControl <- i
gnPrimerE <- gnPrimerE+1 i <- 100
Fin Si i <- i+1 Fin Mientras Si no
nAuxi <- gnLista[gnControl][2] Si (nAuxi == -1)entonces
nElemento1 <- gnLista[gnControl][1] Si no
nElemento1 <- gnLista[nAuxi][1] gnControl <- gnLista[nAuxi][2] Fin Si
Fin Si
retornar nElemento1
FIN MOSTRARLISTA
CLASE PRINCIPAL MAIN ()
import PAQUETE.* Inicio
Declarar gcOpción, Array gsListaE[100], Array gnIzqda[100], Array gnDercha[100], gnInic, gnValor, gnContador, gnPrimerE, gnControl
gnValor <- 0 ; gnInic <- (-1) gnContador <- 0
gnPrimerE <- 0 gnControl <- 0
MENU
Leer gcOpcion
Mientras (gcOpcion <> “S”) hacer Según gcOpcion
PROCEDIMIENTO MENU
Mostrar “Simulación de una Lista Doblemente Enlazada” Mostrar “1 Insertar el primer elemento al inicio”
Mostrar “2 Insertar elementos despues del primero” Mostrar “3 Eliminar un elemento indicado”
Mostrar “4 Contar elementos existentes en la lista” Mostrar “5 Buscar elemento”
Mostrar “6 Mostrar los elementos de la lista:Direccion Normal” Mostrar “7 Mostrar los elementos de la lista:Direccion Inversa"
PROCEDIMIENTO InsertarElementoIni()
Declarar sElemento, nResultado Mostrar “Ingrese elemento”
Leer sElemento
Crear OBJLISTA tipo LISTA ()
nResultado <- OBJLISTA.INSERTARELEMENTOINI(Array
gnListaE[100], Array gnIzqda[100], Array gnDercha[100], gnInic, gnValor, gnContador, sElemento)
Si (nResultado==1)
Mostrar “Se inserto el primer elemento” Si no
Mostrar “Ya existe el primer elemento” Fin Si
Destruir OBJLISTA
FIN PROCEDIMIENTO
PROCEDIMIENTO InsertarElementosDif()
Declarar nElemento, nPosic, nResultado Mostrar “Ingrese elemento”
Leer sElemento Repetir
Mostrar "Ingrese la posicion de elemento, debe ser un valor entre 1-100" Leer nPosic
Hasta (nPosic >= 1 and nPosic <= 100)
Crear OBJLISTA1 tipo LISTA ()
nResultado <- OBJLISTA1.INSERTARELEMENTOSDIF(Array
gsListaE[100], Array gnIzqda[100], Array gnDercha[100], gnInic, gnValor, sElemento, gnContador)
Si (nResultado==1)
Mostrar “Se inserto el elemento” Si no
Si (nResultado == 0)
Mostrar "Posicion ocupada" Si no
Mostrar "No se coloco el primer elemento o la lista esta llena"
Fin Si Fin Si
Destruir OBJLISTA1
PROCEDIMIENTO EliminarElemento()
Declarar sElemento, nResultado Mostrar "Ingrese elemento"
Leer sElemento
Crear OBJLISTA2 tipo LISTA ()
nResultado <- OBJLISTA2.ELIMINARELEMENTO(Array
gsListaE[100], Array gnIzqda[100], Array gnDercha[100], nElemento, gnContador)
Si (nResultado==1)
Mostrar “Se elimino el elemento” Si no
Mostrar "No existe el elemento" Fin Si
Destruir OBJLISTA2
FIN PROCEDIMIENTO
PROCEDIMIENTO ContarElementos()
Declarar nResultado
Crear OBJLISTA3 tipo LISTA ()
nResultado <- OBJLISTA3.CONTARELEMENTOS(gnContador) Mostrar "En la lista hay: ",nResultado," ","elementos"
Destruir OBJLISTA3
FIN PROCEDIMIENTO
PROCEDIMIENTO BuscarElemento()
Declarar sElemento, nResultado Leer sElemento
Crear OBJLISTA4 tipo LISTA ()
nResultado <- OBJLISTA4.BUSCARELEMENTO(Array gsListaE[100], sElemento)
Si (nResultado==1)
Mostrar “El elemento se encuentra en la lista” Si no
Mostrar "No existe el elemento" Fin Si
Destruir OBJLISTA4
FIN PROCEDIMIENTO
PROCEDIMIENTO MostrarListaN()
Declarar sElemento, nContador1 nContador1 <- 1
Crear OBJLISTA5 tipo LISTA ()
Mientras (nContador1 <= gnContador) hacer
sElemento <- OBJLISTA5.MOSTRARLISTAN(Array gsListaE[100], Array gnIzqda[100], Array gnDercha[100], gnPrimerE, gnControl)
Mostrar sElemento
nContador1 <- nContador1+1 Fin Mientras
Destruir OBJLISTA5
FIN PROCEDIMIENTO
PROCEDIMIENTO MostrarListaI()
Declarar sElemento, nContador1 nContador1 <- 1
Crear OBJLISTA6 tipo LISTA ()
Mientras (nContador1 <= gnContador) hacer
sElemento <- OBJLISTA6.MOSTRARLISTAI(Array gsListaE[100], Array gnIzqda[100], Array gnDercha[100], gnPrimerE, gnControl)
Mostrar sElemento
nContador1 <- nContador1+1 Fin Mientras
Destruir OBJLISTA5
FIN PROCEDIMIENTO
PAQUETE Clase LISTA ()
PROPIEDADES
Array gsListaE[100] Array gnIzqda[100] Array gnDercha[100] gnInic
gnVacio gnContador gnPrimerE gnControl nResultado1 sElemento1
METODOS
INSERTARELEMENTOINI(gsListaE[100], gnIzqda[100], gnDercha[100], gnInic, gnValor, gnContador, sElemento, nResultado1)
Declarar nAuxi
Si (gnInic=-1) entonces nAuxi <- gnValor
gnIzqda[nAuxi] <- (-1.1)
gsListaE[nAuxi] <- sElemento gnDercha[nAuxi] <- gnInic gnInic <- 0
gnContador <- gnContador+1 nResultado1 <- 1
Si no
nResultado1 <- 0 Fin Si
retornar nResultado1
INSERTARELEMENTOSDIF(gsListaE[100], gnIzqda[100], gnDercha[100], gnInic, gnValor, gnContador, sElemento, nPosic, nResultado1)
Declarar nAuxi
Si (gnInic <> -1 && gnContador <> 100) entonces Si (gsListaE[nPosic-1] == NULL)
nAuxi <- nPosic-1
gsListaE[nAuxi] <- sElemento gnDercha[gnValor] <- nPosic-1 gnDercha[nAuxi] <- (-1)
gnIzqda[nAuxi] <- gnValor gnValor <- nPosic-1
gnContador <- gnContador+1 nResultado1 <- 1
Si no
nResultado1 <- 0 Fin Si
Si no
nResultado1 <- 2 Fin Si
retornar nResultado1
ELIMINARELEMENTO(gsListaE[100], gnIzqda[100], gnDercha[100], sElemento, gnContador, nResultado1)
Declarar i, j, nAuxi i <- 0
j <- 0
Mientras (i <= 99) hacer
Si (gsListaE[i] = sElemento) entonces gsListaE[i] <- NULL
gnContador <- gnContador-1 Si (gnIzqda[i] = (-1.1)) entonces
Si no
Mientras (j <= 100) entonces
Si (gnDercha[j] = i) entonces gnDercha[j] <- gnDercha[i j <- 100
Fin Si j <- j+1 Fin Mientras
nResultado1 <- 1 i <- 100
Fin Si Si no
nResultado1 <- 0 Fin Si
i <- i+1 Fin Mientras
retornar nResultado1
CONTARELEMENTOS(gnContador, nResultado1) nResultado1 <- gnContador
retornar nResultado1
BUSCARELEMENTO(gsListaE[100], sElemento, nResultado1) Declarar i
Mientras (i <= 100) hacer
Si (gsListaE[i] = nElemento) entonces nResultado1 <- 1
i <- 100 Si no
nResultado1 <- 0 Fin si
i <- i+1 Fin Mientras
retornar nResultado1
MOSTRARLISTAN(gsListaE[100], Array gnIzqda[100], Array gnDercha[100], gnPrimerE, gnControl, sElemento1)
Declarar i, nAuxi i <- 0
Si (gnPrimerE == 0) entonces Mientras (i <= 100) hacer
Si (gnIzqda[i] == -1.1) entonces sElemento1 <- gsListaE[i] gnControl <- i
gnPrimerE <- gnPrimerE+1 i <- 100
Fin Si i <- i+1 Fin Mientras Si no
nAuxi <- gnDercha[gnControl] Si (nAuxi == -1)entonces
sElemento1 <- gsListaE[gnControl] Si no
sElemento1 <- gsListaE[nAuxi] gnControl <- gnDercha[nAuxi] Fin Si
Fin Si
retornar sElemento1
MOSTRARLISTAI(gsListaE[100], Array gnIzqda[100], Array gnDercha[100], gnPrimerE, gnControl, sElemento1)
Declarar i, nAuxi i <- 0
Si (gnPrimerE == 0) entonces Mientras (i <= 100) hacer
Si (gnDercha[i] == -1) entonces sElemento1 <- gsListaE[i] gnControl <- i
gnPrimerE <- gnPrimerE+1 i <- 100
Fin Si i <- i+1 Fin Mientras Si no
nAuxi <- gnIzqda[gnControl] Si (nAuxi == -1.1)entonces
sElemento1 <- gsListaE[gnControl] Si no
sElemento1 <- gsListaE[nAuxi] gnControl <- gnIzqda[nAuxi] Fin Si
Fin Si
retornar sElemento1