Está en la página 1de 130

http://campus.utelesup.com e-mail: campus.utelesup.

com
Universidad Privada TELESUP

ÍNDICE DE CONTENIDO
I. PREFACIO 3
II. DESARROLLO DE LOS CONTENIDOS 04 -
UNIDAD DE APRENDIZAJE 1: INTRODUCCIÓN A LA ESTRUCTURA DE DATOS 04–40
1. Introducción 05
a. Presentación y contextualización 05
b. Competencia (logro) 05
c. Capacidades 05
d. Actitudes 05
e. Ideas básicas y contenido 05
2. Desarrollo de los temas 06 – 35
a. Tema 01: Algorítmica y estructura de datos. 06
b. Tema 02: Estructura condicional. 14
c. Tema 03: Estructuras repetitivas. 22
d. Tema 04: Clasificación de las estructuras de los datos. 29
3. Lecturas recomendadas 36
4. Actividades y ejercicios 36
5. Autoevaluación 37
6. Resumen 39
UNIDAD DE APRENDIZAJE 2: OPERACIONES CON ARREGLOS UNIDIMENSIONALES 40-69
1. Introducción 41
a. Presentación y contextualización 41
b. Competencia (logro) 41
c. Capacidades 41
d. Actitudes 41
e. Ideas básicas y contenido 41
2. Desarrollo de los temas 42-64
a. Tema 01: Operaciones algorítmicas con arreglos unidimensionales 43
b. Tema 02: Métodos de recolección de datos 49
c. Tema 03: Operaciones con vectores 53
b. Tema 04: Recursividad 59
3. Lecturas recomendadas 64
4. Actividades y ejercicios 64
5. Autoevaluación 65
6. Resumen 67
UNIDAD DE APRENDIZAJE 3: METODOS DE ORDENACION Y BUSQUEDA 68-97
1. Introducción 69
a. Presentación y contextualización 70
b. Competencia (logro) 70
c. Capacidades 70
d. Actitudes 70
e. Ideas básicas y contenido 70
2. Desarrollo de los temas 71-95
a. Tema 01: Métodos de ordenación 71
b. Tema 02: Métodos de ordenación por selección 79
c. Tema 03: Métodos de búsqueda 83
d. Tema 04: Operaciones con arreglos multidimensionales 88
3. Lecturas recomendadas 94
4. Actividades y ejercicios 94
5. Autoevaluación 94
6. Resumen 97
UNIDAD DE APRENDIZAJE 4: INTRODUCCIÓN A LAS ESTRUCTURAS DE DATOS DINÁMICAS 98-133
1. Introducción 99
a. Presentación y contextualización 99
b. Competencia 99
c. Capacidades 99
d. Actitudes 99
e. Ideas básicas y contenido 99
2. Desarrollo de los temas 100-131
a. Tema 01: Lista simple. Lista doblemente enlazada 101
b. Tema 02: Pilas y colas 107
c. Tema 03: Árboles 113
d. Tema 04: Grafos 119
3. Lecturas recomendadas 125
4. Actividades y ejercicios 125
5. Autoevaluación 126
6. Resumen 128
III. GLOSARIO 129
IV. FUENTES DE INFORMACIÓN 129
V. SOLUCIONARIO 130

I. PREFACIO

Algorítmica y Estructura de Datos Página 2


Universidad Privada TELESUP

El curso es de naturaleza teórico-práctico y pertenece al área de formación profesional,


capacita e introduce al estudiante en los conceptos y elementos fundamentales para
facilitar la introducción a la programación y ejercitar el razonamiento, conociendo las
técnicas básicas empleadas durante el proceso de generación intermedio, optimización
y generación de código ampliando las técnicas de programación.

Comprende cuatro unidades de aprendizaje: I. Introducción a las estructuras de datos.


II. Operaciones con arreglos unidimensionales III. Métodos de ordenación y búsqueda
y IV. Introducción a las estructuras dinámicas de datos.

ESTRUCTURA DE LOS CONTENIDOS

UNIDAD DE APRENDIZAJE I: INTRODUCCION A LA ESTRUCTURA DE DATOS

Algorítmica y Estructura de Clasificación de las


Estructura condicional Estructuras repetitivas
datos estructuras de datos

UNIDAD DE APRENDIZAJE II: OPERACIONES CON ARREGLOS UNIDIMENSIONALES

Operaciones algorítmicas con Métodos de Recolección de


Operaciones con vectores Recursividad
arreglos unidimensionales datos

UNIDAD DE APRENDIZA III: METODOS DE ORDENACIÓN Y BUSQUEDA


Métodos de
Operaciones con arreglos
Métodos de ordenación ordenamiento por Métodos de búsqueda
multidimensionales
selección

UNIDAD DE APRENDIZAJE IV: INTRODUCCIÓN A LAS ESTRUCTURAS DE DATOS


DINÁMICAS
Lista Simple. Lista
Pilas y colas Árboles Grafos
Doblemente Enlazadas

La competencia que el alumno debe lograr al final de la asignatura es: aplicar


habilidades básicas y complejas para el manejo de las técnicas y métodos de la
programación para resolución de problemas. Manejar técnicas de diagramación lógica
de algoritmo y codificación y estructura de un programa.

Algorítmica y Estructura de Datos Página 3


Universidad Privada TELESUP
UNIDAD DE
APRENDIZAJE

INTRODUCCIÓN A LA ESTRUCTURA DE DATOS

COMPETENCIA:

Al finalizar esta unidad usted será capaz de


“Conocer e identificar la terminología para construir
y resolver algoritmos con las estructuras de datos
más adecuadas”.
Algorítmica y Estructura de Datos Página 4
Universidad Privada TELESUP

1. INTRODUCCIÓN

a) Presentación y contextualización

El alumno desarrolla una actitud analítica y crítica que le permita valorar y


conocer la importancia para la construcción de algoritmos y conocer las
estructuras de datos.

b) Competencias

Conoce e identifica la terminología para construir y resolver algoritmos con las


estructuras de datos más adecuadas.

c) Capacidades

 Analiza y critica la importancia de la algorítmica y la estructura de datos


dentro del mundo actual.
 Diferencia los distintos casos de uso y fundamentos de programación.
Comprende la diferencia entre las diferentes estructuras condicionales.
 Diferencia los distintos casos de uso y fundamentos de programación.
Comprende la diferencia entre las estructuras repetitivas.
 Analiza y critica las técnicas de estudio de las estructuras de datos.

d) Actitudes

 Desarrolla una actitud emprendedora mediante la toma de iniciativas.


 Actúa con responsabilidad personal, al cumplir con los horarios
establecidos.
 Respeto a las normas de convivencia.
 Cumple con la presentación de los trabajos encomendados de manera
individual y en equipo.

e) Presentación de ideas básicas y contenido esenciales de la Unidad

La unidad de Aprendizaje 1: Introducción a Microsoft Excel, comprende el


desarrollo de los siguientes temas:

 Algorítmica y Estructura de datos.


 Estructura condicional.
 Estructura repetitiva.
 Clasificación de las estructuras de datos.

Algorítmica y Estructura de Datos Página 5


Universidad Privada TELESUP

TEMA

Algorítmica y
Estructura de
Datos

Algorítmica y Estructura de Datos Página 6


Universidad Privada TELESUP

2. DESARROLLO DE CONTENIDOS

Tema 1: Algorítmica y Estructura de datos.

¿QUÉ ES UN ALGORITMO?

Un algoritmo es una serie de pasos (métodos) organizados que permite dar solución a
un problema específico.

La palabra algoritmo se deriva de la traducción al latín de la palabra árabe


alkhowarizmi, nombre de un matemático y astrónomo árabe que escribió un tratado
sobre manipulación de números y ecuaciones en el siglo IX.

TIPOS DE ALGORITMOS

Cualitativos: Son aquellos que


describen los pasos utilizando
palabras.

Cuantitativos: Son aquellos que


utilizan cálculos numéricos para
definir los pasos del proceso.

LENGUAJES ALGORÍTMICOS

Indican una serie de símbolos y reglas que se utilizan para describir de manera explícita
un proceso. Pueden ser:

Gráficos o Diagrama de Flujo: Es la representación gráfica de las operaciones


que realiza un algoritmo.

No Gráficos o Pseudocódigo: Es la representación en forma descriptiva de las


operaciones que debe realizar un algoritmo.

Algorítmica y Estructura de Datos Página 7


Universidad Privada TELESUP

CARACTERÍSTICAS DE UN ALGORITMO

 Finito: Si se sigue un algoritmo, se debe terminar en un número finito de pasos.


 Definible: Un algoritmo debe ser preciso e indicar el orden de realización de
cada paso. Si se sigue un algoritmo dos veces, se debe obtener el mismo
resultado cada vez.
 Entradas: El algoritmo debe tener cero o más entradas, es decir cantidades
dadas antes de empezar.
 Salidas: el algoritmo tiene una o más salidas en relación con las entradas.

¿QUÉ SON LAS ESTRUCTURAS DE DATOS?

Es una colección datos que pueden ser caracterizados por su organización y


las operaciones que se definen en ella.
Ejemplo de Estructura de datos: Arreglos, Archivos, Cadenas y Listas.

CLASIFICACIÓN DE LAS ESTRUCTURAS DE DATOS

ESTÁTICAS: Su tamaño en memoria es


fijo. Ejemplo, arreglos, conjuntos,
cadenas.
DINÁMICAS: Su tamaño en memoria es
variable. Ejemplo, pilas, colas, listas,
árboles, grafos, etc. Estas a su vez se
dividen en:
LINEALES: Son aquellas estructuras
donde los datos se almacenan en zonas
continuas (sucesivas o adyacentes), una
detrás de otra. Ejemplo: pilas, colas,
listas.
NO LINEALES: Son aquellas estructuras
donde los datos no se encuentra en
forma continua, es decir hay “bifurcación”.
Ejemplo árboles, grafos.

Algorítmica y Estructura de Datos Página 8


Universidad Privada TELESUP

METODOLOGÍA PARA CONSTRUIR UN ALGORITMO

Para que la labor de programación sea una tarea fácil debemos seguir una
metodología la cual comprende los siguientes pasos:

a) Definición del problema (Enunciado)


b) Definición de la solución (Análisis del problema)
c) Diseño del algoritmo
d) Desarrollo del problema (Codificación)
e) Depuración y pruebas (Ejecución – Evaluación de Resultados)
f) Documentación

DESARROLLO DE UN CASO PRÁCTICO

I) DEFINICION DEL PROBLEMA: Se debe establecer claramente el


enunciado del problema que se está planteando.
Ejemplo: calcular el área de un rectángulo. En función a la siguiente
fórmula:
a=(b*h)

II) DEFINICION DE LA SOLUCIÓN: Se debe identificar claramente lo


siguiente:

a. Los datos que deben ser ingresados para dar solución al problema
b. Establecer exactamente los procesos a llevarse a cabo a fin de dar
con la solución del problema.
c. Determinar con exactitud qué valores son los que se debe visualizar
como resultado o solución del problema, se debe satisfacer los
objetivos del problema.

Ejemplo:

OBJETIVO DEL PROBLEMA: CALCULAR EL ÁREA DE UN RECTÁNGULO

Entrada de Datos Proceso Resultado o Salida

Altura (h) área (a)


a=b*h
Base (b)

Algorítmica y Estructura de Datos Página 9


Universidad Privada TELESUP

I) DISEÑO DEL ALGORITMO

Definidos exactamente los procesos tendremos que programar y conocidos los datos
que estarán siendo entregados y la información que debemos generar como
resultado del proceso, estamos en condiciones de diseñar nuestra solución.

Para construir algoritmos se utilizan metodologías como: El Diagrama de Flujo y


Pseudocódigos.

Diagrama De Flujo: Metodología gráfica que permite construir


visualmente el recorrido del flujo de un programa y estructurar el algoritmo
para una solución determinada.

Simbología usada en un Diagrama de Flujo:

Símbolo Lo que significa

Inicio o fin de un Diagrama de Flujo.

Entrada o Salida: Representa una operación de


entrada de datos o salida de información.

Proceso: Representa una operación de


procesamiento de datos.

Decisión: Bifurca el flujo del algoritmo, dependiendo


del resultado de la expresión lógica.

Conector: Este símbolo se usa para conectar entre sí


dos o más puntos relacionados al diagrama de flujo.

Dirección: Las flechas indican la dirección del flujo de


control en la secuencia del algoritmo.

Algorítmica y Estructura de Datos Página 10


Universidad Privada TELESUP

Ejemplo de un Diagrama de flujo:


El siguiente diagrama de flujo constituye el algoritmo que da solución al caso propuesto.

INICIO

Leer:
b,h

a=b*h

Escribir
a

FIN

PSEUDOCÓDIGO:

Es un lenguaje de especificación (descripción) de algoritmos.


Generalmente se escribe en el idioma natural del usuario,
es muy semejante al código fuente de un programa.
Se considera un primer borrador, dado que el pseudocódigo
tiene que traducirse posteriormente a un lenguaje de
programación. El pseudocódigo no puede ser ejecutado por el
computador.

Ejemplo de un Pseudocódigo: (Para el desarrollo del caso propuesto)

INICIO
Leer b, h
a=b*h
Escribir
a
FIN

Algorítmica y Estructura de Datos Página 11


Universidad Privada TELESUP

II) DESARROLLO DEL PROBLEMA (Codificación):


Consiste en la codificación del programa. Partiendo del algoritmo desarrollado en
el paso anterior, para este fin se deberá utilizar un lenguaje de programación, para
nuestro caso Java.

Codificación en Java del algoritmo anterior

importjavax.swing.*;

public class Calculadora {

public static void main(String args[])

//DECLARACION DE VARIABLES

intb,h,a;

//INGRESO DE DATOS-Estos datos son capturados como String

String bb=JOptionPane.showInputDialog("Ingresa base : ");

Stringhh=JOptionPane.showInputDialog("Ingresa altura : ");

//LOS DATOS RECEPCIONADOS DEBERAN SER CONVERTIDOS Al TIPO QUE


CORRESPONDEN

b=Integer.parseInt(bb);

h=Integer.parseInt(hh);

//PROCESO DE DATOS

a=b*h;

//SALIDA DE INFORMACION

System.out.println("El área es: " + a);

Algorítmica y Estructura de Datos Página 12


Universidad Privada TELESUP

Nota: String no es un tipo de dato primitivo, sino corresponde a una clase de Java
desde la cual instancia (es decir se crea) todos los tipos de cadenas de texto. Por
otra parte, Java sí hace diferencia entre las mayúsculas y minúsculas, por lo que
debemos ser cuidadosos al escribir el código fuente, por lo general los nombres de
las clases siempre empiezan con mayúsculas.

III) DEPURACION Y PRUEBA: Consiste en la ejecución, depuración y solución de


errores. Los errores que podrían presentarse pueden ser:

Errores de Sintaxis: Son errores de escritura de código, el compilador no los puede


interpretar y por lo tanto cuando ejecutamos el programa los señala como un error
indicándose la línea y elemento desconocidos, mientras no arreglemos todos estos
errores el programa no podrá ejecutarse.

Error de Ejecución: El programa puede ejecutarse, pero por un mal manejo del
programa o un ingreso indebido, el programa colapsa o cierra repentinamente, estos
tipos de errores deben evitarse y debe ser el programa quien pueda controlarlos.

Error de Lógica o procedimiento: Este tipo de error es percibido cuando nos


damos cuenta que los resultados de los procesos no son los correctos.

Todos estos tipos de errores deben examinarse antes de dar por concluido el
proceso de desarrollo del programa. De presentarse un error de lógica se debe
realizar un feedback (Retroalimentación) y debemos volver al PASO Nro. 1

IV) DOCUMENTACION:

En esta etapa debe recopilarse toda la documentación generada en las etapas


anteriores, la cual va a servir como base para la elaboración del manual técnico.

Algorítmica y Estructura de Datos Página 13


Universidad Privada TELESUP

TEMA

Estructura
Condicional

Algorítmica y Estructura de Datos Página 14


Universidad Privada TELESUP

Tema 2: Estructura Condicional

Una instrucción de decisión o selección evalúa una condición y en función del resultado
de esa condición se bifurcará a un determinado punto.

Ejemplo:
- Deseo ir al cine.
Si van mis amigos entonces
Iré al cine
Sino
Me quedo en casa

Clasificación de las Estructuras Selectivas:


Estructura Selectiva Simple
Estructura Selectiva Doble
Estructura Selectiva Anidada
Estructura Selectiva Múltiple

A. ESTRUCTURA SELECTIVA SI SIMPLE

DEFINICIÓN: Es una estructura que evalúa


una expresión lógica y dependiendo del
resultado escoge entre realizar uno u otro
bloque de código.

En nuestra vida cotidiana a diario tomamos


una serie de decisiones y todas tienen que
ver con: evaluar una premisa y de acuerdo a
su resultado podemos tomar una u otra
decisión.

Algorítmica y Estructura de Datos Página 15


Universidad Privada TELESUP

SU REPRESENTACIÓN EN EL DIAGRAMA DE FLUJO:

SU REPRESENTACIÓN EN EL PSEUDOCÓDIGO:

Si <condición> entonces
<acción 1>
<acción 2>

<acción n>
fin si

SU REPRESENTACIÓN EN LA CODIFICACION:

If monto>=300
{ d=monto*0.30; }

else
{ d=0; }

Algorítmica y Estructura de Datos Página 16


Universidad Privada TELESUP

B. ESTRUCTURA SELECTIVA SI DOBLE

Este tipo de estructura presenta de igual forma una condición o (expresión lógica), de
ser verdadera esta condición, se ejecuta un bloque de instrucciones y en caso
contrario se ejecuta otro bloque distinto.
Se utiliza en la solución de problemas donde las alternativas se bifurcan en dos
posibilidades dependiendo de la condición evaluada.

SU REPRESENTACIÓN EN EL DIAGRAMA DE FLUJO:

SU REPRESENTACIÓN EN PSEUDOCÓDIGO:
Si <condición> entonces
<acción a>
<acción b>
sino
<acción x>
<acción y>
fin si

