// Implementacion de una cola sobre un vector circular

// Estructuras de Datos, UNICAN
// Autor: Pablo Sanchez (p.sanchez@unican.es)
// http://personales.unican.es/sanchezbp

PARAMETRO E ES CLASE
FINPARAMETRO

CLASE ColaVector(E) ES

HEREDABLE MAX_COLA ES NATURAL CON VALOR 100;
HEREDABLE vector : VECTOR DIM MAX_COLA DE E;
// Inv: (0 <= inicio) && (inicio < MAX_COLA)
HEREDABLE inicio : NATURAL;
// Inv: (0 <= fin) && (fin < MAX_COLA)
HEREDABLE fin : NATURAL;
// Inv: (0 <= tamanho) && (tamanho < MAX_COLA)
// Inv: tamanho = numerosEntre(inicio,fin)
HEREDABLE tamanho : NATURAL;

//-----------------------------------------------------//
// Constructores
//-----------------------------------------------------//
PUBLICO CONSTRUCTOR() ES
inicio := 0;
fin := 0;
tamanho := 0;
FINCONSTRUCTOR

//-----------------------------------------------------//
// Operaciones para manipular las listas //
//-----------------------------------------------------//
PUBLICO FUNCION isEmpty() : Booleano ES
DEVOLVER (tamanho == 0);
FINFUNCION

PUBLICO FUNCION isFull() : Booleano ES
DEVOLVER (tamanho == MAX_COLA)
FINFUNCION

PUBLICO FUNCION size() : NATURAL ES
DEVOLVER tamanho;
FINFUNCION

// Pre: NOT esteObj.isFull()
PUBLICO FUNCION add(e : E) : ColaVector(E) ES
vector[fin] := e;
fin := (fin + 1) mod MAX_COLA;
tamanho := tamanho + 1;
DEVOLVER esteObj;
FINFUNCION

// Pre: NOT esteObj.isEmpty()
PUBLICO FUNCION peek() : E ES
DEVOLVER vector[inicio]:
FINFUNCION

// Pre: NOT esteObj.isEmpty()
PUBLICO FUNCION remove() : Cola(E) ES
inicio := (inicio + 1) mod MAX_COLA;
DEVOLVER esteObj;
FINFUNCION


FINCLASE

Última modificación: jueves, 25 de mayo de 2017, 19:54