Está en la página 1de 24

EJEMPLO DE NODO

1. NOMBRE DEL NODO : ESTUDIANTE


2. DECLARACION en C++ :

struct ESTUDIANTE

INT CODIGO ; // CAMPO INFORMACION

CHAR NOMBRE [ 40 ] ; // CAMPO INFORMACION

INT EDAD ; // CAMPO INFORMACION

CHAR CELULAR[ 12 ] ; // CAMPO INFORMACION

CHAR SEXO : // CAMPO INFORMACION

FLOAT NOTA ; // CAMPO INFORMACION

BOOL SW ; // CAMPO INFORMACION

ESTUDIANTE *SIG ; // CAMPO DE CONTROL

} *P , *Q , *R ;

3. NODO ESTUDIANTE :

CODIGO NOMBRE EDAD CELULAR SEXO NOTA SW SIG

154020 JOSE 20 30045678 M 3.4 F *


9
48

P
48

4. NOTACION ALGORITMICA : . CAMPO NOMBRE DEL “ NODO APUNTADO POR”

EJEMPLOS :

 ESCRIBA “ EL NOMBRE DEL ESTUDIANTE ES : “, P.NOMBRE


 ESCRIBA “ LA NOTA OBTENIDA POR EL ESTUDIANTE ES : “, P. NOTA
ILUSTRACION DE LOS PUNTEROS EN LA MEMORIA RAM

RAM

“ 888 - MARIA - 9 “
2
3

CAB 11

4 5 6

“ 222 JOSE NULL”


“ 999 – JUAN - 3
9
7 8

“ 123 – RITA - 7 “

11 12
10
LISTA SIMPLEMENTE ENLAZADA
struct NODO

INT CODIGO ;

CHAR NOMBRE [10];

NODO * SIG;

} *cab ;

CAB
42

146 - LINA - NULL


558 – JOSE - 11 432 - ROSA - 6 781 - MANUEL - 12

42 11 6 12

NULL

12 …….. ……. …..


P
COMO NAVEGAMOS LA ESTRUCTURA ?  P = P . SIG
EJEMPLO DE SEUDOCODIGO :

P = CAB

MIENTRAS QUE ( P < > NULL) HAGA

ESCRIBA “EL CODIGO ES “ , P.CODIGO

ESCRIBA “ EL NOMBRE ES “ , P.NOMBRE

P = P . SIG
FINMQ
INTERACCION CON EL SISTEMA OPERATIVO
1. FUNCION GET_NODE ( new): Permite obtener un nodo disponible del
sistema operativo. Aplica en los procesos de creación de nodos y
estructuras dinámicas de datos.
Ejemplo :
struct estudiante
{

INT CODIGO ; // CAMPO INFORMACION

CHAR NOMBRE [ 40 ] ; // CAMPO INFORMACION

INT EDAD ; // CAMPO INFORMACION

CHAR CELULAR[ 12 ] ; // CAMPO INFORMACION

CHAR SEXO : // CAMPO INFORMACION

FLOAT NOTA ; // CAMPO INFORMACION

BOOL SW ; // CAMPO INFORMACION

ESTUDIANTE *SIG ; // CAMPO DE CONTROL

} *cab , *y

Sintaxis en Algoritmos :
Y = get_node ( “nombre del struct”)
Ejemplo :
Y = get_node ( estudiante ) - seudocódigo
Y = new ( estudiante);

CODIGO NOMBRE EDAD CELULAR SEXO NOTA BOOL SIG

48

Y
48
2. PROCEDIMIENTO FREE-NODE : Permite liberar un nodo
y retornárselo al sistema operativo. Aplica en procesos
de mantenimiento de estructuras, relacionado con
eliminación de datos.

Sintaxis en algoritmos : free_node ( y ) delete ( y);