SU REPRESENTACIÓN EN LA CODIFICACIÓN:
if<condición>
{ <acción a>;
<acción b>; }
else
{ <acción x>;
<acción y>; }

Algorítmica y Estructura de Datos Página 17


Universidad Privada TELESUP

C. ESTRUCTURA SI ANIDADA

Este tipo de estructura está formada por una serie de estructuras selectivas que se
encuentran inmersas unas dentro de otras. Se utiliza para establecer una serie de
condiciones jerárquicas desde las más genéricas hasta las más específicas, sino se
cumplen las primeras condiciones, no se evalúan las siguientes.

SU REPRESENTACIÓN EN EL DIAGRAMA DE FLUJO:

SU REPRESENTACIÓN EN EL PSEUDOCÓDIGO:

Si <cond1> entonces
<acción a> Si Cond1 es verdadero se realiza la acción a y la
<acción b> acción b y luego el flujo del programa sale de la
Sino estructura selectiva.
Si <cond2> entonces
<acción c> Si no se cumple la Cond1, el flujo del programa se
dirigirá a evaluar la Cond2, si ésta se cumple sólo se
<acción d>
realizará la acción c y la acción d y luego el flujo del
sino
programa saldrá de la estructura selectiva.
Si <cond3> entonces
<acción e> SiCond1 y la Cond2 no se cumple, el flujo del
<acción f> programa se dirigirá a evaluar la Cond3, si ésta se
sino cumple sólo se realizará la acción e y acción f y luego
<acción g> el flujo del programa saldrá de la estructura selectiva.
<acción h>
En el caso de no cumplirse Cond1, Cond2 y Cond3,
fin si
sólo en ese caso se realizará la acción g y la acción h.
fin si
fin si

Algorítmica y Estructura de Datos Página 18


Universidad Privada TELESUP

SU REPRESENTACIÓN EN LA CODIFICACIÓN:

If monto>=1000
{
d=monto*0.30;
}
else
{
If (monto<1000 &&monto>=500)
{ d=monto*0.20;
}
else
{ If (monto<500 &&monto>=200)
{ d=monto*0.10; }
else
{ d=0; }
}
}

El mismo caso anterior se puede representar de un modo más simplificado usando el


elseif:

//Condicioninicial
If monto>=1000
{ d=monto*0.30; }
else if (monto<1000 &&monto>=500)
//Segunda condición sino se cumple el anterior
{ d=monto*0.20; }
else If (monto<500 &&monto>=200)
//Tercera condición sino se cumplen las anteriores
{ d=monto*0.10; }
else
//En el caso de cumplirse ninguna de las anteriores
{ d=0; }

Algorítmica y Estructura de Datos Página 19


Universidad Privada TELESUP

D. ESTRUCTURA SELECTIVA MULTIPLES

La estructura evalúa una expresión que podrá tomar n valores distintos,


1,2,3,4,…,n. Según que elija uno de estos valores en la condición, se realizará una
de las n acciones, el flujo del algoritmo seguirá un determinado camino entre los n
posibles.

REPRESENTACIÓN EN EL DIAGRAMA DE FLUJO

Condición

1 2 3 4 n

Acción Acción Acción Acción Acción

S1 S2 S3 S4 Sn

SU REPRESENTACIÓN EN EL PSEUDOCÓDIGO:

caso_deE hacer Al ingresar a esta estructura se evaluará el


E1: acción S11 valor de E, si E vale E1, entonces se
acción S12 realizarán las acciones S11 y S12 y luego el
flujo saldrá de la estructura.
E2: acción S21
acción S22 Si E vale E2, entonces se realizarán las
acciones S21 y S22 y luego el flujo saldrá de
la estructura.
E3: acción S31
acción S32 Si E vale E2, entonces se realizarán las
sino acciones S21 y S22 y luego el flujo saldrá de
acción S41 la estructura.
acción S42
fin_hacer Si no se cumplieron las alternativas
anteriores, entonces se realizará las acciones
S41 y S42

Algorítmica y Estructura de Datos Página 20


Universidad Privada TELESUP

SU PRESENTACIÓN EN LA CODIFICACION

switch(variable)
{ case(valor1) : {

//bloque de instrucciones cuando el valor de variable es 1


} break;
case(valor2) : {
//bloque de instrucciones cuando el valor de variable es 2
} break;
default :
{
//bloque de instrucciones cuando el valor de variable
//no es ninguno de los valores anteriores
} break;
}

EJEMPLO: Realizar un algoritmo que lea el número que representa el día de la


semana y diga que día es, teniendo en cuenta Lunes=1, Martes 2…,Domingo=7

Case_dediahacer

1: escribir “Lunes”

2: escribir “Martes”

3: escribir “Miércoles”

4: escribir “Jueves”

5: escribir “Viernes”

6: escribir “Sábado”

7: escribir “Domingo”

Fin. Hacer

Algorítmica y Estructura de Datos Página 21


Universidad Privada TELESUP

TEMA

Estructuras
Repetitivas

Algorítmica y Estructura de Datos Página 22


Universidad Privada TELESUP

Tema 3: Estructuras Repetitivas

PROGRAMACION MODULAR

Los subproblemas o módulos se diseñan con subprogramas, que a su vez se


clasifican en procedimientos y funciones. Los procedimientos y las funciones
son unidades de programas diseñados para ejecutar una tarea específica. El
proceso de descomposición de un problema en módulos se conoce como
modulación y a la programación relativa a ellos, programación modular.

ESTRUCTURA REPETITIVA

En un algoritmo es necesario repetir una o varias acciones, un número determinado


de veces. Las estructuras que repiten una secuencia de instrucciones, un número
determinado de veces, se denominan bucles, y se llama iteración al hecho de repetir
la ejecución de una secuencia de acciones.

REPRESENTACIÓN DE LA ESTRUCTURA (FOR) EN EL DIAGRAMA DE FLUJO

Esta estructura permite repetir


el bucle de instrucciones, de 1
PARA I de 1 a N
a N veces, luego de cumplirse
las n vueltas, se procederá a
ejecutarse las instrucciones
Instrucción A que se encuentran después
del bucle.

Instrucción B

Instrucción N La variable I va
incrementando sus valores
automáticamente, siendo
estos: 1,2,3,… N

Algorítmica y Estructura de Datos Página 23


Universidad Privada TELESUP

PARA I de N a 1 Esta estructura permite repetir el bucle de


instrucciones, de N a 1 veces, luego de
cumplirse la n-sima vuelta, se procederá
Instrucción A a ejecutarse las instrucciones que se
encuentran después del bucle.

Instrucción B La variable I va decrementado sus


valores automáticamente, siendo estos:
N,…., 3,2,1
Instrucción N

PARA I de 2 a N
paso 2

Instrucción A
Bucle

Instrucción B

Esta estructura permite repetir


el bucle de instrucciones, de 2
a N veces, donde en cada Instrucción N
vuelta el valor de I se irá
incrementando de 2 en 2.

La variable I va decreciendo
sus valores automáticamente,
siendo estos: 2, 4, 6, 8, … N

Algorítmica y Estructura de Datos Página 24


Universidad Privada TELESUP

SU REPRESENTACION EN PSEUDOCODIGO

Para I de 1 a N veces Para I de N a 1 veces


Instrucción A Instrucción A
Instrucción B
Instrucción B
:
Instrucción N :
Fin Para
Instrucción N
Instrucción X
Instrucción Y Fin Para

Instrucción X
ESTRUCTURA REPETITIVA while
Instrucción Y

Cuando se ejecuta la instrucción Mientras


la primera cosa que sucede es que se
evalúa la condición (una expresión
DEFINICIÓN lógica). Si se evalúa falsa, ninguna
La estructura repetitiva acción se toma y el programa prosigue
mientras (en inglés while o do con las instrucciones que se encuentran
while: hacer mientras) es fuera del bucle. Si la expresión es
aquella en que el cuerpo del verdadera, entonces se ejecuta el cuerpo
bucle se repite mientras se del bucle, después de lo cual se evalúa
cumple una determinada de nuevo la expresión lógica. Este
aaaaaaccacondición. proceso se repite una y otra vez mientras
la expresión lógica (condición) sea
verdadera.

Este tipo de estructura es utilizada cuando se necesita la


estructura repetitiva, mas no se conoce con exactitud la
cantidad de iteraciones del bucle, pues la cantidad de
repeticiones dependerá de si se sigue cumpliendo la condición
principal del bucle.

Algorítmica y Estructura de Datos Página 25


Universidad Privada TELESUP

REPRESENTACIÓN EN EL DIAGRAMA DE FLUJO

SU
RE
PR No
Condición
ES
EN
TA
CI
ÓN
EN
SInstrucción A Instrucción X

EL
PS i Instrucción Y
EU Instrucción B
DO

Instrucción N
DI
GO

Mientras <Condición>
Instrucción A
Instrucción B
.
.
.
Instrucción N

Fin Mientras
Instrucción X
Instrucción Y

SU REPRESENTACIÓN EN LA CODIFICACIÓN

while (condición)
{ instrucción A;
instrucción B;

instrucción N;
}
Instrucción X;
Instrucción Y;

Algorítmica y Estructura de Datos Página 26


Universidad Privada TELESUP

CONTADORES Y ACUMULADORES

CONTADORES

Los procesos repetitivos son la base del uso de los computadores. En estos
procesos se necesita normalmente contar los sucesos o acciones internas del
bucle. Una manera de controlar un bucle es mediante un contador. Un contador
es una variable cuyo valor se incrementa o decrece en una cantidad constante
en cada iteración.

INICIO

La variable contador
se inicializa
CONT=1

NO Muestra el valor de
CONT<=5
CONT

SI

Mostrar
Cuerpo del Bucle CONT

CONT=CONT+1
FIN

La variable contador se
incrementa en 1 por cada
vuelta.

Algorítmica y Estructura de Datos Página 27


Universidad Privada TELESUP

ACUMULADOR

Un acumulador o totalizador es una variable cuya misión es almacenar


cantidades variables resultantes de sumas sucesivas. Realiza la misma
función que un contador, con la diferencia de que el incremento o decremento
de cada suma es variable en lugar de constante, como en el caso del
contador.
Se representa por la instrucción S=S+N, donde N es una variable y no una
constante.

INICIO

CONT=1

SUMA=0

NO
CONT<=5

SI

Leer Valor
FIN

CONT=CONT+1

SUMA=SUMA+Valor

Algorítmica y Estructura de Datos Página 28


Universidad Privada TELESUP

TEMA

Clasificación de
las Estructuras
de los Datos

Algorítmica y Estructura de Datos Página 29


Universidad Privada TELESUP

Tema 4: Clasificación de las Estructuras de Datos

INTRODUCCIÓN

Todas las variables que se han considerado


hasta el momento son de tipo simple. Una
variable de tipo simple consiste de una sola
caja de memoria y sólo puede contener un
valor cada vez. Una variable de tipo
estructurado consiste en toda una colección
de casillas de memoria.

Los tipos de datos estudiados: entero, real, alfabético son considerados como datos de
tipo simple, puesto que una variable que se define con alguno de estos tipos sólo
puede almacenar un valor a la vez, es decir existe una relación de uno a uno entre la
variable y el número de elementos (valores) que es capaz de almacenar.

En cambio un dato de tipo estructurado, como el arreglo, puede almacenar más de un


elemento (valor) a la vez, con la condición de que todos los elementos deben ser del
mismo tipo, es decir, que se puede tener un conjunto de datos enteros, reales, etc.

CLASIFICACION DE LOS DATOS SIMPLES

Datos Numéricos: Permiten representar valores escalares de forma numérica, esto


incluye a los números enteros y reales. Estos tipos de datos permiten realizar
operaciones aritméticas comunes.

Datos Lógicos: Son aquellos que solo pueden tener dos valores (cierto o falso) ya
que representan el resultado de una comparación entre otros datos (numéricos o
alfanuméricos).

Algorítmica y Estructura de Datos Página 30


Universidad Privada TELESUP

Datos Alfanuméricos (String): Son una secuencia de caracteres alfanuméricos que


permiten representar valores identificables de forma descriptiva, esto incluye nombres
de personas, direcciones, etc. Es posible representar números como alfanuméricos,
pero estos pierden su propiedad matemática, es decir no es posible hacer operaciones
con ellos. Este tipo de datos se representan encerrados entre comillas.

DEFINICION DE EXPRESIÓN: Las expresiones son combinaciones de constantes,


variables, símbolos de operación, paréntesis y nombres de funciones especiales.

DEFINICION DE OPERADOR Y SUS TIPOS

Operadores: Son elementos que relacionan de forma diferente, los valores de una o
más variables y/o constantes. Los operadores permiten manipular valores.

TIPOS DE OPERADORES

Relaciónales: Compara estos valores entre sí y esta comparación produce un


resultado de certeza o falsedad (verdadero o falso).

Lógicos: Operadores que se utiliza para establecer relaciones entre valores lógicos.
Los operadores relaciónales comparan valores del mismo tipo (numéricos o cadenas).
Tenemos los siguientes operadores

Y AND

O OR

NO NOT

DEFINICIÓN DE CONSTANTE: Una constante es un dato numérico o


alfanumérico que no cambia durante la ejecución del programa.

Algorítmica y Estructura de Datos Página 31


Universidad Privada TELESUP

DEFINICIÓN DE VARIABLE

Es un espacio en la memoria de la computadora que permite almacenar


temporalmente un dato durante la ejecución de un proceso, su contenido puede
cambiar durante la ejecución del programa. Para poder reconocer una variable en la
memoria de la computadora, es necesario darle un nombre con el cual podamos
identificarlo dentro de un algoritmo.

CLASIFICACION DE LAS VARIABLES POR SU CONTENIDO

Variables Numéricas: Son aquellas en las cuales se almacenan valores numéricos,


positivos o negativos, almacenan números del 0 al 9, signos (+ y -) y el punto decimal.

Ejemplo: iva=0.15 pi=3.1416 costo=2500

Variables Lógicas: Son aquellas que solo pueden tener dos valores
(TRUE o FALSE O SUS EQUIVALENTES SI - NO), estos representan
el resultado de una comparación entre otros datos.

Variables Alfanuméricas: Están formadas por caracteres


alfanuméricos (letras, números y caracteres especiales).

Ejemplo:letra=’a’ apellido=’lopez’ direccion=’Av. Libertad #190’

Algorítmica y Estructura de Datos Página 32


Universidad Privada TELESUP

CLASIFICACIÓN DE LAS VARIABLES POR SU USO

Variables de Trabajo: Variables que reciben el resultado de una operación


matemática completa y que se usan normalmente dentro de un programa.
Ejemplo: suma = a + b / c

Contadores: Se utilizan para llevar el control del número de ocasiones en que se


realiza una operación o se cumple una condición. Con los incrementos
generalmente de uno en uno. (Su uso más común es dentro de bucles).

Acumuladores: Forma que toma una variable y que sirve para llevar la suma
acumulativa de una serie de valores que se van leyendo o calculando
progresivamente (a=a+3 en un ciclo desde por ejemplo que es donde más se
usan).

DATOS ESTRUCTURADOS:

Estructura de Datos es una colección de datos que se caracteriza por su


organización y las operaciones que se definen en ella. Los datos de tipo estándar
pueden ser organizados en diferentes estructuras de datos: estáticas y dinámicas.

CLASIFICACIÓN DE LAS ESTRUCTURAS DE DATOS

ESTRUCTURA DE DATOS ESTÁTICAS: Es aquella en la que el espacio


ocupado en memoria se define en tiempo de compilación y no puede ser
modificado durante la ejecución del programa. Corresponde a este tipo:

a) Arreglos Unidimensionales (arreglos)


b) Arreglos Multidimensionales (matrices)

Algorítmica y Estructura de Datos Página 33


Universidad Privada TELESUP

ESTRUCTURAS DE DATOS DINÁMICAS:


Son aquellas en las que el espacio ocupado
en memoria puede ser modificado en tiempo
de ejecución. Corresponden a este tipo:

1. Listas Enlazadas
2. Pilas
3. Colas
4. Árboles
5. Conjuntos
6. Grafos
7. Tablas Hash

ARREGLOS (ARRAYS)

Un Arreglo es una estructura de datos que almacena bajo el mismo nombre (variable)
a una colección de datos del mismo tipo.

Los arreglos se caracterizan por ser:

Finita: Todo arreglo tiene un límite; se debe determinar cuál será el número máximo
de elementos que podrán formar parte del arreglo.

Homogénea: Todos los elementos del arreglo deben ser del mismo tipo.

Ordenada: Se puede determinar cuál es el primer elemento, el segundo, el tercero,...


y el n-ésimo elemento

Algorítmica y Estructura de Datos Página 34


Universidad Privada TELESUP

EDAD 12 18 22 25 23

ÍNDICE 0 1 2 3 4

Llenado de un Vector

Podemos observar un arreglo unidimensional con las siguientes características:

- Longitud: 5 Elementos
- Primera posición: 0
- Última posición: Longitud-1
- Nombre del Arreglo: EDAD

Asignar datos a las posiciones de un arreglo: Obtener datos del arreglo:

EDAD[1] = 18 x=EDAD[2]

EDAD[2] = 22 y=EDAD[3]

EDAD[3] = 25 z=EDAD[4]

Los arreglos se clasifican de acuerdo con el número de dimensiones que tienen. Así
se tienen los:

- Unidimensionales (vectores)
- Bidimensionales (tablas o matrices)
- Multidimensionales (tres o más dimensiones)

Algorítmica y Estructura de Datos Página 35


Universidad Privada TELESUP

3. LECTURAS RECOMENDADAS

 CONCEPTOS BASICO DE PROGRAMACION


http://www.mailxmail.com/curso-aprende-programar/conceptos-basicos-
programacion
 ESTRUCTURAS SELECTIVAS SIMPLES
http://www.mailxmail.com/curso-aprende-programar/tipos-estructuras-selectivas-
estructura-simple

4. ACTIVIDADES Y EJERCICIOS

a) Juan, Raquel y Daniel aportan cantidades de dinero para formar un capital.

Juan y Raquel aportan en dólares y Daniel en soles. Diseñe un programa que

determine el capital total en dólares y que porcentaje de dicho capital aporta

