Jlondonop1@ucentral - Edu.co: Libros
Jlondonop1@ucentral - Edu.co: Libros
Libros:
1.Modelo Pseudo Matemático para el Diseño de las Bases de Datos
Relacionales ISBN
contenido temático
1
- concepto generales de las estructuras de Datos
- Breve repaso de las “estructuras de datos NO dinámicas” (vectores -
matrices)
- Introducción a las “estructuras de dinámicas” / Definición y arquitecturas de
las estructuras dinámicas
2
- Definición de las “listas de enlace simple” con estructuras dinámicas /
elaboración de código (lenguaje “c” / Lenguaje Java)
- Operaciones de adición, eliminación, modificación, lenguaje de “nodos” de
memoria dinámica
3
- Definición de “Listas de enlaces doble“ con estructuras Dinámicas -
elaboración del código (Lenguaje “c” / Lenguaje Java)
- Operaciones de adición, eliminación, modificación, lenguaje de “nodos” de
memoria dinámica
4
- Definición operativa de las “colas” en las listas de memoria dinámica
- Elaboración del código para la creación de una lista en modo “cola”
- Operaciones de insercion, modificacion y borrado de nodos dentro de los
conceptos de colas
5
- Definición operativa de las “Pilas” en las listas de memoria dinámica
- Elaboración del código para la creación de una lista de modo “Pila”
Baldwin José Palencia Serrano
8
- Productos para usuarios construidos en Java, de tipo ArrayList conceptos de
su fundamentación en las estructuras de datos
- Elaboración del código (Lenguaje Java) para el manejo de los datos
utilizando ArrayList
9
- Productos para usuarios construidos en java, de tipo Hashmap / conceptos
fundamentación en las sistemas de datos
- Elaboración del código (Lenguaje Java) para el manejo de los datos
utilizando Hashmap
10
- conceptos básicos de las “Tablas” de las bases de datos relacionales, a partir
del uso de las estructuras de datos dinámicas (nodos)
- Introducción al manejo de bases de datos a través del uso de un motor B.D
como MysQL
Forma de calificación:
40% Elaboración del documento de la materia: Tema de clase / Talleres, Trabajos
en clase, en casa / una conclusión en 5 líneas por cada tema tratado por clase
30% Parcial o prueba individual de evaluación del corte
20% Talleres, ejercicios, trabajos en clase, casa
10% Apreciativa (actitud, participación)
100% cada corte
Compromiso en clase:
- pre esencialidad, cumplimiento de horario, puntualidad
- Respeto bi unívoco: trato, disciplina, tacto, sana tolerancia
- Responsabilidad con la materia: Trabajos, talleres, estudios.
Baldwin José Palencia Serrano
Capítulo 1
1.1 Repaso de las estructuras de datos “No Dinámica”:
Los vectores y matrices, son estructuras de datos “no dinámicas”, en razón a que su
tamaño inicialmente definido, “NO” podrá ser modificado posteriormente, ejemplos:
Vector a
i 0 1 2
este vector “a[4]” no podrá ser aumentado a “a[5]”, en caso de sucederse, se estará
haciendo referencias a un nuevo vector, es decir, se están redefiniendo,
ocasionando que los datos antes almacenados, se pierdan
Si: a[4]
Inicialment
a 10 5 7
e definido
12
0 1 2 3
Entonces: a[5] posteriormente redefinido
a x x5 7x
10
los datos
x 1 2
0 3
iniciales
“desaparecen,
se comprende”
Matriz:
j
a 3 1
j
7 1
filas columnas
igual, esta matriz a[2][2], no podrá ser aumentado a a[3][3], en caso de sucederse,
se estará haciendo referencia a una nueva matriz, es decir, se estará redefiniendo
ocasionando que los datos antes almacenados se pierdan.
a x3 x los datos
x 1 x inicialmente
7 1 desaparecen, se
comprenden como
Baldwin José Palencia Serrano
(vector) (vector)
Java: C++
int 5 8
Desaparec
en:
Cuando se trabaja con “memoria dinámica”, los nombres de vectores y matrices
reciben el nombre de “listas”, y estas se crean con base en pequeñas secciones,
denominadas “nodos”.
con base a lo anterior, cuando se “alcanza los nodos” se crean las “listas” y estas
tienen de particular que dentro del mismo programa podrá “adicionarse nodos” a
una “lista” inicial, sí que se pierdan los datos guardados en nodos anteriores:
sección
para sección para guardar la
guardar “dirección” del nodo siguiente,
un dato permitiendo el enlace
50 30 10 For (0 hasta
Entonces:
Baldwin José Palencia Serrano
Se
sigue
50 30 10 80 60 For (0
1 2 3 4
Nuevo for
No se Se
A lo contrario de memorias NO dinámicas, las memorias dinámicas que es diferente
a lo anterior no se pierden ni borran sus datos, si no que que crea otro “for” para
crear nuevos nodos con base a los que ya estaban creados así mismo siguen
enlazados que son los vectores y matrices recibiendo el nombre de listas. lo que las
hace flexibles y adecuadas para programar donde se requiera una gestión dinámica
de datos.
Capítulo 1:
1.3 Arquitecturas basicas de programacion en java y en c++, para el manejo de
“nodos” de memoria dinámica:
C++ Java
}
}
Tipos de nodos
Baldwin José Palencia Serrano
-Monovalor:
solo un valor
podría
ser :numérico o
alfanumérico
dato enlace
-Multivalor simple
datos datosdatosenlace
: podrán ser
numéricos,
alfanuméricos o mixtos
varios valores
Varios valores
enlac
e
:Podrá ser
0 1 2 3 numérico o
alfanumérico
enlace
C++ Java
Capítulo 2:
2.1 Elemento esenciales de un nodo de memoria dinámica:
p: Podra ser cualquier otra letra o nombre, que tendrá la
propiedad para “crear un nodo de memoria dinámica”
Apuntador de Cab: podrá ser cualquier otro nombre,”indica cabecera”, se
una nueva utiliza para guardar el nodo de inicio creado dentro de
dirección de
un ejercicio de enlaces de nodos
la “memoria”
q: Podrá ser cualquier otra letra o nombre, se utiliza para guardar
el “p” anterior, cuando se sucede un nuevo “p”
Abstracción:
Baldwin José Palencia Serrano
guardar la “direccion”
o ubicacion de un
nodo siguiente
dato enlace
p
nodo p
cab inicial
q
p=new nodo();
Dirección en la ram donde
p se creó el nodo (ASCII)
system. out. println(“ingrese el valor”);
valor=tc.nextInt;
Java
import java.util.Scanner;
class nodo{
int dato;
nodo enlace;
}
public class Nodos {
public static void main(String[] args) {
p=new nodo();
System.out.print("Ingrese el valor: ");
valor=tc.nextInt();
p.dato=valor;
if (i==0) {
cab=p;
q=p;
}
else {
q.enlace=p;
q=p;
}
}
p=cab;
for (i = 0; i < 2; i++) {
System.out.println("Valor es: "+p.dato);
p=p.enlace;
}
}
}
dato enlac
apuntadores a la
“memoria”
llamada nodo p
Java
nodo
q
Package ___; cab
import ___;
import ___;
class nodo
{
int dato;
nodo
enlace;
}
public class ___;
1→ {
public static void main(String[]args)
2→{
int valor, i;
Scanner tc=new Scanner
(System.in);
nodo p=new nodo();
nodo q=new nodo();
nodo cab=new nodo();
for(i=0; i<4; i++)
{
p=new nodo();
System.out.println(“va
lor..”)
valor= tc.nextInt();
p.dato=valor;
if(i==0)
{
cab=p;
q=p;
}
else
{
q.enlace=p;
q=p;
}
}
p=cap
for(i=0; i<4; i++)
{
System.out.println(“Valor
es..”+p.dato);
p=p.enlace;
2→}
1→ }
Baldwin José Palencia Serrano
Monovalor:
class nodo struct nodo
{ {
int dato; int dato;
nodo enlace; struct nodo *enlace;
} };
Java C++
Aplicación:
Java: C++:
class nodo struct nodo
{ {
int dato1; int dato1;
int dato2; int dato2;
int dato3; int dato3;
nodo enlace; struct nodo *enlace;
} }
dato1 dato2dato3enlace
sección sección
datos enlace
Java
Baldwin José Palencia Serrano
import java.util.Scanner;
class nodo{
int dato1;
int dato2;
int dato3;
nodo enlace;
}
p=new nodo();
System.out.print("Ingrese el valor 1: ");
valor1=tc.nextInt();
System.out.print("Ingrese el valor 2: ");
valor2=tc.nextInt();
System.out.print("Ingrese el valor 3: ");
valor3=tc.nextInt();
p.dato1=valor1;
p.dato2=valor2;
p.dato3=valor3;
if (i==0) {
cab=p;
q=p;
}
else {
q.enlace=p;
q=p;
}
}
p=cab;
for (i = 0; i < 4; i++) {
System.out.print("Valor es: "+p.dato1+"\n"+
"Valor es: "+p.dato2+"\n"+
"Valor es: "+p.dato3+"\n");
p=p.enlace;
}
}
}
C++
Baldwin José Palencia Serrano
#include <iostream>
using namespace std;
struct nodo {
int dato1;
int dato2;
int dato3;
nodo* enlace;
};
int main() {
int valor1, valor2, valor3, i;
nodo* p;
nodo* cab;
nodo* q;
for (i = 0; i < 4; i++) {
p = new nodo;
cout << "Ingrese el valor 1: ";
cin >> valor1;
cout << "Ingrese el valor 2: ";
cin >> valor2;
cout << "Ingrese el valor 3: ";
cin >> valor3;
p->dato1 = valor1;
p->dato2 = valor2;
p->dato3 = valor3;
p->enlace = nullptr;
if (i == 0) {
cab = p;
q = p;
} else {
q->enlace = p;
q = p;
}
}
p = cab;
for (i = 0; i < 4; i++) {
cout << "Valor es: " << p->dato1 << "\n"
<< "Valor es: " << p->dato2 << "\n"
<< "Valor es: " << p->dato3 << "\n";
p = p->enlace;
}
// Liberar memoria
p = cab;
while (p != nullptr) {
nodo* temp = p;
p = p->enlace;
delete temp;
}
return 0;
}
Baldwin José Palencia Serrano
En este ejercicio tanto java como c + +, consta de 4 nodos los cuales cada uno
tendrá 3 valores enteros ingresado por el usuario, creando así una lista de 12
valores, el cual utilizando una clase llamado “nodo” que tiene campos para los
valores y un puntero al siguiente nodo. luego, itera a través de una lista y muestras
así los valores de cada nodo.
Segundo Semestre
Capítulo 2: Una lista es una concatenación o unión de “nodos” que cumple con
una orientación o un sentido determinado; la concatenación se puede orientar hacia
la izquierda o hacia la derecha del “nodo” que haya sido indicado como cabecera.
Abstracción:
Derech
: Si el “enlace” está
ca a la derecha del
dato enla
nodo, la “lista”
: Si el “enlace” está a
la izquierda del nodo,
Izquier la “lista” crecerá hacia
dato enla ca if(n==0)
{
Java C++ cab=p;
q=p;
class nodo{ Struct nodo{ }
Int dato; Int dato; else
nodo Struct nodo { q.enl
enlace; enlace*; ace=p;
q=p; “la lógica es la
misma”; quien
define el sentido por
class nodo{ Struct nodo{ if(n==0)
donde se enlaza, la
nodo Struct nodo {
enlace; enlace*; cab=p;
Int dato; Int dato; q=p;
}
else
{ q.enl
ace=p;
q=p;
Baldwin José Palencia Serrano
q
p
xp q
Una lista es una estructura de datos compuesta por la unión de “nodos” que siguen
una dirección específica, ya sea hacia la izquierda (Colas) o hacia la derecha
(Pilas), partiendo del nodo principal denominado cabecera. Estos nodos se
conectan sucesivamente, creando una secuencia ordenada que permitirá el acceso
y manipulación de datos de acuerdo con la orientación establecida por el usuario.
Por otro lado, el parcial contaba con 4 nodos y el manejo de dos For para la matriz
2x2.
Baldwin José Palencia Serrano
Izquie Derec
p
ca
q
CIzquie
Java: ++:
class nodo struct nodo
{ {
nodo enlacei; struct nodo
int dato; *enlacei;
Derec
Explicación: crear una lista de doble enlace: cabecera, más 2 nodos por derecha, 2 nodos
por izquierda: → 5 nodos.
Baldwin José Palencia Serrano
enlaza por
derecha
conta=conta+1;
}
else{
if(n==2){
cab.enlacei=p;
Listas de doble enlace.
enlace enlace
Izquierda derecha
(Recordando enlace 5
nodos)
dato
4 3 0 1 2
xp p
Enlace Derecha q Enlace
cab Izquierda
Baldwin José Palencia Serrano
p=new nodo();
System.out.println(“nodo..”)
valor= tc.nextInt();
p.dato=valor;
if(n==0){
cab=p;
q=p;
}
else
{ Pregunta Clave:
if(n<3){ Verificar el instante en que
q.ed=p; se deja de enlazar por
q=p; derecha, para iniciar por
} izquierda
else{
if(n==3){
cab.ei=p;
q=p;
}
else{
q.ei=p;
q=p;
}
}
}
}
p=cab;{
derecha
}
p=cab;{
izquierda
}
import java.util.Scanner;
class nodo{
int dato;
nodo enlace,ed,ei;
p=new nodo();
System.out.print("Nodo: ");
valor=tc.nextInt();
p.dato=valor;
if (n==0) {
cab=p;
q=p;
}
else {
if(n<3){
q.ed=p;
q=p;
}
else {
if(n==3) {
cab.ei=p;
q=p;
}
else {
q.ei=p;
q=p;
}
}
}
}
p=cab;
for (n = 0; n < 3; n++) {
System.out.print("Valores por derecha "+p.dato+"\n");
p=p.ed;
}
p=cab;
for (n = 0; n < 3; n++) {
System.out.print("Valores por izquierda: "+p.dato+"\n");
p=p.ei;
}
}
}
#include <stdio.h>
#include <stdlib.h>
struct Nodo {
int dato;
struct Nodo* enlace;
struct Nodo* ed;
struct Nodo* ei;
};
int main() {
int valor, n;
struct Nodo* p = NULL;
struct Nodo* cab = NULL;
struct Nodo* q = NULL;
printf("Nodo: ");
scanf("%d", &valor);
p->dato = valor;
if (n == 0) {
cab = p;
q = p;
} else {
if (n < 3) {
q->ed = p;
q = p;
} else {
if (n == 3) {
cab->ei = p;
q = p;
} else {
q->ei = p;
q = p;
}
}
}
}
p = cab;
for (n = 0; n < 3; n++) {
printf("Valores por derecha: %d\n", p->dato);
p = p->ed;
}
p = cab;
for (n = 0; n < 3; n++) {
printf("Valores por izquierda: %d\n", p->dato);
p = p->ei;
}
p = cab;
while (p != NULL) {
struct Nodo* temp = p;
p = p->ed;
free(temp);
}
return 0;
}
Una lista de enlaces dobles es una estructura de datos que consta de “nodos”
conectados de manera bidireccional, lo que significa que cada nodo tiene
referencias tanto al nodo anterior como al siguiente en la secuencia, teniendo una
prioridad para los enlaces, ya que si esta no tiene datos correrá por la izquierda,
pero si tiene datos en ambos enlaces este irá por la derecha. Por otra parte, la pila
crece por la derecha y cola por la izquierda.
- Sección de “datos”
Se abstrae entonces, que la estructura de enlaces crece hacia atrás del “nodo
cabecera” y que respetando el concepto lógico de una “cola”, el primer nodo en ser
“atendido”, será el de cabecera, posteriormente en su orden los nodos que aparecen
detrás. Se dice que el manejo de “colas” se utiliza el siguiente principio:
Aplicación:
- Crear un enlace de nodos por la izquierda de la cabecera (5 nodos)
- Mostrar los nodos
- Eliminar el primer nodo o cabecera según lo definido
- renombrar la nueva cabecera
- Mostrar nodos
for(n=0; n<5; n++){
p=new nodo();
valor=tc.nextInt();
p.matriz[i]
[j]=valor;
Nod
if(i==0){ e Dat
cab=p; q
q=p;
} Ca Ca
p p
else
{ q
q.ei=p;
q=p;
}
}
p=cab;
for(n…5..){
Baldwin José Palencia Serrano
Manejo de colas: Está claro que una “cola” se contribuye, haciendo los
“enlaces” por el lado izquierdo de los “nodos”, a partir de la “cabecera”
Cab Cab
Fin Cab
adició
n
Aplicación
- Un primer “for” para crear una “cola” con 3 nodos
- Un segundo “for” para adicionar a la cola 3 nuevos nodos
import… n
…… primer for(....){
class nodo{ p=new nodo();
nodo ei; -ingrese valor
int dato; y asignar
}
if(n==0){ primer nodo de la
public class colas{ fin.ei=p; 2da tanda de
public… q=p;
} p }
: ca else{
: nod q.ei=p;
q q=p;
for(....){ fin }
primer crear cola }
} fin=p;
fin=p p=cab; p=cab;
for(){ for(...<6…){
mostrar }
} }cierra public static
}cierra public class
import java.util.Scanner;
class nodo{
nodo ei;
int dato;
}
p=new nodo();
Baldwin José Palencia Serrano
System.out.print("Nodo: ");
valor=tc.nextInt();
p.dato=valor;
p=cab;
for (n = 0; n < 3; n++) {
System.out.print("Valores por derecha "+p.dato+"\n");
//p=p.ed;
}
p=cab;
for (n = 0; n < 3; n++) {
System.out.print("Valores por izquierda: "+p.dato+"\n");
p=p.ei;
}
}
}
CODIGO
El manejo de colas implica una estructura de datos (FIFO). Se utiliza para organizar
elementos en orden de llegada. Las operaciones que este realiza son la de agregar
elementos al final y eliminar el primer elemento. Las colas son eficaces para
garantizar el orden de procedimiento y fundamentales en para situaciones que
requieren ordenamientos secuenciales. Su aplicación se da por el último nodo
incorporado que guarda al siguiente en sucesión.
Capítulo 5
Estructura de “Pilas”
Recreando, una “cola”se construye de la “cabecera” hacia “atrás”, es decir, haciendo
“enlaces” por la izquierda; la “eliminación” de los nodos se sucede a partir de la
cabecera; la “adición” de “nodos”, se sucede a partir del último nodo, es decir, a
partir del nodo indicado como fin, el último a la derecha.
Todo lo anterior hace parte de lo que se conoce como “FIFO” First Input / First
Output (primero en entrar - primero en salir). Ahora, una pila se construye de la
“cabecera” hacia adelante, es decir, haciendo “enlaces” por la derecha; la
“eliminación” de nodo que se encuentre en la “cima”, es decir, el nodo que dentro
este escenario se identifique como “fin”; así mismo la “adición” de nodos, se
sucederá a partir del nodo identificado como fin, el último a la derecha.Todo lo
anterior hace parte de lo que se conoce como “LIFO”: Last Input / First Output
(Último en entrar - primero en salir).
Baldwin José Palencia Serrano
Colas: bien, solo enlace por izquierda y funciona para adicionar y eliminar
Pilas: Requiere de “doble enlace”, para poder eliminar - adicionar solo lo haría con
enlaces simples por derecha
Abstracción
x
:
:Construcció
n
Cabecera Fin
(cima)
:Eliminación
:Adición
Fin Fin
(cima)
Baldwin José Palencia Serrano
import…
……
class nodo{ for(....){
int dato; “superclav p=new nodo();
nodo ed; -ingrese
} valor y asignar
q.ed=p;
Por explicacion y comprension queda entendido, que las “colas” solo exigen de un
“enlace” para hacer posible su construcción enlazando nodos y su operación de
eliminación de nodos.
Las “pilas” en cambio, necesitan de “Doble Enlace” entre nodos, con lo cual después
de su construcción, se hace posible la operación de “Eliminación”, de lo contrario
sería posible
Guarda dirección del nodo
dato
e e
: Crear Nodos
: eliminar 2
fin
ca
Guarda dirección del nodo
Baldwin José Palencia Serrano
- Mostrar pilas
p=cab;
for (n = 0; n < 4; n++) {
System.out.print("......"+p.dato);
p=p.ed;
}
import java.util.Scanner;
class nodo{
nodo ei;
int dato;
nodo ed;
Baldwin José Palencia Serrano
}
public class Pilas {
public static void main(String[] args) {
if (n==0) {
cab=p;
q=p;
}
else {
q.ed=p;
p.ei=q;
q=p;
}
}
fin=p;
p=cab;
p=fin;
}
}
Terminar el código
Es importante destacar que las colas se construyen y operan de manera que utilizan
un enlace simple entre nodos, lo que facilita su compresión y funcionamiento, las
pilas requieren un doble enlace entre nodos para permitir la operación de
eliminación una vez construidas. En ambos casos, la elección del tipo de enlace es
crucial para la correcta implementación y funcionalidad
Baldwin José Palencia Serrano
Capítulo 6
Grafos:
Un grafo es una “Estructura de datos cerradas”, con lo cual se diferencia de las
denominadas “Lista” que son abiertas y lineales, y que crecen a la izquierda o la
derecha.
Los grafos configuran “mallas de nodos” que se caracterizan por finalizar en un nodo
confluyente; los grafos para su construcción, siempre se apoyan en una “Matriz de
adyacencia”, que permiten con antelación definir el tipo de estructura que se quiere;
la característica particular de los nodos de un grafo es la de tener 2 enlaces, pues
siempre es partir de un nodo se tendrá la posibilidad de derivar 2 nodos para
construir el grafo que se quiere.
con base a lo anterior, el programa en Java o C++ que deberá elaborarse para
construir el grafo,incorporara la “Matriz de adyacencia” que indicará la lógica de
enlaces de los nodos
Abstracci
pensemos que se Java:
quiere construir el Nod :
:
p=new nodo();
1 q=p;
Cuando
Nod Nod cab=p;
enlazan
2 3 un nodo
for(i=1; i<5; i++){
4 for(j=1; j<5; j++){posterio
if(n[i][j]){
p=new
Nod nodo();
Para el grafo
anterior , la matriz
1 2
1 0 1 Int n[]
0 0 []={{0,1,1,0},
2 0 0
0 0