Se libera el nodo apuntado por Y , al sistema
operativo.
EJEMPLOS
#1 : DADA UNA LISTA SIMPLE QUE CONTENGA INFORMACION DE VEHICULOS ACTIVOS EN EL
SISTEMA DE INFORMACION DEL TRANSITO DE BARRANQUILLA, IMPRIMA LA CANTIDAD DE
VEHICULOS ACTIVOS A LA FECHA, CUYO AÑO DE FABRICACION SEA A PARTIR DEL AÑO 2012.
UTILICE UN SUBPROGRAMA SI-SI ( FUNCION)

STRUCT CARRO

CHAR PLACA [10];

CHAR MARCA [15];

INT FABRIC ;

CARRO * SIG;

}
CAB
42

146 - RENAULT –
558 – MAZDA - 432 - HYUNDAI – 781 - FORD - 2012-
2016 - NULL
2015 - 11 2000- 6 12

42 11 6 12

NULL

P 42 P = P.SIG

ENTERO CONTAR_CARROS ( CARRO *CAB )


INICIO
CARRO *P
ENTERO CONTA = 0
SI ( CAB = NULL ) ENTONCES
ESCRIBA “ ERROR. NO HAY VEHICULOS REGISTRADOS EN EL SISTEMA”
SINO
P = CAB
MIENTRAS QUE P <> NULL HAGA
SI ( P.FABRIC >= 2012 ) ENTONCES
CONTA = CONTA +1
FINSI
P = P.SIG
FIN-MQ
FINSI
RETURN ( CONTA)
FIN_CONTAR_CARROS
#2 : DADA UNA LISTA SIMPLE APUNTADA POR CAB , QUE CONTENGA NUMEROS ENTEROS
POSITIVOS CUALESQUIERA. IMPRIMA LA SUMATORIA DE AQUELLOS NUMEROS EN LA LISTA QUE
NO PERTENEZCAN AL INTERVALO CERRADO [ 20 , 85 ] . ( SI –NO , PARAMETROS POR
REFERENCIA ).

STRUCT NUMEROS

INT NUM ;

NUMEROS *SIG;

CAB
42

15 - 11 85 - 6 90 - 12
22 - NULL

42 11 6 12

NULL

P 42
PROC HALLAR_SUMA ( NUMEROS *CAB, ENTERO *SUMATORIA)

INICIO

ENTERO ACUM

NUMEROS *P

SI ( CAB = NULL ) ENTONCES

ESCRIBA “ NO HAY DATOS. ERROR”

SINO

// NO PERTENEZCAN AL INTERVALO ABIERTO [ 20 , 85 ] .

P = CAB

ACUM = 0

MIENTRAS QUE ( P <> NULL ) HAGA

SI ( P. NUM < 20 || P.NUM > 85 ) ENTONCES

ACUM = ACUM + P.NUM

FINSI

P = P.SIG

FIN-MQ

*SUMATORIA = ACUM

FIN-SI

FIN_PROC_HALLAR_SUMA
#3 : DADA UNA LISTA SIMPLE APUNTADA POR CAB , QUE CONTENGA NUMEROS ENTEROS
POSITIVOS CUALESQUIERA. IMPRIMA EL PRODUCTO DE AQUELLOS NUMEROS EN LA LISTA QUE
NO PERTENEZCAN A LOS INTERVALOS CERRADOS [ 20 , 85 ] Y [ 98 , 120 ] ( SI –NO ,

PARAMETROS POR REFERENCIA ).

STRUCT NUMEROS

INT NUM ;

NUMEROS *SIG;

CAB 15 *90
42

15 - 11 85 - 6 90 - 12
22 - NULL

42 11 6 12

NULL

P 42

PROC HALLAR_PRODUCTO ( NUMEROS *CAB, ENTERO *PRODUCTO)


INICIO

ENTERO ACUM

NUMEROS *P

SI ( CAB = NULL ) ENTONCES

ESCRIBA “ NO HAY DATOS. ERROR”

SINO