cada uno. Considere que: 1 dólar = 3.25 soles.

 Envía a través de la actividad “Capital”, el Diagrama de Flujo que

refleje el diseño del programa.

b) A un trabajador le descuentan de su sueldo el 10%, si su sueldo es menor o

igual a 1000, si es por encima de 1000 y hasta 2000 el 5% del adicional (es

decir del monto que sobrepasa de 1000), y por encima de 2000 el 3% del

adicional (es decir del moto que sobrepasa de 2000). Calcular el descuento y

sueldo neto que recibe el trabajador dado su sueldo.

 Envía a través de la actividad “Sueldo”, el pseudo-código que

utilizarías para el diseño del programa.

Algorítmica y Estructura de Datos Página 36


Universidad Privada TELESUP

5. AUTOEVALUACIÓN

1. Un algoritmo es:
a) El resultado del procesamiento de datos.
b) Una serie de pasos organizados que describe el proceso a seguir, para dar
solución a un problema específico.
c) Desarrollado solo para las computadoras.
d) Un procedimiento en pasos iterativos en forma secuencial.
e) Un resultado o respuesta significativa con la que se puede tomar decisiones.

2. ¿Cuál no es una metodología para construir un correcto algoritmo?


a) Definición del problema (Enunciado)
b) Definición de la solución (Análisis del problema)
c) Desarrollo del problema (Codificación)
d) Depuración y pruebas ( Evaluación de Resultados)
e) Diseño del pseudocódigo del algoritmo

3. Un Pseudocódigo es:
a) Un lenguaje que solo utiliza la computadora.
b) Un lenguaje natural no apropiado para la descripción de algoritmos.
c) Una descripción de los algoritmos, para resolver problemas.
d) Permite describir una secuencia de pasos en particular.
e) Un lenguaje de bajo nivel.

4. Una estructura condicional es:


a) Una instrucción de condición múltiple.
b) Una instrucción que solo toma una acción determinada.
c) Una instrucción que evalúa una condición y en función del resultado de esa
condición se bifurcará a un determinado punto.
d) La instrucción solo permite seleccionar una acción.
e) Solo es para comprar resultados en forma lógica.

5. Las estructuras de condición múltiple son:


a) Las que permiten comparar un solo resultado.
b) Las que compara una variable contra distintos posibles resultados, ejecutando
para cada caso una serie de instrucciones especificas.
c) Las que ejecutan varias instrucciones para determinar varios acciones.
d) Las que permite hacer varias comparaciones en forma lógica.
e) Los que no son de uso común en los lenguajes de programación.

Algorítmica y Estructura de Datos Página 37


Universidad Privada TELESUP

6. Las estructuras repetitivas o cíclicas son:


a) Las acciones que se ejecutan una sola vez.
b) Un conjunto de acciones que se puedan ejecutar una cantidad específica de
veces.
c) Las que permiten ejecutar acciones en forma indefinida.
d) Las acciones se definen y ejecutan n-1 cantidad de veces.
e) Las que no son permitidas en los lenguajes de programación.

7. La estructura repetitiva mientras (en inglés while) es:


a) Una repetición se que utiliza con exactitud la cantidad de iteraciones
b) Cuando se ejecuta la instrucción mientras y es falso las acciones se ejecutan.
c) Una repetición de las acciones mientras se cumple una determinada
condición.
d) Cuando la ejecución de la instrucción solo es ejecuta una sola vez
e) Cuando no es necesario para estructura de repetición.

8. Un procedimiento es:
a) Un subprograma que solo permite recibir un solo valor como parámetro de
entrada.
b) Un subprograma que devuelve solo un valor como resultado del
procedimiento.
c) Un subprograma que realiza una tarea específica. Recibe y devuelve cero o
más valores a dicho programa.
d) Un subprograma que define a un algoritmo.
e) Un subprograma que ejecuta una cantidad infinita de acciones.

9. Una estructura de datos es:


a) Una estructura unidimensional que almacena valores de distinto tipo.
b) Una estructura que almacena una cantidad infinita de valores
c) Aquello que permite almacenar varios valores diferentes en su estructura.
d) Variable que recibe el resultado de una operación matemática completa.
e) Una colección de datos que se caracterizan por su organización y las
operaciones que se definen en ella.

10. ¿Qué es una variable?


a) Es un espacio en la memoria que permite almacenar temporalmente un dato
durante la ejecución de un proceso.
b) Su contenido no puede cambiar durante la ejecución del programa.
c) La computadora le asigna un nombre para identificarla.
d) No permite ser utilizada dentro de un algoritmo.
e) El valor de la variable es única en la memoria de la computadora.

Algorítmica y Estructura de Datos Página 38


Universidad Privada TELESUP

6. RESUMEN

UNIDAD DE APRENDIZAJE I:

Un algoritmo es una serie de pasos organizados que describe el proceso que se


debe seguir, para dar solución a un problema específico. Para desarrollar un
algoritmo tenemos que seguir los siguientes pasos: 1) Definir el problema 2)
Analizar el caso. 3) Diseñar el algoritmo 4) Codificar el programa 5) Prueba y
ejecución.

En un algoritmo es necesario tener estructura de decisión o selección que evalúa


una condición y en función del resultado de esa condición se bifurcará a un
determinado punto. Las estructuras selectivas se utilizan para tomar decisiones
lógicas, de ahí que se suelen denominar también estructuras de decisión o
alternativas

Las estructuras que repiten una secuencia de instrucciones, un número


determinado de veces se denominan bucles, y se llama iteración al hecho de
repetir la ejecución de una secuencia de acciones.

Un arreglo es una estructura de datos que almacena bajo el mismo nombre


(variable) a una colección de datos del mismo tipo y se clasifica en arreglos
unidimensionales (vectores) o arreglos multidimensionales (matrices). Los datos
almacenados en un arreglo son de carácter temporal.

Algorítmica y Estructura de Datos Página 39


Universidad Privada TELESUP

UNIDAD DE
APRENDIZAJE

OPERACIONES CON ARREGLOS


UNIDIMENSIONALES

COMPETENCIA:

Al finalizar esta unidad usted será capaz de


“Construir algoritmos
Algorítmica y Estructura de Datos
para resolver problemas
Página 40
basados en estructuras de datos estáticas”.
Universidad Privada TELESUP

1. INTRODUCCIÓN

a) Presentación y contextualización
El alumno desarrolla una actitud analítica que le permita aplicar las
operaciones básicas con los datos numéricos de un arreglo unidimensional,
como sumar, promediar, hallar máximo, hallar mínimo.

b) Competencias
Construye algoritmos para resolver problemas basados en estructuras de datos
estáticas.

c) Capacidades
 Aplica las operaciones de suma, promedio, valor máximo y mínimo de los
valores cargados en el arreglo unidimensional.
 Identifica y desarrolla habilidades básicas para la recolección de datos.
Insertar, Modificar, Eliminar y Buscar elementos dentro de un arreglo.
 Identifica y desarrolla habilidades complejas para unir dos arreglos
unidimensionales.
 Desarrolla soluciones utilizando recursividad y reconoce las ventajas y
desventajas de su uso.

d) Actitudes
 Desarrolla una actitud emprendedora mediante la toma de iniciativas.
 Actúa con responsabilidad personal, al cumplir con los horarios
establecidos.
 Respeto a las normas de convivencia.
 Cumple con la presentación de los trabajos encomendados de manera
individual y en equipo.

e) Presentación de ideas básicas y contenido esenciales de la Unidad

La Unidad de Aprendizaje 2 comprende el desarrollo de los siguientes


temas:

1. Operaciones algorítmicas con arreglos unidimensionales.


2. Métodos de recolección de datos.
3. Operaciones con vectores.
4. Recursividad.

Algorítmica y Estructura de Datos Página 41


Universidad Privada TELESUP

TEMA

Operaciones
algorítmicas con
arreglos
unidimensionales

Algorítmica y Estructura de Datos Página 42


Universidad Privada TELESUP

2. DESARROLLO DE CONTENIDOS

Tema 1: Operaciones Algorítmicas con Arreglos Unidimensionales

Como sabemos un Arreglo (ARRAY), es una estructura de datos en la que se


almacena una colección de datos del mismo tipo.

Ejemplo: Las notas de los estudiantes. Tienen un único nombre de variable


(NOTAS), que representa todos los elementos, los cuales se diferencian por un
índice o subíndice (0,1, 2, 3…n, pueden ser enteros, no negativos, variables o
expresiones enteras).

NOTAS
12 18 02 … 13

ÍNDICE 0 1 2 … N

DECLARACION DE UN ARREGLO.- Los arreglos unidimensionales se


declaran de la siguiente manera:

TIPO identificador = ARRAY [tipo-sub índice] OF tipo;

Donde:

identificador: es el nombre del arreglo.


tipo-subíndice: puede ser tipo ordinal (booleana o char),
tipo enumerado o tipo sub rango. No pueden ser usados los
tipos estándar (real o integer).
tipo: se refiere al tipo de los elementos y puede ser de
cualquiera de los tipos estándar o definido por el usuario.

Algorítmica y Estructura de Datos Página 43


Universidad Privada TELESUP

VARIABLESTIPOARRAY.- se declaran como:

VAR nombrevar: nombrearray;

Donde:

nombrevar: es cualquier identificador válido que representa el nombre de


la variable.
Nombrearray: nombre del arreglo utilizado en el TYPE.

Ejemplo:

TYPE VALORES= ARRAY[-10...10]OF INTEGER;

VAR PRECIOS: VALORES;

NOTAS:
Las declaraciones de arreglos pueden
aparecer directamente en la sección de
variables, pero es preferible no hacerlo.

Las declaraciones de índices (tipo-índice) no


pueden contener variables.

VAR MUESTRA: ARRAY[1…N]OFREAL; INCORRECTO, salvo que N haya


sido declarado como una constante.

Algorítmica y Estructura de Datos Página 44


Universidad Privada TELESUP

OPERACIONESCONARREGLOSUNIDIMENSIONALESOVECTORES:
Para leer los elementos de un arreglo deben utilizarse estructuras de repetición.
Ejemplo: TIPO LISTANOTA=ARRAY[1…30]OFREAL;

VAR DEFI.NOTAS:LISTANOTA:
FOR WHILE

Para i=1 a 30 hacer i=1


Mientrasi<=30 Hacer
LEER(LISTANOTA[i]) LEER(LISTANOTA[i])
i=i+1
Fin Mientras
Fin Para

ESCRITURA:

Para i=1 a 30 hacer


LEERNota
LISTANOTA[i] = Nota
Fin Para

COPIAR: Sólo cuando ambos tienen el mismo tipo y el mismo tamaño.

Para i=1 a 30 hacer


DEFI[i]=LISTANOTAS[i] o simplemente:
DEFI=NOTAS
Fin Para

SUMAR LOS DATOS DE UN ARREGLO UNIDIMENSIONAL

Se deberá recorrer todos los datos del arreglo (usar la estructura FOR).
Dentro de la estructura repetitiva, acumular cada uno de los datos del arreglo
en una variable acumulador numérica.
Retornar el valor acumulado en la variable numérica.

Algorítmica y Estructura de Datos Página 45


Universidad Privada TELESUP

Método Sumar

Tipo de dato que retorna como respuesta: double

Argumentos que recibe: Longitud del arreglo (n)

FuncionSumar(Vec:array): real
acum:real  Declaración de variables
i: entero

acum=0  inicio del acumulador


Para i=1 a 30 hacer  recorre el arreglo
acum= acum + Vec[i]  Acumulador
Fin Para
SUMAR=acum  Asignación a la función
Fin funcion

Promediar los datos de un arreglo unidimensional

Se deberá recorrer todos los datos del arreglo (Usar la estructura FOR).
Dentro de la estructura repetitiva, acumular cada uno de los datos del arreglo
en una variable acumulador numérica.
Luego de terminar la estructura repetitiva, divida el valor acumulado entre la
cantidad de elementos que contiene el arreglo
Retornar el valor obtenido en el paso anterior.

Funcion Promediar (Vec:array): real


Acum,prom: real  Declaración de variables
i: entero

acum=0  Inicio del acumulador


Para i=1 a 30 hacer  Recorre el arreglo
acum= acum + Vec[i]  Acumulador
Fin Para
Prom= acum/30 Dividimos por longitud de valores del arreglo
PROMEDIAR=Prom  Asignación a la función
Fin Funcion

Algorítmica y Estructura de Datos Página 46


Universidad Privada TELESUP

EL VALOR MÁXIMO DE LOS DATOS CONTENIDOS EN UN ARREGLO

UNIDIMENSIONAL

1. Se debe tomar hipotéticamente que el primer dato del arreglo es el mayor.


2. Se deberá recorrer el arreglo desde la segunda posición hasta la última
posición. Esto permitirá evaluar cada uno de los datos del arreglo. (Usar la
estructura FOR).
3. Dentro de la estructura repetitiva, preguntar si el supuesto mayor es menor que
el dato evaluado.
4. Si se cumple lo anterior, entonces ese dato evaluado se convertirá en el nuevo
mayor, de lo contrario pasamos a evaluar el siguiente dato.
5. Luego de terminar la estructura repetitiva, retornar el último valor obtenido en la
variable mayor.

FuncionMayor(Vec:array): entero
ValMax: entero Declaración de variables
i: entero

ValMax=vec[1] inicio del valor máximo


Para i=2 a 30 hacer recorre el arreglo
Si ( Vec[i] >ValMax) entonces
ValMax= Vec[i]
Fin si
Fin Para
MAYOR=ValMax Asignación a la función
Fin Funcion

HALLAR EL VALOR MÍNIMO DE LOS DATOS CONTENIDOS EN UN ARREGLO

UNIDIMENSIONAL

1. Se debe tomar hipotéticamente que el primer dato del arreglo es el menor.


2. Se deberá recorrer el arreglo desde la segunda posición hasta la última posición.
3. Dentro de la estructura repetitiva, preguntar si el supuesto menor es mayor que
el dato evaluado.
4. Si se cumple lo anterior, entonces ese dato evaluado se convertiría en el nuevo
menor, de lo contrario pasamos a evaluar el siguiente dato.
5. Luego de terminar la estructura repetitiva, retornar el último valor obtenido en la
variable menor.

Algorítmica y Estructura de Datos Página 47


Universidad Privada TELESUP

FuncionMenor(Vec:array): entero
ValMin: entero  Declaración de variables
i: integer

ValMin=vec[1]  inicio del valor mínimo


Para i=2 a 30 hacer  recorre el arreglo
Si ( Vec[i] <ValMin) entonces
ValMin= Vec[i]
Fin si
Fin Para
MAYOR=ValMin  Asignación a la función
Fin función

Algorítmica y Estructura de Datos Página 48


Universidad Privada TELESUP

TEMA

Métodos de
Recolección de
Datos

Algorítmica y Estructura de Datos Página 49


Universidad Privada TELESUP

Tema 2: Métodos de Recolección de Datos

Cargar los datos en un arreglo unidimensional

 Se solicitará la posición en donde desee insertar.


 Incrementar la longitud del arreglo en una posición.
 Solicitar el nuevo dato y almacenarlo en la posición señalada por el usuario.

Argumentos que recibe: Posición, dato y longitud.

Procedimiento Cargar (VAR Vec:array, pos:entero)


dato:entero, i:entero  Declaración de variables
Para i=1 a pos hacer
Vec[i] = dato  Transferir el elemento a la posición correcta
Fin Para
Fin Procedimiento

Insertar los datos en un arreglo unidimensional

Se solicitará la posición en donde desee insertar.


Incrementar la longitud del arreglo en una posición.
Luego se procederá a transferir los elementos una posición hacia la derecha,
comenzando desde el último elemento hasta la posición donde se desea
insertar.
Solicitar el nuevo dato y almacenarlo en la posición señalada por el usuario.

Procedimiento Insertar (VAR Vec:array, pos:entero, dato:entero, i:entero)


Mientras ( i>=pos) hacer
Vec[i+1] =Vec[i]  Transferir el elemento a la posición siguiente
i=i-1
Fin Mientras
Vec[pos] = dato  Posicionar el nuevo dato
Fin Procedimiento

Algorítmica y Estructura de Datos Página 50


Universidad Privada TELESUP

Modificar los datos en un arreglo unidimensional

 Se solicitará la posición en donde desee modificar.


 Luego se procederá almacenar el nuevo dato en la posición indicada,
sobrescribiendo al dato anterior.
 Mostrar los datos del arreglo nuevamente.

Argumentos que recibe: Dato y posición

Procedimiento modificardatos (Var Vec:array, dato:integer, pos: integer)

Vec[pos]=dato

Fin Procedimiento

Eliminar los datos en un arreglo unidimensional

- Se solicitará la posición del elemento que se desea eliminar.


- Decrementar la longitud del arreglo en una posición.
- Luego se procederá a transferir los elementos una posición hacia la izquierda,
comenzando desde la posición a eliminar hasta la penúltima posición.
- Volver a mostrar los datos del arreglo.

Argumentos que recibe: Posición y longitud

Procedimiento Eliminar (VAR Vec:array, pos:entero, i:entero)


Var j: entero
Para ( j=pos hasta i-1) hacer
Vec[ j ] =Vec[ j+1]  Transferir el elemento a la posición anterior
Fin Para

Fin Procedimiento

Algorítmica y Estructura de Datos Página 51


Universidad Privada TELESUP

Buscar datos en un arreglo unidimensional

- Ingresar el dato que se desea buscar


- Comparar el dato ingresado con cada uno de los datos del arreglo.
- Si el dato ha sido hallado mostrar la posición donde se encontró a dicho dato.

Argumentos que recibe: dato, longitud

Procedimiento Buscar (Vec:array, dato:integer, n:entero)


Var i,a: entero
a=0
i=0
Mientras (i<=n) hacer
Si (vec[i]=dato) entonces
a=i  Para la posición del valor encontrado
i=n  Para salir de la condición mientras
Fin Si
i=i+1
Fin Mientras
Si (a=0) entonces
Escribir (“Lo sentimos, el dato no ha sido encontrado...”)
Sino
Escribir (“El Dato se encontró en la posición: “,a)
Fin Si
Fin procedimiento

