Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ejemplo de Nodo
Ejemplo de Nodo
struct ESTUDIANTE
} *P , *Q , *R ;
3. NODO ESTUDIANTE :
P
48
EJEMPLOS :
RAM
“ 888 - MARIA - 9 “
2
3
CAB 11
4 5 6
“ 123 – RITA - 7 “
11 12
10
LISTA SIMPLEMENTE ENLAZADA
struct NODO
INT CODIGO ;
NODO * SIG;
} *cab ;
CAB
42
42 11 6 12
NULL
P = CAB
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
{
} *cab , *y
Sintaxis en Algoritmos :
Y = get_node ( “nombre del struct”)
Ejemplo :
Y = get_node ( estudiante ) - seudocódigo
Y = new ( estudiante);
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.
STRUCT CARRO
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
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
SINO
P = CAB
ACUM = 0
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 ,
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
ENTERO ACUM
NUMEROS *P
SINO
P = CAB
ACUM = 1
FINSI
P = P.SIG
FIN-MQ
*PRODUCTO = ACUM
FIN-SI
FIN_PROC_HALLAR_PRODUCTO
Números *p
SINO
[ 20 , 85 ] Y [ 98 , 120 ]
P = CAB
ACUM = 1
SI ( P.NUM < 20 || ( P.NUM >85 && P.NUM < 98) || P.NUM >120 )
ENTONCES
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
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
80 5 42 94
80 NULL
5
q r
PAIDEIA
R = Q.SIG = 5
bool sw cab
== "o") || (q.letra == "u"))
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
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
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
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
SI ( Y = TRUE )
SINO
FINSI
FINSI
---------------------------------------------------------------------------------------------------------
INICIO
*OSW = FALSE
BOOL SW = TRUE
*OSW = TRUE
SINO
P = CAB
Q= CAB.SIG
R = Q.SIG
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
inicio
// variables locales
bool sw = false
números *p , *q, *r
osw = true
Sino
osw = true
Sino
osw = true
Sino
// p q r
p = cab
q = p.sig
r = q.sig
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