// NO PERTENEZCAN A LOS INTERVALOS CERRADOS [ 20 , 85 ] Y [ 98 , 120 ]

P = CAB

ACUM = 1

MIENTRAS QUE ( P <> NULL ) HAGA

SI ( (P. NUM < 20 || P.NUM > 85 ) && (P.NUM < 98 || P.NUM>120))


ENTONCES

ACUM = ACUM * P.NUM

FINSI

P = P.SIG

FIN-MQ

*PRODUCTO = ACUM

FIN-SI

FIN_PROC_HALLAR_PRODUCTO
PROC HALLAR_PRODUCTO ( NUMEROS *CAB, ENTERO *PROD)

INICIO

Números *p

SI ( CAB = NULL ) ENTONCES

ESCRIBA “ NO HAY DATOS. ERROR”

SINO

// PRODUCTO DE LOS NUMEROS QUE NO PERTENEZCAN A LOS INTERVALOS CERRADOS

[ 20 , 85 ] Y [ 98 , 120 ]
P = CAB

ACUM = 1

MIENTRAS QUE P <> NULL HAGA

// 15 90 110 150 85 RESPUESTA : 15 X 90 X 150

SI ( P.NUM < 20 || ( P.NUM >85 && P.NUM < 98) || P.NUM >120 )
ENTONCES

ACUM = ACUM * P.NUM

FINSI

P = P.SIG

FIN-MQ

*PROD = ACUM

FIN-SI

FIN_PROC_HALLAR_PRODUCTO
#4 : DADA UNA LISTA SIMPLE APUNTADA POR CAB , QUE CONTENGA EL NOMBRE DE UNA
PERSONA EN MAYUSCULA , CUALQUIERA . IMPRIMA CUANTAS CONSONANTES TIENE ESE
NOMBRE. ( SI – SI ). NOTA : UNA LETRA POR NODO

STRUCT NOMBRE

CHAR LETRA ;

NOMBRE * SIG;

CAB
80

´J´ - 5 ‘U’ - 42 ´A’ - 94


’N’- NULL

80 5 42 94

NULL

q 80
ENTERO CONTAR_CONSONANTES ( nombre *cab)
Inicio
nombre *q
entero conta = 0
Si cab = null entonces
Escriba “ error. No hay datos”
Sino
q = cab
Mientras que q <> null haga
Si ( q. letra <> ‘A’ && q.letra <> ‘E´ && q.letra<> ‘I’ &&
q.letra<> ‘O’ && q.letra <> ‘U’ ) entonces
conta = conta+1
finsi
q = q.sig
fin-mq

finsi
return (conta)

fin_contar_consonantes
#4 : DADA UNA LISTA SIMPLE APUNTADA POR CAB , QUE CONTENGA UNA PALABRA DEL
ESPAÑOL CUALQUIERA EN MAYUSCULA, DETERMINE SI EXISTE O NO ALGUN DIPTONGO EN
DICHA PALABRA . ( SI – NO – GLOBALES ). NOTA : UNA LETRA POR NODO . DIPTONGO
CONSISTE EN DOS VOCALES CONSECUTIVAS.

STRUCT PALABRA

CHAR LETRA ;

PALABRA * SIG;

CAB
80

´D´ - 5 ‘I’ - 42 ´O’ - 94


’S’- NULL

80 5 42 94

80 NULL
5
q r

PAIDEIA

R = Q.SIG = 5
bool sw cab

PROC HALLAR_DIP ( palabra *cab )


