• No se han encontrado resultados

Listas

N/A
N/A
Protected

Academic year: 2020

Share "Listas"

Copied!
46
0
0

Texto completo

(1)

ALGORITMOS Y ESTRUCTURA

DE DATOS

(2)

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és

(3)

TIPOS 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

(4)

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.

(5)

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

(6)
(7)

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.

(8)

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

(9)

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.

(10)
(11)

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

(12)

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”

(13)

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

(14)

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

(15)

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

(16)

PROCEDIMIENTO ContarElementos()

Declarar nResultado

Crear OBJLISTA3 tipo LISTA ()

nResultado <- OBJLISTA3.CONTARELEMENTOS(gnContador) Mostrar "En la lista hay: ",nResultado," ","elementos"

Destruir OBJLISTA3

FIN PROCEDIMIENTO

(17)

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

(18)

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

(19)

PAQUETE Clase LISTA ()

PROPIEDADES

Array gnLista[100][3] gnInic

gnVacio gnContador gnPrimerE gnControl nResultado1 nElemento1

METODOS

(20)

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

(21)

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

(22)

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

(23)

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

(24)

CONTARELEMENTOS(gnContador, nResultado1) nResultado1 <- gnContador

retornar nResultado1

(25)

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

(26)

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

(27)
(28)

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

(29)

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"

(30)

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

(31)

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

(32)

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

(33)

PROCEDIMIENTO ContarElementos()

Declarar nResultado

Crear OBJLISTA3 tipo LISTA ()

nResultado <- OBJLISTA3.CONTARELEMENTOS(gnContador) Mostrar "En la lista hay: ",nResultado," ","elementos"

Destruir OBJLISTA3

FIN PROCEDIMIENTO

(34)

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

(35)

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

(36)

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

(37)

PAQUETE Clase LISTA ()

PROPIEDADES

Array gsListaE[100] Array gnIzqda[100] Array gnDercha[100] gnInic

gnVacio gnContador gnPrimerE gnControl nResultado1 sElemento1

METODOS

(38)

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

(39)

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

(40)

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

(41)

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

(42)

CONTARELEMENTOS(gnContador, nResultado1) nResultado1 <- gnContador

retornar nResultado1

(43)

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

(44)

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

(45)

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

(46)

Referencias

Documento similar

Aunque el 97% de los 100 estudios originales presentaban resultados estadísticamente significativos (p&lt;0,05), entre los repetidos solo en el 47% se pudieron replicar os

When we consider the subcritical case, that is, 0 &lt; &lt; 1 and 1 &lt; p &lt; 2  s 1 D N N C2s 2s , we can show that for 0 &lt;  small enough the problem .D ; ;p / has indeed

[r]

[r]

Se analiza así el compromiso de jóvenes y mujeres y las propuestas de emancipación presentes en la organización juvenil del Partido Socialista Obrero Español, particularmente entre

colección de lectura.s fantá.stica.s dirigida por Jorge Luis Borge.s.. el espacio de prescrvació11 ele la memoria. esLán emparentadas estrechamente. Borges sal

La conclusión que extrae Moeschler 9 en la revisión de varios estudios es que aunque la RM es una técnica útil en el diagnóstico de la DI/RGD, no es un estudio obligatorio en

 The dataset can be utilized to address sensor drift, sensor failure, system calibration, sensor poisoning, among other common challenges in chemical sensing [1 – 4]..  It can also