Imprimir datos en un arreglo unidimensional

Mostramos el dato de cada posición del vector unidimensional.

Argumentos que recibe: dato, longitud.

Algorítmica y Estructura de Datos Página 52


Universidad Privada TELESUP

Procedimiento Insertar (VAR Vec:array, pos:entero)


dato:entero, i:entero  Declaración de variables

Para i=1 a pos hacer


Imprimir Vec[i]  Imprime los elementos del vector.
Fin Para

Fin Procedimiento

Algorítmica y Estructura de Datos Página 53


Universidad Privada TELESUP
1 1
2 2
3 3
4 4
TEMA 5 5

Operaciones con
Vectores

Algorítmica y Estructura de Datos Página 54


Universidad Privada TELESUP

Tema 3: Operaciones con Vectores

Mostrar los elementos comunes entre dos arreglos unidimensionales

Recorrer el primer arreglo


Dentro de cada posición del arreglo A, recorrer el arreglo B y preguntar si el
dato evaluado del arreglo A es igual que el dato que se evalúa en B, si es si,
almacenar el dato común dentro de una cadena.
Al finalizar las estructuras repetitivas, mostrar la cadena que acumuló a los
datos comunes
Se deben mostrar los datos comunes, sin que alguno de estos se repita.

Tipo de dato que retorna como respuesta: String


Argumentos que recibe: longitud del primer arreglo y longitud del segundo arreglo.

Procedimiento mostrarComunesUnicos( VecN:array, n:entero, nb:entero)


i, j, nc: entero  Declaración de variables
nc=0  inicio del valor (contador)
Para i=0 a n-1 hacer  recorre el arreglo
Para j = 0 a nb-1
Si ( VecA[i] = VecB[j]) entonces
VecN[nc]= VecA[i]
nc=nc+1
Fin si
Fin Para
Fin Para
eliminarRepetidosC() Asignar el procedimiento para eliminar repetidos
mostrarTodoslosDatosC() Mostrar los elementos del vector
Fin Procedimiento

Algorítmica y Estructura de Datos Página 55


Universidad Privada TELESUP

Unir los datos de dos arreglos en un tercer arreglo

Recorrer el primer arreglo.


Enviar cada dato del arreglo A hacia el arreglo C, conservando la misma
posición original.
Recorrer el segundo arreglo.
Enviar cada dato del arreglo B hacia el arreglo C, comenzando desde la
posición “n+i”.

Tipo de dato que retorna como respuesta: entero.


Argumentos que recibe: longitud del primer arreglo y longitud del segundo arreglo.

Procedimiento unirArreglos (VecN:array, n:entero, nb:entero): entero


i, j, nc: entero  Declaración de variables
nc=n + nb  inicio del valor (contador)
Para i=0 a n-1 hacer  recorre el arreglo
VecN[i]= VecA[i]
Fin Para

Repetir j = 0 a nb-1
VecN[j+n]= VecA[j]
Fin repetir
mostrarTodoslosDatosC() Mostrar los elementos del vector
Fin Procedimiento

Mostrar los elementos de un arreglo unidimensional y comparar el promedio con

cada elemento

Enunciado: Dados 50 números enteros, obtener el promedio de ellos. Mostrar por


pantalla dicho promedio y los números ingresados que sean mayores que el mismo.

Algorítmica y Estructura de Datos Página 56


Universidad Privada TELESUP

Programa Ejemplo;
const max = 50
type
t_numeros = array[1.. max] tipo entero
variables
suma, i : entero
promedio: real
numeros : t_numeros
inicio
suma := 0;
Para i:= 1 a max hacer
leer(numeros[i] )
suma:= suma +numeros[i]
Fin Para
Promedio:= suma/max
Imprimir (´El promedio es ´,Promedio´);
Para i := 1 a 50 hacer
Si numeros[i] > promedio entonces
imprimir (´El número´, numeros[i], ´es mayor al promedio´);
Fin Si
Fin programa.

Intercalación de dos arreglos ordenados en un tercer arreglo ordenado

El método se utiliza para generar un conjunto ordenado datos a partir de dos


conjuntos de datos ordenados. El proceso consiste en seleccionar sucesivamente
los elementos de cada uno de los conjuntos primitivos y formar otro conjunto que
tendrá todos sus elementos ordenados.

Tipo de dato que retorna como respuesta: vector entero.

Argumentos que recibe: longitud del primer arreglo y longitud del segundo arreglo.

Algorítmica y Estructura de Datos Página 57


Universidad Privada TELESUP

Programa Intercalación
Variables: V1(N), V2 (M), VR(N+M): vector de enteros
I, J, K, M, N, Z: enteros
Inicio
I=1
J =1
K =1
Mientras I<= N y J<= M hacer
/* se comparan dos elementos, uno de cada vector y se determina el menor */
Si V1(I) < V2(J) entonces
VR(K) = V1(I)
I =I + 1
K =K + 1
Sino
VR(K) =V2(J)
J =J + 1
K =K + 1
Fin si
Fin mientras
/* Si sobraron elementos de uno u otro vector, se los añade al final*/
Si I < N entonces
Para Z = I hasta N hacer
VR(K) =V1(Z)
K =K + 1
Fin para
Fin si
Si J < M entonces
Para Z = J hasta N hacer
VR(K) =V1(Z)
K =K + 1
Fin para
Fin si
Fin programa

Algorítmica y Estructura de Datos Página 58


Universidad Privada TELESUP

TEMA

Recursividad

Algorítmica y Estructura de Datos Página 59


Universidad Privada TELESUP

Tema 4: Recursividad
DEFINICIÓN

Un procedimiento o función se dice que es recursivo si durante su ejecución se


invoca directa o indirectamente a sí mismo. Esta invocación depende al menos de
una condición que actúa como condición de corte que provoca la finalización de la
recursión.

Un algoritmo recursivo consta de:

1. Al menos un caso trivial o base, es decir, que no vuelva a invocarse y que se


activa cuando se cumple cierta condición.

2. El caso general que es el que vuelve a invocar al algoritmo con


un caso más pequeño del mismo.

Los lenguajes que soportan recursividad, dan al programador


una herramienta poderosa para resolver ciertos tipos de
problemas reduciendo la complejidad u ocultando los detalles del
problema. La recursión es un medio particularmente poderoso en
las definiciones matemáticas.

Ejemplo: Calcular el factorial de un número no negativo. Definimos el problema de la


siguiente manera:
Si n = 0 Caso Base

Factorial (n)
n! = n * (n - 1) * (n - 2) *…* 1 = n * (n - 1)! , si n > 0

Por definición FACT (0) = 1 y el factorial de un número negativo es indefinido. El


caso base en la recursión es el Factorial (0) el que se define en el caso de n
positivo es: FACT (n) = n* (n-1) * (n-2) *...* 1.Dado que n se asume positivo,
decrementando en 1 cada vez que se llama al factorial se sabe que siempre será
alcanzado el caso base.

Algorítmica y Estructura de Datos Página 60


Universidad Privada TELESUP

Analizando el Factorial = n*Factorial (n-1), esta sentencia tiene el siguiente


efecto:

Si calculamos el Factorial (3), usando esta definición

Factorial (3) = 3 * Factorial (2)


Factorial (2) = 2 * Factorial (1)
Factorial (1) = 1 * Factorial (0)
Factorial (0) = 1

La aplicación de la definición recursiva se detiene y la información obtenida se


puede usar para responder la pregunta original ¿factorial (3)?
Dado que:

Factorial (0) = 1 entonces


Factorial (1) = 1 * 1 = 1, entonces
Factorial (2) = 2 * 1 = 2, entonces
Factorial (3) = 3 * 2 = 6

Función Factorial (n: entero): entero


hacer
si (n=0) entonces Factorial :=1
sino Factorial := n * Factorial (n-1)
fin si
fin hacer
fin función

CÓMO FUNCIONAN LOS ALGORITMOS RECURSIVOS

Para entender cómo funciona la recursividad es necesario que tengamos presente


las reglas y los tipos de pasaje de parámetros provistos por el lenguaje de
programación. Utilizamos el siguiente método:

Algorítmica y Estructura de Datos Página 61


Universidad Privada TELESUP

Método de la caja

Rotular con una letra el llamado recursivo en el cuerpo del subprograma


recursivo. En el ejemplo Factorial (n-1) lo llamamos A. Nos servirá para saber
exactamente a dónde se debe retornar después que la llamada a la función se
complete.

Cada llamada recursiva hecha al subprograma en el


transcurso de la ejecución va a generar una nueva
caja, que contendrá el ambiente local del
subprograma. Esto es, las variables y parámetros
que se crean en el llamado y se destruyen cuando
se termina la ejecución. Cada caja contendrá
entonces:
 El valor de los parámetros formales.
 Las variables declaradas localmente (no existen en el ejemplo).
 Un lugar para el valor a ser retornado por cada llamada recursiva
generada a partir de la caja corriente (marcada con el rótulo).
 El valor de la función misma.

Cuando se crea una nueva caja se dibuja una flecha desde la caja donde se
hizo la llamada hacia la nueva. Sobre la flecha se pone el nombre de la llamada
(rotulo) para indicar a dónde se debe retornar.

Comenzar la ejecución del cuerpo del subprograma


con los valores correspondiente al ámbito local de la
caja corriente. Cuando termina la ejecución de la caja
corriente y se vuelve hacia atrás en las cajas, la
anterior es ahora la corriente y el nombre en la flecha
indica el lugar a donde se debe retornar y continuar la
ejecución del subprograma. El valor calculado se
coloca en el ítem apropiado en la caja corriente.

Algorítmica y Estructura de Datos Página 62


Universidad Privada TELESUP

Ejemplo: Vamos a calcular el Factorial (3)


Llamada original: Factorial(3)  comienza la ejecución

n =3
Rotulo
A : Factorial(n-1)= ?

Factorial =?

En el punto A hace una llamada recursiva y la nueva invocación de la función


factorial comienza su ejecución, hasta llegar al caso base en donde termina.

n =3 A n =2

A:Factorial(n-1)=? A:Factorial(n-1)=?

Factorial =? Factorial =?
n =3 A n =2 A n =1

A:Factorial(n-1)=? A:Factorial(n-1)=? A:Factorial(n-1)=?

Factorial =? Factorial =? Factorial =?


n =3 A n =2 A n =1 A n =0

A:Factorial(n-1)=? A:Factorial(n-1)=? A:Factorial(n-1)=? Factorial= 1

Factorial =? Factorial =? Factorial =?

Se alcanza el caso base. Por lo tanto, la invocación del Factorial se completo y


puede comenzar a resolverse las cajas. Se vuelve a la caja anterior y se retorna
el valor pendiente al punto del llamado (marcado con el rotulo A).

n =3 A n =2 A n =1 A n =0

A:Factorial(n-1)=? A:Factorial(n-1)=? A:Factorial(n-1)=1 Factorial= 1

Factorial =? Factorial =? Factorial =1

n =3 A n =2 A n =1 A n =0

A:Factorial(n-1)=? A:Factorial(n-1)=1 A:Factorial(n-1)=1 Factorial= 1

Factorial =? Factorial =2 Factorial =1


n =3 A n =2 A n =1 A n =0

A:Factorial(n-1)=2 A:Factorial(n-1)=1 A:Factorial(n-1)=1 Factorial= 1

Factorial =6 Factorial =2 Factorial =1

Valor final retornado al programa principal es 6

Algorítmica y Estructura de Datos Página 63


Universidad Privada TELESUP

3. LECTURAS RECOMENDADAS
 FUNDAMENTOS DE PROGRAMACION
http://www.scribd.com/doc/8032086/fundamentos-de-programacion-algoritmos-y-
estructura-de-datos
 RECURSIVIDAD
http://www.mitecnologico.com/Main/DefinicionRecursividad
 ALGORITMOS DE PROGRAMACIÓN
http://wwwdi.ujaen.es/asignaturas/ProgIITel/pdfs/tema2.pdf

4. ACTIVIDADES Y EJERCICIOS

1. Explicar cada paso del procedimiento o función de recursividad en un


arreglo, mediante un código donde se halle la suma total de sus datos.
 Envía el código de esta actividad a través de “Recursividad”.

2. Utilizando la metodología aprendida, construya los métodos para


resolver los siguientes requerimientos e invóquelos desde la lógica de
presentación:

 Mostrar la cantidad de elementos pares.


 Mostrar la cantidad de elementos impares.
 Llenar el arreglo ventas con los primeros n valor de la siguiente serie:
12, 24, 48, 96,192,…
 Llenar el arreglo ventas con los primeros n valor de la siguiente serie:
…, 35, 28, 21, 14, 7. Siempre el último valor debe ser 7.
 Envía el código de esta actividad a través de “Métodos”.

Algorítmica y Estructura de Datos Página 64


Universidad Privada TELESUP

5. AUTOEVALUACION

1. El arreglo unidimensional o array es:


a) Una estructura unidimensional que almacena valores de distinto tipo.
b) Una estructura de datos que almacena bajo el mismo nombre una colección
de datos del mismo tipo.
c) Una estructura de que almacena una cantidad infinita de valores.
d) Una estructura que no permite almacenar datos de tipo carácter.
e) Una estructura que tiene más de un índice para hacer referencia.

2. El procedimiento de sumar datos de un arreglo unidimensional, corresponde


a:
a) No se deberá recorrer todos los datos del arreglo.
b) No permite retornar el valor acumulado en la variable numérica.
c) Siempre se realiza en un procedimiento de suma de datos.
d) No hay información para hacer referencia a los índices del vector.
e) Dentro de la estructura repetitiva, acumular cada uno de los datos del
arreglo en una variable acumulador numérica.

3. Para hallar el valor máximo de los datos contenidos en un arreglo


unidimensional
a) No se deberá tomar el primer dato del arreglo que es el mayor.
b) Se deberá recorrer el arreglo desde la segunda posición hasta la última
posición. Permitirá evaluar cada uno de los datos del arreglo.
c) Dentro de la estructura repetitiva, no hay un supuesto mayor, es menor que
el dato evaluado.
d) El dato evaluado se convertiría en el nuevo menor, de lo contrario se pasa a
evaluar el siguiente dato.
e) Si la estructura condicional se cumple se termina el procedimiento.

4. El procedimiento para insertar datos en arreglo unidimensional,


corresponde a:
a) Permite y solicita la posición en donde insertar.
b) No incrementa la longitud del arreglo en una posición.
c) Transfiere los elementos una posición hacia la derecha, comenzando
desde el último elemento hasta la posición donde se desea insertar.
d) La posición en la inserción no está permitida en el arreglo.
e) La longitud del vector debe ser finita en el arreglo.

5. Para buscar datos en un arreglo unidimensional, corresponde a :


a) Ingresar el dato que no desea buscar.
b) Si el dato no ha sido hallado no mostrar la posición donde se encontró.
c) El dato cuando es encontrado el procedimiento continúa.
d) Comparar el dato ingresado con cada uno de los datos del arreglo.
e) El ingreso de los datos es en forma ordenada.

Algorítmica y Estructura de Datos Página 65


Universidad Privada TELESUP

6. Mostrar los elementos comunes entre dos arreglos unidimensionales,


corresponde a:
a) Recorrer el primer y segundo arreglos.
b) Al finalizar las estructuras repetitivas, no se muestra la cadena que
acumuló a los datos comunes.
c) Se deben mostrar los datos comunes, y algunos de estos se repite.
d) Hay ordenación en cada uno de los vectores.
e) De cada posición del arreglo A, recorrer el arreglo B y preguntar si el dato
evaluado del arreglo A es igual que el dato que se evalúa en B, si es sí,
almacenar el dato común dentro de una cadena.

7. Intercalación de dos arreglos ordenados en un tercer arreglo ordenado:


a) El método se utiliza para generar un conjunto ordenado datos a partir de
dos conjuntos de datos ordenados.
b) El proceso consiste en seleccionar sucesivamente los elementos de uno de
los conjuntos primitivos.
c) Formar un conjunto que tendrá solo los datos de los elementos ordenados.
d) No existe el procedimiento de ordenación de vectores.
e) El procedimiento se invoca recursivamente.

8. El procedimiento o función de Recursividad es:


a) Si durante su ejecución se invoca directa o indirectamente a sí mismo.
b) Es un procedimiento que devuelve múltiples datos.
c) Es una función que devuelve un solo valor, a la vez, por función.
d) Devuelve más de un valor en cada función.
e) Existe más de una condición base de finalización.

9. El Método de Caja, cada caja recursiva contendrá:


a) El valor de los parámetros no son formales.
b) Las variables declaradas localmente sirven para las otras funciones.
c) Un lugar para el valor a ser retornado por cada llamada recursiva generada
a partir de la caja corriente.
d) Los valores de datos en la misma función son sin caso base.
e) No hay información de datos iterativos.

10. ¿Cuál de las alternativas no es un procedimiento recursivo?


a) Multiplicación entera.
b) Exponencia entera.
c) Máximo común divisor.
d) Búsqueda directa.
e) Torres de Hanói.

Algorítmica y Estructura de Datos Página 66


Universidad Privada TELESUP

6. RESUMEN

UNIDAD DE APRENDIZAJE II:

Las estructuras de datos son una colección de datos que pueden ser
caracterizados por su organización y las operaciones que se definen de ella. Lo
que se pretende con las estructuras de datos es facilitar un esquema lógico para
manipular los datos en función del problema que haya que tratar y el algoritmo
para resolverlo. En algunos casos la dificultad radica en escoger las estructuras
de datos adecuadas. En general el algoritmo y la estructura de datos que
manipulará estarán muy relacionados.

Según su comportamiento durante la ejecución del programa distinguimos


estructura de datos estáticas, su tamaño en memoria es fijo, tenemos el Arreglo
(ARRAY), el cual es una estructura de datos en la que se almacena una colección
de datos del mismo tipo.

Con la estructura de Datos Estáticas (Arreglos) se realiza las siguientes


operaciones básicas que son: sumar, promediar, hallar máximo, hallar mínimo de
los valores. También con las estructuras de datos (array) existen métodos de
recolección de datos como son los procedimientos de insertar, modificar, eliminar
y buscar un elemento dentro del array.