‘d’ null
{
// variables locales
Si cab = null entonces NULL //

Escriba “ no hay palabra “


Sino
Si (cab.sig = null) entonces // 1 NODO
Esc “error . palabra de una sola letra”
Sino
sw = false
q = cab
r = q.sig
Mientras que ( r <> null && sw = false ) haga
si ( ((q.letra == "a") || (q.letra == "e") || (q.letra == "i") || (q.letra

== "o") || (q.letra == "u"))

&&( (r.letra == "a") || (r.letra == "e") || (r.letra ==

"i") || (r.letra == "o") || (r.letra == "u")) ) ent

sw = true

sino

q = q.sig

r = r.sig

finsi

finmq

finsi

finsi

}
#4 : DADA UNA LISTA SIMPLE APUNTADA POR CAB , QUE CONTENGA UNA PALABRA DEL
ESPAÑOL CUALQUIERA EN MAYUSCULA, IMPRIMA LA PALABRA COMPLETA SIEMPRE Y CUANDO
DICHA PALABRA TERMINE EN UNA CONSONANTE. ( SI – NO ). NOTA : UNA LETRA POR NODO .

STRUCT PALABRA

CHAR LETRA ;

PALABRA * SIG;

CAB
80

´D´ - 5 ‘I’ - 42 ´O’ - 94


’S’- NULL

80 5 42 94

80 NULL

q
1. NAVEGAR PUNTERO Q HASTA ALCANZAR EL ULTIMO NODO.
2. UTILIZAR EL PUNTERO REZAGADO
Q = CAB
MIENTRAS QUE Q.SIG <> NULL HAGA Q <> NULL ES DIFERENTE A
XXXXXXXXXXXXXX Q.SIG <> NULL
Q= Q.SIG
FIN MQ
proc imprimir_palabra ( palabra * cab)
inicio
palabra *q
Si cab = null entonces // esta vacio ¿
Escriba “ no hay datos “
Sino
q= cab
Si (q.sig = null ) entonces // un solo nodo?
Si ( q. letra <> ‘A’ && q.letra <> ‘E´ && q.letra<> ‘I’ &&
q.letra<> ‘O’ && q.letra <> ‘U’ ) entonces

escriba q.letra
sino
escriba “ la palabra no termina en consonante”
finsi
sino
// dos nodos o mas
mientras que ( q.sig <> null ) haga // q en ultimo nodo
q = q.sig
finmq

Si ( q. letra <> ‘A’ && q.letra <> ‘E´ && q.letra<> ‘I’ &&
q.letra<> ‘O’ && q.letra <> ‘U’ ) entonces

q = cab
Mientras que ( q <> null ) haga
Escriba q.letra
q = q.sig
Fin-mq
Sino
Escriba “ la palabra no termina en consonante “
Finsi
finsi
finsi
fin _proc_imprimir_palabra
#5 : Dada una lista simple apuntada por cab , que contenga numeros enteros positivos
cualesquiera. Escriba una función booleana (si – si ), que permita determinar si los números
almacenados en dicha lista, a partir del tercer nodo , cumplen o no , todos la condición bajo la
cual se rige la serie de Fibonacci. ( 0 - 1 - 1 - 2 - 3 - 5 - 8

r q p

4 6 10 16 28 42 68

STRUCT fibo

INT NUM ;

fibo *SIG;

}
CAB si evaluar_fibo ( cab ) = false entonces
42
Esc = no Fibonacci”

Sino

Esc “ si es “

15 - 11 85 - 6 90 - 12
22 - NULL

42 11 6 12

NULL

P 42 q r cab
Bool evaluar_fibo ( fibo *cab)
a b
Inicio
bool sw = true
Si ( cab = null ) entonces // lista vacia null
Escriba “ no hay datos “
Sino
Si ( cab.sig = null ) entonces // lista unitaria
Escriba “ faltan números. Solo ingresaste un número”
Sino
Si ( (cab.sig).sig ) = null ) // lista con 2 nodos exactamente
Escriba “ faltan números. Solo ingresaste dos números”
Sino
p= cab
q = p.sig
r = q.sig // r = (p.sig).sig
sw = true
mientras que ( r <> null && sw = true ) haga
SI ( r.num = p.num+ q.num) entonces
p = p.sig
q = q.sig
r = r.sig
sino
sw =false
finsi
fin-mq
finsi
finsi
finsi
return ( sw )
fin _evaluar_fibo