Está en la página 1de 28

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
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 26 42 68 NULL

STRUCT fibo

INT NUM ;

fibo *SIG;

}
CAB
42

15 - 11 85 - 6 100 - 12
185 - NULL

42 11 6 12

NULL

P 42 q r cab

SI ( OSW = FALSE) ENTONCES /// HUBO ALGUNA ANOMALIA ¿


SI SW = TRUE ENTONCES
ESC “TODOS CUMPLEN “
SINO
ESC “ NO TODOS CUMPLEN “
FINSI

OSW = FALSE
Bool evaluar_fibo ( fibo *cab )
Inicio
bool sw = TRUE // TODOS CUMPLEN FIBONACCI
Si ( cab = null ) entonces // lista vacia
Escriba “ no hay datos “
OSW = TRUE
Sino
Si ( cab.sig = null ) entonces // lista unitaria
Escriba “ faltan números. Solo ingresaste un número”
OSW = TRUE
Sino
Si ( (cab.sig).sig ) = null ) // lista con 2 nodos exactamente
Escriba “ faltan números. Solo ingresaste dos números”
OSW = TRUE
Sino
p= cab
q = p.sig
r = q.sig // r = (p.sig).sig
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
#6 : DADA UNA LISTA SIMPLE APUNTADA POR CAB , QUE CONTENGA UN CORREO ELECTRONICO
CUALQUIERA EN MINUSCULA . ESCRIBA UNA FUNCION BOOLEANA QUE PERMITA DETERMINAR SI

DICHO CORREO ES ORGANIZACIONAL O NO ( jorg@ecopetrol.org ). ( SI


– SI ). NOTA : UNA LETRA POR NODO . nota : ASUMA QUE EL FORMATO O ESTRUCTURA DEL
CORREO YA VIENE VALIDADO EN OTRO METODO

STRUCT CORREO

CHAR LETRA ;

CORREO * SIG;

P Q R

j o r g @ e c o p e t r o l . o r g 

P Q R NULL

Y = EVALUAR_CORREO ( CAB , &SW2 )

SI ( SW2 = FALSE ) ENTONCES

SI ( Y = TRUE )

ESC “CORREO TERMINA EN ORG “

SINO

ESC “NO TERMINA EN ORG “

FINSI

FINSI
---------------------------------------------------------------------------------------------------------

BOOL EVALUAR_CORREO ( CORREO *CAB , BOOL *OSW)

INICIO

*OSW = FALSE

BOOL SW = TRUE

SI CAB = NULL ENTONCES

ESC “ NO HAY CORREO “

*OSW = TRUE

SINO

P = CAB

Q= CAB.SIG

R = Q.SIG

MIENTRAS QUE ( R.SIG <> NULL) HAGA

R = R . SIG

P = P.SIG

Q = Q.SIG

FIN_MQ

SI ( ( P.LETRA <> ‘O’ ) || ( Q.LETRA <> ‘R’) || (R.LETRA <> ´G’)) ENTONCES

SW = FALSE

FINSI

FINSI

RETURN ( SW )

FIN_EVALUAR_CORREO
#7 : DADA UNA LISTA SIMPLE APUNTADA POR CAB , QUE CONTENGA NUMEROS ENTEROS
CUALESQUIERA , ESCRIBA UN PROCEDIMIENTO BOOLEANO ( SI-SI ) QUE PERMITA DETERMINAR SI
EXISTE O NO ALGUN NUMERO PAR UBICADO ENTRE DOS NUMEROS IMPARES. NO PERMITA
MENOS DE 3 NODOS

STRUCT NUMEROS

INT NUM ;

NUMEROS * SIG;

X MOD 2 = 0

CAB
80

37 - 5 40- 42 59 - 94
’58 ’- NULL

80 5 42 94

80 NULL

q
Bool osw = false

bool evaluar_par ( números *cab)

inicio

// variables locales

bool sw = false

números *p , *q, *r

Si ( cab = null ) entonces // 0 nodos

Escriba “ no hay datos “

osw = true

Sino

Si ( cab.sig = null ) // 1 nodo

Escriba “ faltan números. Solo hay 1 “

osw = true

Sino

Si ( ( cab.sig).sig = null ) entonces

Escriba “ faltan números. Solo hay 2 “

osw = true

Sino

// p q r

p = cab

q = p.sig

r = q.sig

mientras que ( r <> null && sw = false ) haga

SI ( p.num mod 2 <> 0 && q.num mo2 = 0 && r.num mod 2 <>0 )

sw = true

sino

p = p.sig

q= q.sig

r = r.sig

finsi

finmq
fiinsi

finsi

finsi
return ( sw)

fin_evaluar_par

También podría gustarte