Desarrollo de soluciones por parte de los algoritmos, también se utiliza la


recursividad que es un procedimiento o función que durante su ejecución se
invoca directa o indirectamente a sí mismo. Esta invocación depende al menos de
una condición que actúa como condición de corte que provoca la finalización de la
recursión. Los lenguajes que soportan recursividad, dan al programador una
herramienta poderosa para resolver ciertos tipos de problemas reduciendo la
complejidad u ocultando los detalles del problema. El método de escritorio (prueba
y error) más utilizado es el método de las cajas.

Algorítmica y Estructura de Datos Página 67


Universidad Privada TELESUP
UNIDAD DE
APRENDIZAJE

MÉTODOS DE ORDENACIÓN Y
BÚSQUEDA

COMPETENCIA:

Al finalizar esta unidad usted será capaz de


“Conocer y aplicar las diferentes formas
algorítmicas para ordenar y buscar datos dentro de
un arreglo”.
Algorítmica y Estructura de Datos Página 68
Universidad Privada TELESUP
1. INTRODUCCIÓN

a. Presentación y contextualización

El alumno desarrolla una actitud analítica y critica que le permita valorar la


importancia en el manejo de los métodos de ordenamiento por selección,
método Shell y el método de ordenamiento por QuickSort de los métodos de
búsqueda secuencial y binaria.

b. Competencia (Logro)

Conoce y aplica las diferentes formas algorítmicas para ordenar y buscar


datos dentro de un arreglo.

c. Capacidades

1. Identifica y comprende el modelo ordenación más óptimo en estructuras


unidimensionales.
2. Identifica y comprende el modelo ordenación más óptimo para el
ordenamiento por selección en estructuras unidimensionales.
3. Identifica y comprende el modelo de búsqueda más óptimo en estructuras
unidimensionales.
4. Identifica y desarrolla habilidades básicas para las operaciones con
arreglos multidimensionales.

d. Actitudes

Desarrolla una actitud emprendedora mediante la toma de iniciativas.


Actúa con responsabilidad personal, al cumplir con los horarios
establecidos.
Respeto a las normas de convivencia.
Cumple con la presentación de los trabajos encomendados de manera
individual y en equipo.

e. Presentación de ideas básicas y contenido esenciales de la Unidad.

La unidad de Aprendizaje 3 comprende el desarrollo de los siguientes


temas:

1. Métodos de ordenación
2. Métodos de ordenamiento por selección
3. Métodos de búsqueda
4. Operaciones con arreglos multidimensionales

Algorítmica y Estructura de Datos Página 69


Universidad Privada TELESUP

TEMA

Métodos de
ordenación

Algorítmica y Estructura de Datos Página 70


Universidad Privada TELESUP

1. DESARROLLO DE CONTENIDOS

Tema 01: Métodos de ordenación

¿QUÉ ES ORDENAMIENTO?

Es la operación de arreglar los registros de una tabla en algún orden secuencial de


acuerdo a un criterio de ordenamiento.
El ordenamiento se efectúa con base en el valor de algún campo en un registro.

El propósito principal de un ordenamiento es el de facilitar las búsquedas de los


miembros del conjunto ordenado.

Ejemplo: directorio telefónico, tablas de


contenido, bibliotecas y diccionarios, etc.

El ordenar un grupo de datos significa mover los datos o sus referencias para que
queden en una secuencia tal que represente un orden, el cual puede ser numérico,
alfabético o incluso alfanumérico, ascendente o descendente.

¿Cuándo conviene usar un método de ordenamiento?


1
.Cuando se requiere hacer una cantidad considerable de búsquedas y es importante
el factor tiempo.

TIPOS DE ORDENAMIENTOS:

Los 2 tipos de ordenamientos que se pueden realizar son: los internos y los
externos.

Los internos:

Son aquellos en los que los valores a ordenar están en la memoria


principal, por lo que se asume que el tiempo que se requiere para
acceder cualquier elemento sea el mismo (vec[1], vec[500], etc).

Algorítmica y Estructura de Datos Página 71


Universidad Privada TELESUP

Los externos:

Son aquellos en los que los valores a ordenar están en memoria secundaria
(disco, cinta, cilindro magnético, etc.), por lo que se asume que el tiempo que
se requiere para acceder a cualquier elemento depende de la última posición
accedida (posición 1, posición 500, etc.).

ALGORITMOS DE ORDENAMIENTO:

Internos:

1. Inserción directa.
1. Inserción binaria.

2. Selección directa.
1. Burbuja.
2. Shake.

3. Intercambio directo.
1. Shell.

4. Inserción disminución incremental.


1. Heap.
2. Tournament.

5. Ordenamiento de árbol.
1. Quick sort.

6. Sort particionado.

7. Mergesort.

8. Radixsort.

9. Cálculo de dirección.

Algorítmica y Estructura de Datos Página 72


Universidad Privada TELESUP

Externos:

1. Straightmerging.

2. Natural merging.
3. Balancedmultiwaymerging.
4. Polyphasesort.
5. Distribution of initialruns.

CLASIFICACIÓN DE LOS ALGORITMOS DE ORDENAMIENTO DE


INFORMACIÓN:

El hecho de que la información está ordenada, nos sirve para poder encontrarla y
accederla de manera más eficiente ya que de lo contrario se tendría que hacer de
manera secuencial.
A continuación se describirán 4 grupos de algoritmos para ordenar información:

Algoritmos de inserción:

En este tipo de algoritmo los elementos que van a ser


ordenados son considerados uno a la vez. Cada elemento
es INSERTADO en la posición apropiada con respecto al
resto de los elementos ya ordenados.
Entre estos algoritmos se encuentran el de INSERCION
DIRECTA, SHELL SORT, INSERCION BINARIA y
HASHING.

Algoritmos de intercambio:

En este tipo de algoritmos se toman los elementos de dos en dos, se


comparan y se INTERCAMBIAN si no están en el orden adecuado. Este
proceso se repite hasta que se ha analizado todo el conjunto de elementos y
ya no hay intercambios.
Entre estos algoritmos se encuentran el BURBUJA y QUICK SORT.

Algorítmica y Estructura de Datos Página 73


Universidad Privada TELESUP

Algoritmos de selección:

En este tipo de algoritmos se SELECCIONA o se busca el elemento más


pequeño (o más grande) de todo el conjunto de elementos y se coloca en su
posición adecuada. Este proceso se repite para el resto de los elementos hasta
que todos son analizados.
Entre estos algoritmos se encuentra el de SELECCION DIRECTA.

Algoritmos de enumeración:

En este tipo de algoritmos cada elemento es comparado


contra los demás. En la comparación se cuenta cuántos
elementos son más pequeños que el elemento que se
está analizando, generando así una ENUMERACION. El
número generado para cada elemento indicará su
posición.

Los métodos simples son: Inserción (o por inserción directa), selección, burbuja y
shell, en dónde el último es una extensión del método de inserción, siendo más
rápido. Los métodos más complejos son el quick-sort (ordenación rápida) y el
heapsort.

MÉTODO DE LA BURBUJA

Este método consiste en ordenar el arreglo moviendo el


dato mayor hasta la última posición, comenzando desde
la casilla cero del arreglo hasta haber enviado el número
más grande a la última posición, una vez acomodado el
más grande, prosigue a encontrar y acomodar el
siguiente más grande comparando de nuevo los números
desde el inicio del arreglo, y así se sigue hasta ordenar
todos los elementos del arreglo.

Desventajas:
Ventajas:
Este algoritmo es muy deficiente ya
Es el método de ordenamiento
que al ir comparando las casillas para
más utilizado, porque es el más
buscar el siguiente más grande, éste
sencillo de comprender.
vuelve a comparar las ya ordenadas.

Algorítmica y Estructura de Datos Página 74


Universidad Privada TELESUP

Método Directo (Método burbuja1)

Argumentos que recibe: vector a ordenar y longitud del arreglo.

Procedimiento Burbuja1 (Vec:array , n:entero)


i, j , aux : entero

Para i=0 a n-1 hacer

Para j=i+1 a n hacer

Si (Vec[i]>Vec[j]) entonces

Aux=Vec[i]

Vec[i]=Vec[j]

Vec[j]=aux

Fin si

Fin Para

Fin Para

Fin Procedimiento

Método Burbuja

Argumentos que recibe: vector a ordenar y longitud del arreglo.

Procedimiento Burbuja2 (Vec:array


, n:entero)

i, j , aux : entero
marca: carácter
i=1
marca=”si”

Algorítmica y Estructura de Datos Página 75


Universidad Privada TELESUP

Mientras ( i<n ) y (marca=”si”)


hacer
Marca=”no”
Para j=1 a n-i hacer
Si (Vec[j]>Vec[j+1]) entonces
aux=Vec[j]
Vec[j]=Vec[j+1]
Vec[j+1]=aux
marca=”si”
Fin si
Fin Para
i = i +1
Fin Mientras

Fin Procedimiento

Algorítmica y Estructura de Datos Página 76


Universidad Privada TELESUP

TEMA

Métodos de
ordenamiento
por selección

Algorítmica y Estructura de Datos Página 77


Universidad Privada TELESUP

Tema 02: Métodos de ordenamiento por selección

Método de Ordenamiento por Selección

El ordenamiento por selección (Selection Sort en inglés) es un algoritmo de


ordenamiento que requiere n2 operaciones para ordenar una lista de n elementos.

Su funcionamiento es el siguiente:

Buscar el mínimo elemento de la lista.

Intercambiarlo con el primero.

Luego, buscar el mínimo en el resto de la lista.

Intercambiarlo con el segundo y así sucesivamente.

En general:

 Buscar el mínimo elemento entre una posición i y el final de la lista


 Intercambiar el mínimo con el elemento de la posición i

Ventajas:

Este algoritmo mejora ligeramente el algoritmo de la burbuja. En el caso de tener


que ordenar un vector de enteros, esta mejora no es muy sustancial, pero
cuando hay que ordenar un vector de estructuras más complejas, la operación
intercambiar () sería más costosa en este caso. Este algoritmo realiza menos
operaciones intercambiar () que el de la burbuja, por lo que lo mejora en algo.

Desventajas:
 Realiza numerosas comparaciones.
 Este es un algoritmo lento. No obstante, ya que sólo
realiza un intercambio en cada ejecución del ciclo
externo, puede ser una buena opción para listas con
registros grandes y claves pequeñas.

Algorítmica y Estructura de Datos Página 78


Universidad Privada TELESUP

Método Selección

Argumentos que recibe: Vector a ordenar y longitud del arreglo.

Procedimiento Selección (varVec:array, n: entero)


k, i, j: entero
aux: real;
Para i = 0 a n-2 hacer
aux = vec[i]
k = i;
Para j =i+1 a n-1 hacer
Si (vec[j] <aux) entonces
aux = vec[j]
k=j
Fin si
Fin Para
vec[k] = vec[i];
vec[i] = aux
Fin Para
Fin procedimiento

Ejemplo:

El arreglo a ordenar es A = ['a','s','o','r','t','i','n','g','e','x','a','m','p','l','e'].

Se empieza por recorrer el arreglo hasta encontrar el menor elemento. En este caso el
menor elemento es la primera 'a'. De manera que no ocurre ningún cambio. Luego se
procede a buscar el siguiente elemento y se encuentra la segunda 'a'.

Esta se intercambia con el dato que está en la segunda posición, la 's', quedando el
arreglo así después de dos recorridos: a = ['a','a','o','r','t','i','n','g','e','x','s','m','p','l','e'].

Algorítmica y Estructura de Datos Página 79


Universidad Privada TELESUP

El siguiente elemento, el tercero en orden de menor mayor es la primera 'e', la cual se


intercambia con lo que está en la tercera posición, o sea, la 'o'. Le sigue la segunda 's',
la cual es intercambiada con la 'r', quedando el arreglo así

a = ['a','a','e','e','t','i','n','g','o','x','s','m','p','l','r'].

De esta manera se va buscando el elemento que debe ir en la siguiente posición hasta


ordenar todo el arreglo.

MÉTODO DE ORDENAMIENTO SHELL

El ordenamiento Shell (Shell sort en inglés) es un algoritmo de ordenamiento.


El método se denomina Shell en honor de su inventor Donald Shell. Su
implementación original, requiere (n2) comparaciones e intercambios en el peor
caso. Un cambio menor presentado en el libro de V. Pratt produce una
implementación con un rendimiento de O(nlog2n) en el peor caso. Esto es mejor
que las O(n2) comparaciones requeridas por algoritmos simples pero peor que el
óptimo O(n log n). Aunque es fácil desarrollar un sentido intuitivo de cómo
funciona este algoritmo, es muy difícil analizar su tiempo de ejecución.

El Shell sort es una generalización del ordenamiento por inserción, teniendo en


cuenta dos observaciones:

1. El ordenamiento por inserción es eficiente si la entrada está "casi ordenada".


2. El ordenamiento por inserción es ineficiente, en general, porque mueve los
valores sólo una posición cada vez.

El algoritmo Shell sort mejora el ordenamiento por


inserción comparando elementos separados por un
espacio de varias posiciones. Esto permite que un
elemento haga "pasos más grandes" hacia su
posición esperada. Los pasos múltiples sobre los datos
se hacen con tamaños de espacio cada vez más
pequeños. El último paso del Shell sort es un simple
ordenamiento por inserción, pero para entonces, ya está
garantizado que los datos del vector están casi ordenados.

Algorítmica y Estructura de Datos Página 80


Universidad Privada TELESUP
Ventajas:

No requiere memoria adicional.


Mejor rendimiento que el método de Inserción clásico
Es inestable no mantiene el orden relativo de los registros.

Desventajas:

Los algoritmos eficientes tienden a ser más complejos que los ineficientes por
lo que son más difíciles de expresar con palabras.
Aún siendo la ordenación Shell tan eficiente como es, la ordenación rápida
(Quick Sort) es 2 o 3 veces más eficiente.

Método Shell

Argumentos que recibe: Vector a ordenar y longitud del arreglo.

Procedimiento Shell (Vec:array, n:entero)


v, k, sa, j: entero
k=n/2

Mientras (k>=1) hacer


Para sa =0 a k hacer
Para i=k+sa a n-1 paso k hacer
v=Vec[i]
j=i-k
Mientras (j>=0) y Vec[j]>v) hacer
Vec[j+k]=Vec[j]
j=k-1
Fin Mientras
Vec[j+k]=v
Fin Para
Fin Para
k=k/2
Fin Mientras

Fin Procedimiento

Algorítmica y Estructura de Datos Página 81


Universidad Privada TELESUP

Ejemplo:

Para el arreglo: Vector = [6, 1, 5, 2, 3, 4, 0]

Tenemos el siguiente recorrido:

Recorrido Salto Lista Ordenada Intercambio

1 3 2,1,4,0,3,5,6 (6,2), (5,4), (6,0)

2 3 0,1,4,2,3,5,6 (2,0)

3 3 0,1,4,2,3,5,6 Ninguno

4 1 0,1,2,3,4,5,6 (4,2), (4,3)

5 1 0,1,2,3,4,5,6 Ninguno

Algorítmica y Estructura de Datos Página 82


Universidad Privada TELESUP

TEMA

Métodos de
búsqueda

Algorítmica y Estructura de Datos Página 83


Universidad Privada TELESUP

Tema 03: Métodos de búsqueda

Método de Búsqueda Secuencial:

La búsqueda secuencial, también se le conoce como búsqueda lineal. Este método


consiste en recorrer el arreglo o vector elemento a elemento e ir comparando con el
valor buscado (clave). Se empieza con la primera casilla del vector y se observa
una casilla tras otra hasta que se encuentre el elemento buscado o se hayan visto
todas las casillas. El resultado de la búsqueda es un solo valor, y será la posición
del elemento buscado o cero.

Dado que el vector o arreglo no está en


ningún orden en particular, existe la misma
probabilidad de que el valor se encuentra ya
sea en el primer elemento, como en el
ultimo. Por lo tanto, en promedio, el
programa tendrá que comparar el valor
buscado con la mitad de los elementos del
vector.

El método de búsqueda lineal funciona bien con arreglos pequeños o para


arreglos no ordenados.
Ventajas:

Es un método sumamente simple que


resulta útil cuando se tiene un conjunto de datos
pequeños (Hasta aproximadamente 500
elementos)
Es fácil adaptar la búsqueda secuencial
para que utilice una lista enlazada ordenada, lo
que hace la búsqueda más eficaz.
Si los datos buscados no están en orden es el único método que puede
emplearse para hacer dichas búsquedas.

Algorítmica y Estructura de Datos Página 84


Universidad Privada TELESUP

Desventajas:

 El método tiende hacer muy lento.


 Si los valores de la clave no son únicos, para encontrar todos los
elementos con una clave particular, se requiere buscar en todo el arreglo,
lo que hace el proceso muy largo.

Método búsqueda Secuencial

Argumentos que recibe: Vector de búsqueda y longitud del arreglo.

Procedimiento Buscar (Vec:array, dato:integer, n:entero)

i,a: entero Declaracion de Variables


a=0
i=0

Mientras (i<=n) hacer


Si (vec[i]=dato) entonces
a=i  Para la posición del valor
encontrado
i=n  Para salir de la condición
mientras
Fin Si
i=i+1
Fin Mientras

Si (a=0) entonces
Escribir (“Lo sentimos, el dato no
ha sido encontrado...”)
Sino
Escribir (“El Dato se encontró
en la posición: “, a)
Fin Si

Fin procedimiento

Algorítmica y Estructura de Datos Página 85


Universidad Privada TELESUP

Método de Búsqueda Binaria:

La operación de búsqueda puede ser mucho


más eficiente si se sabe que los datos están
previamente ordenados. Un ejemplo de
ordenación es un diccionario, en el que
hacemos una búsqueda gracias a la ordenación
alfabética de las palabras. En otro caso sería
completamente inutilizable.

La idea consiste en comparar un elemento cualquiera, de índice m


(normalmente a la mitad) e ir comprando con los demás argumentos de la
izquierda o derecha según sea el caso. El resultado de la búsqueda es un solo
valor, y será la posición del elemento buscado o cero.

