Bueno usando pilas y colas el algoritmo seria mas o meno asi :
PROCEDURE encriptar (VAR palabra:string)
Var
Pila:TPila;
Cola:TCola;
Car:Char;
i:Integer;
sacarpila:boolean;
aux:string;
Begin
sacarpila:=false;
i:=1;
While (i<length(palabra)) do
Begin
if Not(palabra[i] in ['a','e','i','o','u'])
then Cola.Meter(palabra[i])
else Begin
While (palabra[i] in ['a','e','i','o','u']) do
Begin
Pila.Meter(palabra[i]);
i:=i+1
End;
sacarpila:=true;
i:=i-1
End;
if sacarpila then
Begin
While Not(Pila.EsVacia) do
Begin
car:=Pila.Sacar;
Cola.Meter(car)
End;
sacarpila:=false
End;
i:=i+1
End;
While Not(Cola.EsVacia) do aux:=aux+Cola.Sacar;
palabra:=aux;
End;
Estoy asumiendo que TPila y TCola, son Clases y contiene los métodos Sacar,Meter y EsVacia.
En caso estes usando Procedmientos y funciones y no clases entonces debes hacer los cambios pertinentes.
El procedimiente se puede resumir en el siguient enunciado :
Recorrer todas las letras en palabra, cuando una letra es una consonate entonces lo colocas en la cola, y cuando son vocales loc colocas en la pila, ni bien termines de colocar las letras en la pila los sacas de la pila para colocarlas en la cola, y el proceso se repite hasta terminar con la palabra.
Espero te ayude en algo.
suerte