Está en la página 1de 2

PRIMARIA…”

Documento de la serie : “Aprenda Estructuras de Datos como en


Profesor : Braulio Barrios Zúñiga
Última revisión : ENERO/2019

Tema: Estructuras De Datos Dinámicas

Encuentre una o mas soluciones a los siguientes problemas y expréselas tanto en Pseudocódigo como en
un Lenguaje de
Programación

1.- Se tiene una LISTA DOBLEMENTE ENLAZADA conteniendo caracteres alfabéticos,


como se ilustra en la Figura-1.

cab

Ω H B T B Z T B Ω

Figura-1

El proceso a realizar en dicha estructura de datos consiste en “Retirar” de ella los


nodos que contengan caracteres que aparezcan “Mas de una vez”. Al final, la lista
quedará UNICAMENTE con aquellos caracteres que NO estaban repetidos; de tal
forma que para la lista de este ejemplo, el resultado del proceso sería el que se ilustra
en la Figura-2.

cab
Ω H Z Ω

Figura-2

A continuación va MI VERSIÓN DEL ALGORITMO….. ¿Cuál es la suya?

1
PRIMARIA…”
Documento de la serie : “Aprenda Estructuras de Datos como en
Profesor : Braulio Barrios Zúñiga
Última revisión : ENERO/2019

ELIMINAR-NODOS-CON-VALOR-REPETIDO
P ← cab
MQ ( P <> NIL ) HAGA /** P es el apuntador principal. Cada nodo apuntado por él es comparado con los
demás **/
cont ← 0 ; Q ← cab /** Q recorre toda la lista contando las coincidencias del carácter…. **/
MQ ( Q <> NIL ) haga
Si ( Q↑.info = P↑.info) Ent
cont ← cont +1
Fin si
P ← Q ↑. Sig
Fin MQ

Si (cont > 1) ent /** Borro todos los datos que sean iguales a los que apunta P **/
Dato ← P ↑.info; R ← cab
MQ ( R <> NIL ) haga
Si ( R ↑.Info = Dato) Ent /** Lo Borro **/
Si (R = cab) AND (Cab ↑.Sig = NIL ) ent /* Es el PRIMERO y UNICO ????? */
P ← P↑.Sig ; Dispose( R ); R ← NIL; cab ← NIL;
Sino
Si (R = cab) AND (Cab ↑.Sig <> Ω ) ent /* Es el primero?
cab ← cab ↑.Sig; cab ↑.Ant ← Ω; P ← P↑.Sig;
Dispose( R ); R ← cab;
Sino
Si ( R↑.Sig = NIL) Ent /* Es el ÚLTIMO ????? */
SI R = P Ent /* coincide con el apuntado por P ????? */
P ← P↑.Sig
Fin Si
R↑.Ant↑.Sig ← NIL; Dispose(R); R ← NIL;
Sino /* Es Uno INTERMEDIO */
P ↑.Ant ↑.Sig ← R↑.Sig;
R ↑.Sig↑.Ant ← R↑.Ant;
SI R = P Ent /* coincide con el apuntado por P ?? */

P ← P↑.Sig
Fin Si
T ← R↑.Sig; Dispose (R); R ← T
Fin Si
Fin Si
Fin Si
Sino
R ← R ↑.Sig
Fin si
Fin MQ
Sino
P ← P ↑.Sig
Fin Si

FMQ
Fin ELIMINAR-NODOS-CON-VALOR-REPETIDO

También podría gustarte