Los posibles casos son:

Vec(m)=X, ha terminado la búsqueda y el índice


buscado es m.
Vec(m)<X, sabemos que todos los elementos a la
izquierda de m son menores que X, y por lo tanto
puede ser eliminada esta región de la zona de
búsqueda y considerar solo la zona derecha (desde
m+1 a N).
Vec(m)>X, sabemos que todos los elementos de la
derecha de m son mayores que X, y por lo tanto
puede ser eliminada esta región de la zona de
búsqueda y considerar solo la zona izquierda
(desde1 a m-1).
La repetición de este proceso de forma iterativa
constituye este algoritmo. Para ello, se utilizan dos
variables de índice VP y VS que marcan los
extremos izquierdo y derecho de la zona de
búsqueda considerada.

Algorítmica y Estructura de Datos Página 86


Universidad Privada TELESUP

Método Búsqueda Dicotómica

Argumentos que recibe: Vector de búsqueda y longitud del arreglo.

Funcion Binaria (val:entero, varVec: array,


dim:entero):entero
pos, i :entero  Declaración de variables
VP,VS, VE: entero

pos=0  inicialización de posición del valor buscado


VP=1  inicialización límite inferior
VS=dim  inicialización del límite superior

Si (val>=Vec(VP)) y (val <= Vec(VS)) entonces

Mientras (VP<=VS) y (pos=0) hacer


VE=ent(VP+VS)/2)  Parte entera de la
mitad de vector
Si (val=Vec(VE) ) entonces
pos=VE
sino
Si (val>=Vec(VE)) entonces
VP=VE+1
Sino
VS=VE+1
Fin Si
Fin Si
Fin Mientras
Fin Si
Shell= pos
Fin Funcion

Algorítmica y Estructura de Datos Página 87


Universidad Privada TELESUP

TEMA

Operaciones con
arreglos
Multidimensionales

Algorítmica y Estructura de Datos Página 88


Universidad Privada TELESUP

Tema 04: Operaciones con arreglos multidimensionales

ARREGLOS BIDIMENSIONALES (TABLAS/MATRICES)

El array bidimensional se puede considerar como un vector de vectores. Es, por


consiguiente, un conjunto de elementos, todos del mismo tipo, en el cual el orden de
los componentes es significativo y en el que se necesita especificar dos subíndices
para poder identificar cada elemento del array. Si se visualiza un array unidimensional,
se puede considerar como una columna de datos: un array bidimensional es un grupo
de columnas. El diagrama representa una tabla o matriz de treinta elementos (5 x 6)
con 5 filas y 6 columnas.

DECLARACION DE UNA MATRIZ:

Los arreglos dimensionales se declaran de la siguiente manera:

TIPO identificador=ARRAY[indice1, indice2]OFtipo;

Donde:

identificador: es el nombre del arreglo


indice1: tipo enumerado o tipo subrango, representa
la cantidad de filas.
indice2: tipo enumerado o tipo subrango, representa
la cantidad de columnas.
tipo: se refiere al tipo de los elementos y puede ser de cualquiera de los tipos
estándar o definido por el usuario.

Algorítmica y Estructura de Datos Página 89


Universidad Privada TELESUP

Ejemplo:

TYPE
Estudiantes = array[1..37, 1..5] of real
Cuenta = array[1..10,’a’..’z’] of integer
Consola = array[0..4,0..8] of char

VAR
Cálculos: Cuenta
Códigos: Consola
Clase: Estudiantes

OPERACIONES CON ARREGLOS DIMENSIONALES O MATRICES:

LECTURA: Tienen que utilizarse estructuras de repetición para leer los


elementos del arreglo.

Procedimiento Leer Matriz (varMat:matriz, indfil:entero,


indcol:entero)
Variables i, j: entero
Para i=1 a indfil hacer
Para j = 1 a indcol hacer
Leer Mat[i,j]
Fin Para
Fin Procedimiento

ESCRITURA:

Procedimiento CargaMatriz (varMat:matriz, indfil:entero, indcol:entero)


Variables i, j, dato: entero
Para i=1 a indfil hacer
Para j = 1 a indcol hacer
Leer dato
Mat[i,j]=dato
Fin ParaFin Procedimiento

Algorítmica y Estructura de Datos Página 90


Universidad Privada TELESUP

SUMAR LOS DATOS DE UN ARREGLO DIMENSIONAL

Para sumar los datos de un arreglo dimensional:

Se deberá recorrer todos los datos del arreglo


dimensional (Usar la estructura FOR)
Dentro de la estructura repetitiva, acumular cada
uno de los datos del arreglo dimensional en un
variable acumulador numérico.
Retornar el valor acumulado en la variable
numérica.

Método Sumar

Tipo de dato que retorna como respuesta: doublé.

FuncionSumar(Mat:matriz, indfil:entero, indcol:entero): real


acum:real  Declaración de variables
i: entero
acum=0  inicio del acumulador
Para i=1 a indfil hacer  recorre el arreglo
Para j =1 a indcol hacer
acum= acum + Mat[i,j]  Acumulador de suma de los valores
Fin Para
Fin Para
SUMAR=acum  Asignación a la función
Fin función

MÉTODO DE LA BURBUJA CON ARREGLOS DIMENSIONALES:

Este método consiste en ordenar el arreglo moviendo el dato mayor hasta la


última posición, comenzando desde la casilla cero del arreglo hasta haber
enviado el número más grande a la última posición, una vez acomodado el más
grande, prosigue a encontrar y acomodar el siguiente más grande comparando
de nuevo los números desde el inicio del arreglo, y así se sigue hasta ordenar
todo los elementos del arreglo.

Algorítmica y Estructura de Datos Página 91


Universidad Privada TELESUP

Ventajas: Desventajas:

Es el método de Este algoritmo es muy deficiente ya que al ir

ordenamiento más utilizado, comparando las casillas para buscar el

porque es el más sencillo de siguiente más grande, éste vuelve a


comprender. comparar las ya ordenadas.

Argumentos que recibe: arreglo dimensional o matriz a ordenar y longitud del


arreglo dimensional.

Procedimiento Directo ( varMat:matriz, f, c, indfil, indcol:entero)


variable k , aux : entero

Para k=1 a f hacer


Aux=Mat[k,indfil]
Mat[k,indfil]=Mat[k,indcol]
Vec[k,indcol]=aux
Fin Para
Fin Procedimiento

Procedimiento Directo(varMat:matriz, indcol, indfil:entero)


Variable i,j : entero

Para i=1 a indcol-1


Para j=i+1 a indcol
Si Mat[2,i]> Mat[2,j] entonces
BurbujaDirecta(Mat, indcol,indfil,i,j)
Fin Si
Fin para
Fin Para
Fin procedimiento

Procedimiento
Burbuja_Final(varMat:matriz, indcol,
indfil:entero)
Variable i,j, orden : entero

Algorítmica y Estructura de Datos Página 92


Universidad Privada TELESUP

i=1
orden=0
Mientras (i<indcol) y (orden=0) hacer
orden=1
Para j=1 a indcol-1 hacer
Si Mat[2,j]> Mat[2,j+1] entonces
Directo (Mat, indfil, indcol, j, j+1)  Llamada al procedimiento
Orden=0
Fin Si
Fin Para
Fin Mientras

Fin Procedimiento

Nota: Se hace uso de la programación modular con el método de ordenación


denominado burbuja

Algorítmica y Estructura de Datos Página 93


Universidad Privada TELESUP

3. LECTURAS RECOMENDADAS

http://sistemas.itlp.edu.mx/tutoriales/progorientobjetos/t11.htm
http://www.ceidis.ula.ve/cursos/ingenieria/pd_10/clases/Apunt_.pdf
http://sistemas.itlp.edu.mx/tutoriales/algoritmos/tema_71.htm

4. ACTIVIDADES Y EJERCICIOS

1. Resolver mediante un pseudocódigo, un programa donde solicite las 5 notas


de un alumno (en un arreglo). Luego ordénelas de mayor a menor utilizando
el método de burbuja e indica en cuántos pasos lo realizó.
Envía esta actividad a través de “Burbuja”.

2. El ejercicio anterior (arreglo original), resolverlo mediante el método de


inserción. Compare la cantidad de pasos realizados por ambos e indique
cuál es el más rápido.
Envía esta actividad a través de “Inserción”.

5. AUTOEVALUACIÓN

1. Que es ordenamiento:
a) Permite operar el valor de los parámetros formales.
b) Es la operación de arreglar los registros de una tabla en algún orden
secuencial de acuerdo a un criterio de ordenamiento.
c) No permite los elementos de ordenación formal.
d) No exige llevar los datos en forma ordenada.
e) La ordenación siempre es del menor al mayor de los datos.

Algorítmica y Estructura de Datos Página 94


Universidad Privada TELESUP

2. El procedimiento del método de la burbuja es:


a) No permite ordenar el arreglo moviendo el dato mayor a la última posición.
b) Permite comenzar desde la casilla cero del arreglo y mover el número más
grande a la última posición. Continuar con el siguiente elemento.
c) Acomodado el más grande, prosigue a encontrar y acomodar el siguiente
más grande.
d) No comparando de nuevo los números desde el inicio del arreglo.
e) La ordenación es de acuerdo al procedimiento de búsqueda
3. De las siguientes alternativas. ¿Cuál de ellas no pertenece a la clasificación
de los algoritmos de ordenación?
a) Algoritmos de inserción
b) Algoritmos de intercambio
c) Algoritmos de selección
d) Algoritmos de enumeración
e) Algoritmo de inserción directa

4. Cuál es una desventaja en la ordenación por selección


a) Es rápido y no realiza comparaciones.
b) Permite el intercambio en cada ejecución de la ordenación
c) Lento y realiza numerosas comparaciones.
d) Es rápido en ordenaciones de listas grandes.
e) Requiere de poca memoria para la ordenación

5. Cuál es la ventaja del método de ordenación shell:


a) Ubicado el valor buscado, no continúa su búsqueda
b) No requiere memoria adicional
c) Es estable y no mantiene el orden relativo de los registros.
d) Es muy lento y realiza 1 comparación en la lista.
e) Los datos deben estar ordenados

6. El procedimiento del método de búsqueda secuencial es:


a) Recorre el arreglo o vector elemento a elemento y va comparando con el
valor buscado.
b) Compara los elementos del valor buscado de 1 contra n elementos del
arreglo o array.
c) Ubicado el valor buscado no continua su búsqueda.
d) Recorre el array o vector N veces por cada elemento buscado.
e) Recorrer en orden determinado, sin ordenar.

Algorítmica y Estructura de Datos Página 95


Universidad Privada TELESUP

7. El procedimiento del método de búsqueda binaria es:


a) Los datos no deben estar ordenados en el array o vector.
b) Ubicado el dato de búsqueda el procedimiento termina.
c) El método tiende a ser muy lento.
d) Sí permite comparar más de un elemento.
e) Comparar un elemento de búsqueda y descartar los argumentos de la
izquierda o derecha según sea el caso.

8. Los arreglos bidimensionales (tablas/matrices) es:


a) Un array bidimensional es un grupo filas.
b) Tiene un subíndice para poder identificar cada elemento del array.
c) Solo podemos recorrer la tabla con el primer índice.
d) Un conjunto de elementos, todos del mismo tipo, en el cual el orden de
los componentes es importante.
e) Almacena los datos de diferentes tipos.

9. La operación de sumar los datos de dos matrices cuadradas:


a) Almacena de forma temporal los datos de la tabla.
b) Suma los datos de las filas, columnas y nivel
c) Suma solo los elementos de las columnas y luego de la filas.
d) Sumar cada una de las posiciones de la matriz y colocar en una tercera
matriz, cada uno de los resultados.
e) Es un método sumamente simple que resulta útil cuando se tiene un
conjunto de datos pequeños

10. Cuál sería la utilidad de las matrices tridimensionales:


a) Almacenar datos temporalmente en una estructura de datos tipo tabla,
conformada por filas y columnas.
b) Almacenar los datos en una tabla de un índice.
c) Permitir almacenar datos de diferentes estructuras.
d) No hay índices de ordenación.
e) Almacenar datos temporalmente en una estructura de datos tipo cubo,
conformada por filas, columnas y nivel.

Algorítmica y Estructura de Datos Página 96


Universidad Privada TELESUP

6. RESUMEN

UNIDAD DE APRENDIZAJE iii

La ordenación es la operación de organizar datos en algún orden secuencial de


acuerdo a un criterio que puede ser creciente o decreciente para los números o
ascendente o descendente (alfabéticamente) para datos de caracteres. El
propósito principal de un ordenamiento es el de facilitar las búsquedas de los
miembros del conjunto ordenado. Los 2 tipos de ordenamientos que se pueden
realizar son: los internos y los externos. Los internos, son aquellos en los que los
valores a ordenar están en memoria principal, por lo que se asume que el tiempo
que se requiere para acceder cualquier elemento sea el mismo.

Los métodos de ordenamiento por selección, que es un algoritmo de selección


que selecciona o busca el elemento más pequeño (o más grande) de todo el
conjunto de elementos y se coloca en su posición adecuada. Tan sólo se
consideran argumentos como el vector a ordenar la longitud del arreglo. El
algoritmo Shell sort mejora el ordenamiento por inserción comparando elementos
separados por un espacio de varias posiciones.

El método de búsqueda secuencial que consiste en recorrer el arreglo o vector


elemento a elemento e ir comparando con el valor buscado (clave). El resultado
de la búsqueda es un solo valor, y será la posición del elemento buscado o cero.
Así que para agilizar la búsqueda el método de búsqueda binaria sería el más
eficiente, así mismo el método búsqueda dicotómica.

El array bidimensional se puede considerar como un vector de vectores. Este


tiene una forma particular de declarar considerando el identificador, indice1,
indice2 y el tipo de elemento. Para las operaciones con los arreglos
bidimensionales se tiene que tener en cuenta estos argumentos para la lectura y
la escritura de la matriz. También se manejan una estructura para el método de
suma como la de Burbuja en arreglos dimensionales.

Algorítmica y Estructura de Datos Página 97


Universidad Privada TELESUP

UNIDAD DE
APRENDIZAJE

INTRODUCCIÓN A LAS ESTRUCTURAS DE


DATOS DINÁMICAS

COMPETENCIA:
Al finalizar esta asignatura será capaz de: “Construir
algoritmos para resolver problemas basados en estructuras de
Algorítmica y Estructura de Datos Página 98
datos dinámicas”.
Universidad Privada TELESUP

2. INTRODUCCIÓN

a) Presentación y contextualización

El alumno desarrolla una actitud analítica y critica que le permita valorar la


importancia en el manejo de las estructuras dinámicas que permiten crear
estructuras de datos que se adapten a las necesidades reales y permitir
construir algoritmos más eficientes.

b) Competencias

Construye algoritmos para resolver problemas basados en estructuras de


datos dinámicas.

c) Capacidades

 Desarrolla aplicaciones utilizando los distintos tipos de listas enlazadas.


 Reconoce los tipos de estructuras de datos y elije la mejor alternativa en
la solución de un problema.
 Construye soluciones utilizando los diferentes tipos de árboles.
 Reconoce los tipos de grafos y su aplicación en la solución de problemas.

d) Actitudes

 Desarrolla una actitud emprendedora mediante la toma de iniciativas.


 Actúa con responsabilidad personal, al cumplir con los horarios
establecidos.
 Respeta a las normas de convivencia.
 Cumple con la presentación de los trabajos encomendados de manera
individual y en equipo.

e) Presentación de ideas básicas y contenido esenciales de la Unidad

La unidad de Aprendizaje 4: Introducción a las Estructuras de Datos Dinámicas,


comprende el desarrollo de los siguientes temas:

1. Lista Simple. Lista Doblemente Enlazadas


2. Pilas y colas
3. Arboles
4. Grafos

Algorítmica y Estructura de Datos Página 99


Universidad Privada TELESUP

TEMA
LISTA SIMPLE.
DOBLEMENTE
ENLAZADA

Algorítmica y Estructura de Datos Página 100


Universidad Privada TELESUP

3. DESARROLLO DE TEMAS

Tema 01

LISTA SIMPLE. DOBLEMENTE ENLAZADAS


LISTA SIMPLE

Una lista de enlace simple es una lista enlazada de nodos, donde cada nodo
tiene un único campo de enlace. Una variable de referencia contiene una
referencia al primer nodo, cada nodo (excepto el último) enlaza con el nodo
siguiente, y el enlace del último nodo contiene null para indicar el final de la lista.
Aunque normalmente a la variable de referencia se la suele llamar top, se puede
elegir el nombre que quiera.

DATO LINK

REPRESENTACIÓN GRÁFICA

La figura presenta una lista de enlace simple de tres nodos, donde top referencia al
nodo A, A conecta con B y B conecta con C y C es el nodo final:

Un algoritmo común de las listas de enlace simple es la inserción de nodos. Este


algoritmo está implicado de alguna forma porque tiene mucho que ver con cuatro
casos: cuando el nodo se debe insertar antes del primer nodo; cuando el nodo se
debe insertar después del último nodo; cuando el nodo se debe insertar entre dos
nodos; y cuando la lista de enlace simple no existe. Antes de estudiar cada caso
consideremos el siguiente pseudocódigo:

DECLARE CLASS Node


DECLARE STRING name
DECLARE Node next
END DECLARE
DECLARE Node top = NULL

Algorítmica y Estructura de Datos Página 101


Universidad Privada TELESUP

LA LISTA DE ENLACE SIMPLE NO EXISTE

Este es el caso más simple. Se crea un Node, se asigna su referencia a top, se


inicializa su campo no de enlace, y se asigna NULL a su campo de enlace. El
siguiente pseudocódigo realiza estas tareas.

top = NEW Node


top.name = "A"
top.next = NULL

ACCIONES BÁSICAS

El nodo debe insertarse antes del primer nodo:

Se crea un Node, se inicializa su campo no de enlace, se asigna la referencia de


top al campo de enlace next, y se asigna la referencia del Node recién creado a
top. El siguiente pseudocódigo (que asume que se ha ejecutado el pseudocódigo
anterior) realiza estas tareas:

DECLARE Node temp


temp = NEW Node
temp.name = "B"
temp.next = top
top = temp

El nodo debe insertarse detrás del último nodo:

Se crea un Node, se inicializa su campo no de enlace, se asigna NULL al campo


de enlace, se atraviesa la lista de enlace simple hasta el último Node, y se
asigna la referencia del Node recién creado al campo next del último nodo.

Algorítmica y Estructura de Datos Página 102


Universidad Privada TELESUP

El siguiente pseudocódigo realiza estas tareas:

temp = NEW Node


temp.name = "C"
temp.next = NULL
DECLARE Node temp2
temp2 = top
WHILE temp2.next IS NOT NULL
temp2 = temp2.next
END WHILE
temp2.next = temp

El nodo se debe insertar entre dos nodos:

Este es el caso más complejo. Se crea un Node, se inicializa su campo no de


enlace, se atraviesa la lista hasta encontrar el Node que aparece antes del nuevo
Node, se asigna el campo de enlace del Node anterior al campo de enlace del
Node recién creado, y se asigna la referencia del Node recién creado al campo del
enlace del Node anterior. El siguiente pseudocódigo realiza estas tareas:

temp = NEW Node


temp.name = "D"
temp2 = top
WHILE temp2.name IS NOT "A"
temp2 = temp2.next
END WHILE
temp.next = temp2.next
temp2.next = temp

La siguiente imagen muestra la inserción del nodo D entre los nodos A y C.

Borrar el Primer nodo:

Asigna el enlace del campo next del nodo referenciado por top a top:

top=top.next;

La siguiente imagen presenta las vistas anterior y posterior de una lista donde se ha
borrado el primer nodo. En esta figura, el nodo B desaparece y el nodo A se
convierte en el primer nodo.

Algorítmica y Estructura de Datos Página 103


Universidad Privada TELESUP

Borrar cualquier nodo que no sea el primero:

Localiza el nodo que precede al nodo a borrar y le asigna el enlace que hay en el
campo next del nodo a borrar al campo next del nodo que le precede. El
siguiente pseudocódigo borra el nodo D:

temp = top
WHILE temp.name IS NOT "A"
temp = temp.next
END WHILE
temp.next = temp.next.next

La siguiente figura presenta las vistas anterior y posterior de una lista donde se ha
borrado un nodo intermedio. En esa figura el nodo D desaparece.

Algorítmica y Estructura de Datos Página 104


Universidad Privada TELESUP

LISTA DOBLEMENTE ENLAZADA

Una lista doblemente enlazada es una lista


enlazada de nodos, donde cada nodo tiene
un par de campos de enlace. Un campo de
enlace permite atravesar la lista hacia
adelante, mientras que el otro permite
atravesar la lista hacia atrás. Para la
dirección hacia adelante, una variable de
referencia contiene una referencia al primer
nodo. Cada nodo se enlaza con el siguiente
mediante el campo de enlace next, excepto
el último nodo, cuyo campo de enlace next
contiene null para indicar el final de la lista
(en dirección hacia adelante).

De forma similar, para la dirección contraria, una variable de referencia contiene una
referencia al último nodo de la dirección normal (hacia adelante), lo que se interpreta
como el primer nodo. Cada nodo se enlaza con el anterior mediante el campo de
enlace previous, y el primer nodo de la dirección hacia adelante, contiene null en su
campo previous para indicar el fin de la lista. La siguiente figura representa una lista
doblemente enlazada de tres nodos, donde topForward referencia el primer nodo en la
dirección hacia adelante, y topBackward referencia el primero nodo la dirección
inversa.

LISTA DE ENLACE CIRCULAR

El campo de enlace del último nodo de una lista de enlace simple contiene un enlace
nulo, ocurre lo mismo en los campos de enlace del primer y último elemento en ambas
direcciones en las listas doblemente enlazadas. Supongamos que en vez de esto los
últimos nodos contienen un enlace a los primeros nodos. En esta situación, terminará
con una lista de enlace circular, como se ve en la siguiente figura:

Algorítmica y Estructura de Datos Página 105


Universidad Privada TELESUP

Las listas de enlace circular se utilizan con frecuencia en procesamiento


repetitivo de nodos en un orden específico. Dichos nodos podrían
representar conexiones de servidor, procesadores esperando una
sección crítica, etc. Esta estructura de datos también sirve como base
para una variante de una estructura de datos más compleja: la cola (que
veremos más adelante).

Listas Enlazadas frente a Arrays (arreglos)

Las listas enlazadas tienen las siguientes ventajas sobre los arrays:

 No requieren memoria extra para soportar la


expansión. Por el contrario, los arrays
requieren memoria extra si se necesita
expandirlo (una vez que todos los elementos
tienen datos no se pueden añadir datos nuevos
a un array).
 Ofrecen una inserción/borrado de elementos
más rápida que sus operaciones equivalentes
en los arrays. Sólo se tienen que actualizar los
enlaces después de identificar la posición de
inserción/borrado. Desde la perspectiva de los
arrays, la inserción de datos requiere el
movimiento de todos los otros datos del array
para crear un elemento vacío. De forma similar,
el borrado de un dato existente requiere el
movimiento de todos los otros datos para
eliminar el elemento vacío.

En contraste, los arrays ofrecen las siguientes ventajas sobre las listas
enlazadas:

Los elementos de los arrays ocupan menos memoria que los nodos porque no
requieren campos de enlace.

 Los arrays ofrecen un acceso más rápido a los datos, mediante índices
basados en enteros.

Algorítmica y Estructura de Datos Página 106


Universidad Privada TELESUP

TEMA
PILAS Y COLAS

Algorítmica y Estructura de Datos Página 107


Universidad Privada TELESUP

Tema 02

PILAS Y COLAS

TIPO DE DATO ABSTRACTO PILA LIFO

Una pila es un tipo especial de lista abierta en la que sólo se pueden insertar y
eliminar nodos en uno de los extremos de la lista. Estas operaciones se conocen
como "push" y "pop", respectivamente "empujar" y "tirar". Además, las escrituras de
datos siempre son inserciones de nodos, y las lecturas siempre eliminan el nodo
leído.

Estas características implican un


comportamiento de lista LIFO (Last In First
Out), en donde el último en entrar es el primero
en salir. Ejemplo, el similar que deriva el
nombre de la estructura es una pila de platos.
Sólo es posible añadir platos en la parte
superior de la pila, y sólo pueden tomarse del
mismo extremo.

El nodo típico para construir pilas es el mismo que vimos en el tema anterior para la
construcción de listas:

Los tipos que definiremos normalmente para manejar


pilas serán casi los mismos que para manejar listas,
tan sólo cambiaremos algunos nombres:

tipoNodo es el tipo para declarar nodos,


evidentemente.

pNodo es el tipo para declarar punteros a un nodo.

Algorítmica y Estructura de Datos Página 108


Universidad Privada TELESUP

Es evidente, a la vista del gráfico, que una pila es una lista abierta. Así que sigue
siendo muy importante que nuestro programa nunca pierda el valor del puntero al
primer elemento, igual que pasa con las listas abiertas.

Teniendo en cuenta que las inserciones y borrados en una pila se hacen siempre
en un extremo, lo que consideramos como el primer elemento de la lista es en
realidad el último elemento de la pila.

TIPO DE DATO ABSTRACTO FILA O COLA FIFO

Las colas son otro tipo de estructura de


datos lineales, las cuales presentan
restricciones en cuanto a la posición en la
cual pueden realizarse las inserciones y
las extracciones de elementos.

Una cola es una lista de elementos en la que se insertan elementos por un extremo
y se eliminan elementos por el extremo opuesto. Como consecuencia, los
elementos de una cola serán eliminados en el mismo orden en que se insertaron.
Es decir, el primer elemento que se metió a la cola será el primero en salir de ella.
En la vida cotidiana existen muchos ejemplos de colas, una cola para pagar
cuentas en el banco, una cola de llamadas telefónicas en una central, una cola de
impresión, etc.

Debido al orden en que se insertan y eliminan los elementos en una cola, también
se le conoce como estructura FIFO (First In, First Out: primero en entrar, primero en
salir).

Algorítmica y Estructura de Datos Página 109


Universidad Privada TELESUP

Representación en Memoria
Las colas no son estructuras de datos fundamentales, es decir, no están definidas
como tales en los lenguajes de programación. Las colas pueden representarse
mediante el uso de:

 Arreglos.
 Listas enlazadas.

REPRESENTACIÓN DE COLAS MEDIANTE ARREGLOS

Existen tres métodos diferentes para representar una cola mediante arreglos:

Primer Método: Se define un arreglo de tamaño máximo y un apuntador al frente


de la cola (primer elemento) y uno al final de la cola (próximo espacio libre). Cada
vez que se inserta un nuevo elemento se incrementa el apuntador del final hasta
que se llega al tamaño máximo más uno. Cada vez que se extrae un elemento el
apuntador al frente debe aumentar en uno hasta que frente es igual a final. La
representación gráfica de una cola es la siguiente: Arreglo: tamaño máximo 4

0 A FRENTE =0
1 B
2 FINAL = 2
3

El problema con este tipo de representación es que si se inserta el tamaño máximo


de elementos del arreglo, no se podrá seguir insertando aunque se hayan extraído
elementos.

Ejemplo: Realice en forma gráfica la siguiente secuencia de operaciones: in(A),


in(B), in(C), out(A), in(D), out(B), out(C), in(E), in(F). Registre cada vez los valores
de frente y final.

La cola está vacía si frente = final y la cola está llena si final = tam_max. En esta
representación tanto la inserción de elementos como la eliminación son de O(1).

Algorítmica y Estructura de Datos Página 110


Universidad Privada TELESUP

Segundo Método: Una forma de solucionar este problema es desplazar los


datos hacia arriba cada vez que se extrae un elemento. De esta forma el dato a
extraer siempre estará en la primera posición del arreglo.

Ejemplo: Realice en forma gráfica la siguiente secuencia de operaciones: in(A),


in(B), in(C), out(A), in(D), out(B), out(C), in(E), in(F). Registre cada vez los valores
de frente y final.

El problema que surge con este método es que la inserción es de O(1) y la


extracción se incrementa a O(n) por tener que hacer los corrimientos.

Tercer Método: Este método consiste en implementar la cola utilizando un buffer


circular, en este caso tanto la inserción como la extracción de elementos se
mantienen de O(1).

El apuntador frente siempre está en la posición donde se debe extraer el próximo


elemento y el apuntador final estará en la posición donde se debe insertar el
próximo elemento, Si final está en la posición del tamaño máximo del arreglo debe
ser inicializado en el primer elemento del arreglo de manera de continuar
circularmente, esto siempre y cuando frente no sea igual al primer elemento, en
cuyo caso la cola estará llena. El apuntador frente debe ser incrementado cada
vez que se extrae un elemento e inicializado en la primera posición del arreglo
cuando se extraiga elemento de la última posición del arreglo, esto siempre y
cuando frente sea distinto de final en cuyo caso la cola estará vacía.

El problema con esta representación es que


la condición frente = final se aplica tanto
para la cola llena como para la cola vacía.
Para solucionar esto se utiliza una variable
para almacenar el número de elementos de
la cola. Si la variable es igual a cero la cola
está vacía, cuando la variable es igual al
tamaño máximo del arreglo la cola está
llena.

Algorítmica y Estructura de Datos Página 111


Universidad Privada TELESUP

Operaciones

Tipo
Operación Dominio Codominio Especificación Descripción
Operación
Cola*InicCola(void Crea una cola
Constructora InicCola Cola
) vacía
void AdicCola Inserta un
Cola,
Modificadora AdicCola Cola (Cola *p, TipoC elemento en el
TipoC
dato) final de la cola
Suprime el
void ElimCola elemento que
Modificadora ElimCola Cola Cola
(Cola *c) está en el frente
de la cola
Devuelve el
TipoC InfoCola elemento que
Analizadora InfoCola Cola TipoC
(Cola *c) está en el frente
de la cola
Devuelve
verdadero (1) si
int VaciaCola(Cola
Analizadora VaciaCola Cola int la cola está vacía
*c)
y falso (0) en
caso contrario
Regresa
verdadero (1) si
int LlenaCola(Cola
Analizadora LlenaCola Cola int la cola está llena
*c)
y falso (0) si no lo
está
void
Libera la
Destructora DestruirCola Cola DestruirCola(Cola
memoria
*c)

Algorítmica y Estructura de Datos Página 112


Universidad Privada TELESUP

TEMA
ÁRBOLES

Algorítmica y Estructura de Datos Página 113


Universidad Privada TELESUP

Tema 03

ARBOLES
DEFINICIÓN DE ÁRBOL

Un árbol es una estructura de datos, que puede


definirse de forma recursiva como: Una
estructura vacía o un elemento o clave de
información (nodo) más un número finito de
estructuras tipo árbol, disjuntos, llamados
subárboles. Si dicho número de estructuras es
inferior o igual a 2, se tiene un árbol binario. Es,
por tanto, una estructura no secuencial.

Otra definición nos da el árbol como un tipo de grafo: un árbol es un grafo acíclico,
conexo y no dirigido. Es decir, es un grafo no dirigido en el que existe
exactamente un camino entre todo par de nodos. Esta definición permite
implementar un árbol y sus operaciones empleando las representaciones que se
utilizan para los grafos. Sin embargo, en esta sección no se tratará esta
implementación.

FORMAS DE REPRESENTACIÓN

Mediante un grafo: Mediante un diagrama


encolumnado:

a
b
c
d
e
f

Figura Nº 1
Algorítmica y Estructura de Datos Página 114
Universidad Privada TELESUP

En la computación se utiliza mucho una estructura de datos, que son los árboles
binarios. Estos árboles tienen 0, 1 ó 2 descendientes como máximo. El árbol de la
figura anterior es un ejemplo válido de árbol binario.

DECLARACIÓN DE ÁRBOL BINARIO

Se definirá el árbol con una clave de tipo entero (puede ser cualquier otra tipo de
datos) y dos hijos: izquierdo (izq) y derecho (der). Para representar los enlaces
con los hijos se utilizan punteros. El árbol vacío se representará con un puntero
nulo. Un árbol binario puede declararse de la siguiente manera:

typedef struct tarbol


{
int clave;
struct tarbol *izq,*der;
} tarbol;

RECORRIDOS SOBRE ÁRBOLES BINARIOS

Se consideran dos tipos de recorrido: recorrido en profundidad y recorrido en


anchura o a nivel. Puesto que los árboles no son secuenciales como las listas, hay
que buscar estrategias alternativas para visitar todos los nodos.

Recorridos en profundidad:

a) Recorrido en preorden: consiste en visitar el nodo actual (visitar puede ser


simplemente mostrar la clave del nodo por pantalla), y después visitar el
subárbol izquierdo y una vez visitado, visitar el subárbol derecho. Es un
proceso recursivo por naturaleza. Si se hace el recorrido en preorden del árbol
de la figura 1 las visitas serían en el orden siguiente: a,b,d,c,e,f.

void preorden(tarbol *a)


{
if (a != NULL) {
visitar(a);
preorden(a->izq);
preorden(a->der);
}}

Algorítmica y Estructura de Datos Página 115


Universidad Privada TELESUP

b) Recorrido en inorden u orden central: se visita el subárbol izquierdo, el


nodo actual, y después se visita el subárbol derecho. En el ejemplo de la
figura 1 las visitas serían en este orden: b,d,a,e,c,f.

void inorden(tarbol *a)


{
if (a != NULL) {
inorden(a->izq);
visitar(a);
inorden(a->der);
}
}

c) Recorrido en postorden: se visita primero el subárbol izquierdo, después el


subárbol derecho, y por último el nodo actual. En el ejemplo de la figura 1 el
recorrido quedaría así: d,b,e,f,c,a.

void postorden(arbol *a)


{
if (a != NULL) {
postorden(a->izq);
postorden(a->der);
visitar(a);
}
}

La ventaja del recorrido en postorden es que permite borrar el árbol de forma


consistente. Es decir, si visitar se traduce por borrar el nodo actual, al ejecutar
este recorrido se borrará el árbol o subárbol que se pasa como parámetro. La
razón para hacer esto es que no se debe borrar un nodo y después sus
subárboles, porque al borrarlo se pueden perder los enlaces, y aunque no se
perdieran se rompe con la regla de manipular una estructura de datos inexistente.
Una alternativa es utilizar una variable auxiliar, pero es innecesario aplicando este
recorrido.

Recorrido en amplitud:

Consiste en ir visitando el árbol por niveles. Primero se visitan los nodos de nivel 1
(como mucho hay uno, la raíz), después los nodos de nivel 2, así hasta que ya no
queden más. Si se hace el recorrido en amplitud del árbol de la figura, una visita
de los nodos sería en este orden: a,b,c,d,e,f

Algorítmica y Estructura de Datos Página 116


Universidad Privada TELESUP

En este caso el recorrido no se realizará de forma recursiva sino iterativa,


utilizando una cola como estructura de datos auxiliar. El procedimiento consiste en
encolar (si no están vacíos) los subárboles izquierdo y derecho del nodo extraído
de la cola, y seguir desencolando y encolando hasta que la cola esté vacía. En
la codificación que viene a continuación no se implementan las operaciones sobre
colas.

void amplitud(tarbol *a)


{
tCola cola; /* las claves de la cola serán de tipo árbol
binario */
arbol *aux;

if (a != NULL) {
CrearCola(cola);
encolar(cola, a);
while (!colavacia(cola)) {
desencolar(cola, aux);
visitar(aux);
if (aux->izq != NULL) encolar(cola, aux->izq);
if (aux->der != NULL) encolar(cola, aux->der);
}
}
}

CONSTRUCCIÓN DE UN ÁRBOL BINARIO

Hasta el momento se ha visto la declaración y recorrido de un árbol binario. Sin


embargo no se ha estudiado ningún método para crearlos. A continuación se
estudia un método para crear un árbol binario que no tenga claves repetidas
partiendo de su recorrido en preorden e inorden, almacenados en sendos arrays.

Antes de explicarlo se recomienda al lector que lo intente hacer por su cuenta, es


sencillo cuando uno es capaz de construir el árbol viendo sus recorridos pero sin
haber visto el árbol terminado.

Algorítmica y Estructura de Datos Página 117


Universidad Privada TELESUP

Partiendo de los recorridos preorden e inorden del árbol de la figura 1 puede


determinarse que la raíz es el primer elemento del recorrido en preorden. Ese
elemento se busca en el array inorden. Los elementos en el array inorden entre
izq y la raíz forman el subárbol izquierdo. Asimismo, los elementos entre der y
la raíz forman el subárbol derecho. Por tanto se tiene este árbol:

A continuación comienza un proceso recursivo. Se procede a crear el subárbol


izquierdo, cuyo tamaño está limitado por los índices izq y der. La siguiente
posición en el recorrido en preorden es la raíz de este subárbol. Queda esto:

El subárbol b tiene un subárbol derecho, que no tiene ningún descendiente, tal y como
indican los índices izq y der. Se ha obtenido el subárbol izquierdo completo de la raíz
a, puesto que b no tiene subárbol izquierdo:

Después seguirá construyéndose el subárbol derecho a partir de la raíz a.

Algorítmica y Estructura de Datos Página 118


Universidad Privada TELESUP

TEMA
GRAFOS

Algorítmica y Estructura de Datos Página 119


Universidad Privada TELESUP

Tema 04

GRAFOS

DEFINICIONES BÁSICAS:

Un grafo es la representación por medio de conjuntos de relaciones arbitrarias entre


objetos. Existen dos tipos de grafos según la relación entre los objetos sea unívoca
o biunívoca. Los primeros forman los grafos dirigidos o dígrafos y los segundos los
grafos no dirigidos o simplemente grafos. En la mayor parte de los algoritmos se
hace referencia a la termología básica que se propone a continuación. Dicha
terminología; no es estándar y puede llegar a variar en los distintos textos que
existen en la materia.

Un grafo dirigido o dígrafo consiste de un conjunto de vértices V y un conjunto de


arcos A. Los vértices se denominan nodos o puntos; los arcos también se conocen
como aristas o líneas dirigidas que representan que entre un par de vértices existe
una relación unívoca aRb pero no bRa. De modo que los arcos se representan
comúnmente por medio de pares ordenados (a,b), donde se dice que a es la
cabeza y b la cola del arco y a menudo se representa también por medio de una
flecha, tal como se muestra en la figura 1.

a b

Figura 1 Grafo dirigido

G V , A donde V  v1 , v2 ,, vn  , A  a1 , a2 ,, an  y ai v j , vk  tal que


v j , vk  V
. En dicho grafo se entiende que
v , v   v , v  y en muchos casos
i j j i

solo existe uno de los pares de vértices.

Algorítmica y Estructura de Datos Página 120


Universidad Privada TELESUP

Un vértice que solo tiene arcos saliendo de él se denomina fuente y un vértice


que solo tiene arcos dirigidos hacia él se denomina sumidero. Dicha
nomenclatura es importante cuando los dígrafos se usan para resolver
problemas de flujos.

Un grafo no dirigido, o grafo, al igual que un dígrafo consiste de un conjunto


de vértices V y un conjunto de arcos A. La diferencia consiste en que la
existencia de aRb presupone que bRa también existe y además que son iguales.
De este modo es indistinto hablar del arco (a,b) o (b,a), tampoco tiene sentido
hablar de la cabeza o la cola del arco. Los grafos representan como lo indica la
figura 2, donde los círculos representan los vértices y las líneas representan los
arcos.

a b

Figura 2 Grafo no dirigido

G V , A Donde V  v1 , v2 ,, vn  ,


A  a1 , a2 ,, an  y ai v j , vk  tal
que v j , vk  V . En dicho grafo se
entiende que v , v   v , v  y
i j j i

además v , v   v , v , donde
i j j i

ambos pares de vértices representan


el mismo arco.

Existen además grafos en donde los arcos tienen asociado algún valor en cuyo
caso hablamos de grafos ponderados y se representan los arcos como tripletas.
Sigue existiendo la información de los vértices unidos por dicho arco además de
la información del peso de dicho arco. Así pues, el arco se representa como
a  vi , v j , w vi , v j w es el peso
donde son el origen y destino y
respectivamente.

Algorítmica y Estructura de Datos Página 121


Universidad Privada TELESUP

Un nodo b se dice que es adyacente al nodo a si existe el arco (a, b), tómese en
cuenta que para un grafo no dirigido necesariamente a es también adyacente a
b. Esto no ocurre en los grafos dirigidos donde la existencia de (a, b) no implica
que (b, a) también existe. Este concepto es de particular importancia dado que
los grafos suelen representarse en la computadora por medio de listas o
matrices de adyacencias.

Un arco (a,b) incide en el nodo b, de igual modo


en grafo no dirigido dicho arco también incide en
el nodo a debido a que también existe (b, a). El
número de arcos que inciden en un nodo le
otorga el grado a dicho nodo. El nodo con mayor
grado en el grafo le indica el grado de dicho
grafo. También se acostumbra representar a un
grafo por medio de listas o matrices de
incidencias.

MÉTODOS DE REPRESENTACIÓN EN COMPUTADORA


Existen varias formas de representar un grafo en la computadora y cada una
tiene sus ventajas y desventajas. Mostraremos las más comunes y la forma de
implementarlas.

La primera forma es por medio de una matriz de adyacencias, con este método
se tiene una matriz de tamaño nxn, donde n es el número de vértices o nodos en
el grafo. Una forma simple de ver la información guardada en dicha matriz es
que los renglones de las mismas representan el origen y las columnas el destino
de cada arista o arco en el grafo.

Si el grafo es no ponderado se acostumbra poner un cero en el renglón i,


columna j, de la matriz cuando no existe dicho arco, y un uno cuando dicho arco
existe en el grafo. En el caso de grafos ponderados, se acostumbra poner una
bandera (normalmente el valor de infinito) en las posiciones donde no existe un
arco y el peso correspondiente en las posiciones donde si existe.

Algorítmica y Estructura de Datos Página 122


Universidad Privada TELESUP

1 2 1 2 3 4 5
1 0 1 0 0 1
3 2 1 0 1 1 1
3 0 1 0 1 0
5 4 4 0 1 1 0 1
5 1 1 0 1 0

Figura 3 Grafo no ponderado y su matriz de adyacencia

Debe notarse que para un grafo no dirigido la matriz de adyacencia es simétrica y que
la diagonal principal contiene ceros. Esto puede llegar a aprovecharse para ahorrar
tiempo en algunos algoritmos.

La representación por medio de matriz se prefiere para algoritmos donde el número de


arcos es grande en proporción al número de vértices. Si sucediera lo contrario se
prefiere la representación por medio de listas de adyacencia .

2 5/

1 5 3 4

2 4
/
2 5 3
/
4 1 2
/

Figura 4 Lista de adyacencia para el grafo de la figura 3

ALGORITMO DE WARSHALL
Es el algoritmo más eficiente, permite calcular las potencias de la matriz de
adyacencia A, y permite encontrar la matriz sumatoria B.

Algorítmica y Estructura de Datos Página 123


Universidad Privada TELESUP

Para un grafo dirigido G con m nodos V= { v 1, v2, v3, …., vm} se llama la matriz de
caminos P de la siguiente manera:

Pk(i,j) = 1 si existe un camino simple de Vi a Vj que no usa otros nodos aparte de


posiblemente v1, v2, v3, …., vm

Pk(i,j) = 0 es otro caso

Warshall observo que Pk(i,j)=1, Cuando :

1. Existe un camino simple de vi a vj, Pk-1(i,j)=1


2. Existe un camino simple de vi a vk y otro camino simple de vk a
vi, Pk-1(i,k)=1 y Pk-1(k,j)=1
3. Los elementos de la matriz Pk se obtiene de la siguiente manera:
Pk(i,j)=Pk-1(i,j) o Pk-1(i,k) y Pk-1(k,j)

Procedimiento Warshall
Para i=1 a m hacer
Para j=1 a m hacer
Si A[i,j]=0 entonces
P(i,j)=0
Else
P(i,j)=1
Fin si
Fin Para
Fin Para

Para k=1 a m hacer


Para i= 1 a m hacer
Para j=1 a m hacer
P(i,j)= P(i,j) o P(i,k) y P(k,j)
Fin Para
Fin Para
Fin Para

Fin Procedimiento

Algorítmica y Estructura de Datos Página 124


Universidad Privada TELESUP

3. LECTURAS RECOMENDADAS

 Definición del Árbol


http://www.algoritmia.net/articles.php?id=17

 Estructura FIFO
http://www.youtube.com/watch?v=nFzHFHvZAoI

4. ACTIVIDADES Y EJERCICIOS

1. Escribir el pseudocódigo que efectué la búsqueda de un dato y a


continuación elimine el dato del nodo anterior en una lista enlazada.
 Envía esta actividad a través de “Lista enlazada”.

2. Se considera una cola frente a una ventanilla en la cual al llegar a la misma


no puede ser atendido, se le reintegra a la cola a la posición Nº 10, si hay
más de 10 personas o al final de la misma, en caso contrario. Diseñar un
procedimiento de ATENCION (lo que debe suceder cuando un cliente es
atendido). REINGRESO (vuelta a la cola) y otro de INGRESO (inicial) en la
cola.
 Envía esta actividad a través de “Cola”.

Algorítmica y Estructura de Datos Página 125


Universidad Privada TELESUP

5. AUTOEVALUACIÒN

1. La estructura de datos lista simple es:


a) Una estructura unidimensional con nodos.
b) Una lista enlazada de nodos, donde cada nodo tiene un único campo de
enlace.
c) No tiene elementos de enlace al siguiente elemento.
d) No tiene nodo de finalización.
e) Los elementos se enlazan uno por cada elemento.

2. Una lista doblemente enlazada es:


a) Una lista enlazada de nodos, donde cada nodo tiene un par de campos de
enlace.
b) Es un conjunto de una lista simple en forma de doble enlace.
c) El último elemento de la lista es nulo y se enlaza con el primero.
d) Aquello donde no hay elementos de enlace en los nodos.
e) Cuando solo existe el primer enlace de los nodos.

3. Una lista de enlace circular es:


a) El campo de enlace del último nodo de una lista de enlace simple que
contiene un enlace nulo.
b) El campo de enlace del primer y último elemento en ambas direcciones en
las listas doblemente enlazadas.
c) Cuando no hay un último elemento o nodo que apunte al primer elemento
d) Cuando la estructura de datos lista enlazada simple, el nodo final de la
lista, el que en su campo de enlace tenía null, apunta al primer nodo de la
lista
e) El último elemento de la lista contiene el elemento null

4. El tipo de dato abstracto, de tipo pila o LIFO es:


a) Una lista donde el último elemento en ingresar, es el último elemento en
salir.
b) Cuando no hay lugar para poder sacar un elemento de la lista.
c) Cuando siempre los elementos están doblemente enlazados
d) El primer elemento ingresado, es último en salir de la lista.
e) Una lista abierta que permite insertar y eliminar nodos en uno de los
extremos de la lista

5. Un tipo de dato abstracto, de tipo cola o FIFO, corresponde a:


a) Elementos de una lista circular.
b) Listas de datos doblemente enlazadas.
c) Una lista de elementos en la que se insertan elementos por un extremo y
se eliminan elementos por el extremo opuesto
d) Una estructura en forma recursiva
e) Una estructura con un solo elemento o vacio.

Algorítmica y Estructura de Datos Página 126


Universidad Privada TELESUP

6. La definición de un árbol:
a) Una estructura de datos, que define de forma iterativa.
b) Una estructura no vacía o un elemento de información (nodo)..
c) Hay un número infinito de estructuras tipo árbol, disjuntos, llamados
subárboles.
d) Una estructura de datos no secuencial.
e) Un árbol es un grafo acíclico, conexo y no dirigido. Es decir, es un grafo
no dirigido en el que existe exactamente un camino entre todo par de
nodos.

7. El tipo de recorrido sobre árboles binarios puede ser:


a) Recorrido en preorden e inorden.
b) Recorrido en preorden y postorden.
c) Recorrido en preorden e inorden.
d) Recorrido en profundidad y recorrido en anchura o a nivel.
e) Recorrido preorden, postorden e inorden.

8. Un recorrido en preorden significa:


a) Visitar el nodo actual, después visitar el subárbol izquierdo y luego visitar el
subárbol derecho.
b) Visitar el subárbol izquierdo, el nodo actual, después visitar el subárbol
derecho.
c) Visitar el subárbol derecho, después el derecho del nodo actual
d) Visitar el subárbol izquierdo, después el nodo actual y luego el subárbol
derecho
e) Visitar primero el subárbol izquierdo, después el subárbol derecho, y por
último el nodo actual.

9. La definición de grafo:
a) No es la representación por medio de conjuntos de relaciones arbitrarias
entre varios objetos.
b) Un conjunto de vértices sin relación determinada
c) Un conjunto de elementos, nodos y vértices relacionados entre los
elementos.
d) Un conjunto de vértices y elementos sin relación determinada.
e) Un conjunto de nodos.

10. Un dígrafo o grafo no dirigido es:


a) Un conjunto de elementos, nodos y un conjunto de arcos relacionados.
b) Un conjunto de vértices y elementos con una relación determinada.
c) Un conjunto de arcos sin relación con los nodos.
d) Un estructura de datos estática
e) Cuando no hay representación de dígrafo.

Algorítmica y Estructura de Datos Página 127


Universidad Privada TELESUP

6. RESUMEN

UNIDAD DE APRENDIZAJE IV:

Las estructuras de datos es una colección de datos que pueden ser caracterizados
por su organización y las operaciones que se definen de ella. En general el algoritmo
y la estructura de datos que manipulará estarán muy relacionados. Según su
comportamiento durante la ejecución del programa distinguimos estructura de datos
dinámicas, su tamaño en memoria es variable. Este tipo de estructura se divide en:
Lineales: son aquellas estructuras donde los datos se almacenan en zonas sucesivas
o adyacentes, es decir una detrás de otra. Ejemplo: listas enlazadas, pilas, colas. Y
las no lineales, aquí cada elemento puede tener diferentes “siguientes” elementos,
teniendo el concepto de bifurcación, ya no hay linealidad; ejemplos: árboles, grafos.

Las listas son estructuras de datos secuenciales de 0 o más elementos de un tipo


dado almacenados en memoria. Son estructuras lineales, donde cada elemento de la
lista, excepto el primero, tiene un único predecesor y cada elemento de la lista,
excepto el último, tiene un único sucesor.
La pila es una estructura lineal, es una lista o secuencia finita de elementos de algún
conjunto donde las inserciones y eliminaciones se realizan por un solo extremo de la
lista, llamada cima o tope.

Una cola es una lista lineal en la cual las eliminaciones se realizan solo por un
extremo llamado frente y las inserciones se realizan por los extremos llamados final.
Ejemplos de cola de la vida diaria, se ven en los cines, en los bancos, los estadios,
etc., la impresión de múltiples trabajos que tienen que esperar de acuerdo a su orden
de llegada.

Los árboles representan estructuras no lineales y dinámicas. Se dice dinámica


puesto que la estructura del árbol puede variar durante la ejecución del programa. No
lineales porque a cada elemento del árbol puede seguirle varios elementos. Un árbol
es una estructura jerárquica aplicada sobre una colección de elementos u objetos
llamados nodos, uno de los cuales se llama raíz.

Algorítmica y Estructura de Datos Página 128


Universidad Privada TELESUP

GLOSARIO

1. BIFURCACIÓN: es una característica que permite a una colección de


archivos desarrollarse en dos o más rutas de acceso divergentes.
2. FIFO: es el acrónimo inglés de First In, First Out (primero en entrar, primero
en salir).
3. LIFO: es el acrónimo inglés de Last In First Out (último en entrar, primero en
salir).

FUENTES DE INFORMACIÓN

FUENTES ELECTORNICAS:
 Fundamentos de Programación y Estructura de Datos
http://www.scribd.com/doc/8032086/fundamentos-de-programacion-
algoritmos-y-estructura-de-datos
 Listas y Pilas
http://www.slideshare.net/zamanthag/listas-y-pilas

 Grafo Definiciones
http://materias.fi.uba.ar/6107/grafos_definiciones.pdf
 Estrucutra de Datos y Algoritmica de Datos
http://www.programacion.com/articulo/estructuras_de_datos_y_algoritmos
_en_java_309
 Algoritmica y Estruicutra de Datos
Http://Www.Frlp.Utn.Edu.Ar/Materias/Algoritmos/
FUENTES BIBLIOGRAFICAS:

 LAFORE, Robert Data Structures & Algoritms in Java Waite Group Press. 1988 by
The Waite Group, Inc. USA. 2005.
 DALE, Y LILLY Algoritmos + Estructura de Datos = Programas. Ediciones Castillo.
Data Structures and Algorithms. Scientific Amercian, 2005
 DEITEL, H. M. Y DEITEL, P. J Guía de Programación Súper Java 2 . 2006
 JOYANES AGUILAR, Luis 2006 Fundamentos de programación: algoritmos y
estructuras de datos: Madrid: McGraw-Hill. 714 p.
 Robert Pantigoso Silva 2007 Fundamentos de Programación: Algoritmos y
Diagramas de Flujo Segunda Edición

Algorítmica y Estructura de Datos Página 129


Universidad Privada TELESUP

CLAVES DE LA AUTOEVALUACIÓN

UNIDAD DE UNIDAD DE
APRENDIZAJE 1 APRENDIZAJE 2
1. a) 1. b)
2. e) 2. e)
3. b) 3. c)
4. c) 4. c)
5. b) 5. d)
6. b) 6. e)
7. c) 7. a)
8. c) 8. a)
9. e) 9. c)
10. a) 10. d)

UNIDAD DE
UNIDAD DE
APRENDIZAJE 4
APRENDIZAJE 3 1. b)
1. b)
2. a)
2. b)
3. d)
3. e)
4. e)
4. c)
5. c)
5. b)
6. e)
6. a)
7. d)
7. e)
8. a)
8. d)
9. c)
9. d)
10. a)
10. e)

Algorítmica y Estructura de Datos Página 130

También podría gustarte