El Guru Programador
Web hosting
Usuario DESCONOCIDO | Registrate Gratis | Usuarios Registrados
Implementación de la TDA Cola con Prioridad
Autor [masterhk] Calificacion
Sugerencias a [email protected]


template <class T>
class CNodoSE
{
private:
T info;
CNodoSE<T>* siguiente;
int prioridad;
public:
CNodoSE(T, CNodoSE<T>*, int);
CNodoSE<T>* GetSiguiente();
void SetSiguiente(CNodoSE<T>*);
T GetDato(){return info;};
void SetDato(T);
int GetPrioridad();
};

template<class T>
int CNodoSE<T>::GetPrioridad()
{
return this->prioridad;
}

template<class T>
void CNodoSE<T>::SetPrioridad(int Prioridad)
{
this->prioridad = Prioridad;
}

template<class T>
void CNodoSE<T>::SetDato(T Valor)
{
info = Valor;
}

template<class T>
void CNodoSE<T>::SetSiguiente(CNodoSE<T>* Siguiente)
{
this->siguiente = Siguiente;
}

template <class T>
CNodoSE<T>* CNodoSE<T>::GetSiguiente()
{
return this->siguiente;
}

template <class T>
CNodoSE<T>::CNodoSE(T Valor, int Prioridad, CNodoSE<T>* Siguiente = NULL)
{
info = Valor;
this->siguiente = Siguiente;
prioridad = Prioridad;
}






template <class T>
class CListaSE
{
private:
CNodoSE<T>* ptrcabeza;
public:
CListaSE();
void Adicionar(T, int);
void Insertar(int, T, int);
T Obtener(int);
void Eliminar(int);
int Longitud();
bool Vacia();
T ObtenerPorPrioridad(int);
};

template <class T>
CListaSE<T>::CListaSE()
{
ptrcabeza = NULL;
}

template <class T>
void CListaSE<T>::Adicionar(T valor, int prioridad)
{
CNodoSE<T> *actual;
CNodoSE<T>* nodo = new CNodoSE<T>(valor, prioridad);
if (Vacia())
ptrcabeza = nodo;
else
{
actual = ptrcabeza;
while(actual->GetSiguiente()!=NULL)
actual = actual->GetSiguiente();
actual->SetSiguiente(nodo);
}
}

template <class T>
void CListaSE<T>::Insertar(int pos, T valor, int prioridad)
{
if ((pos > 0) &&(pos <= Longitud()))
{
CNodoSE<T>* nodo = new CNodoSE<T>(valor, prioridad);
if (pos == 1)
{
nodo->SetSiguiente(ptrcabeza);
ptrcabeza = nodo;
}
else
{
CNodoSE<T>* cursor = ptrcabeza;
int cont = 1;
while(cont < pos-1)
{
cursor = cursor->GetSiguiente();
cont++;
}
nodo->SetSiguiente(cursor->GetSiguiente());
cursor->SetSiguiente(nodo);
}
}
else
throw Exception("Posicion fuera de rango");
}

template <class T>
T CListaSE<T>::Obtener( int pos )
{
CNodoSE<T>* cursor = ptrcabeza;;
int i = 1;
if ((pos > 0) && (pos <= Longitud()))
{
while (i < pos)
{
cursor = cursor->GetSiguiente();
i++;
}
return cursor->GetDato();
}
else
throw Exception("Posicion fuera de rango");
}

template <class T>
void CListaSE<T>::Eliminar( int pos)
{
if ((pos > 0) && (pos <= Longitud()))
{
CNodoSE<T>* cursor;
CNodoSE<T>* temp;
cursor = ptrcabeza;
if (pos == 1)
{
ptrcabeza = cursor->GetSiguiente();
cursor->SetSiguiente(NULL);
delete[] cursor;
}
else
{
int i=1;
while(i<pos-1)
{
cursor = cursor->GetSiguiente();
i++;
}
temp = cursor->GetSiguiente();
cursor->SetSiguiente(temp->GetSiguiente());
delete[] temp;
}
}
else
throw Exception("Posicion fuera de rango");
}



template <class T>
int CListaSE<T>::Longitud()
{
int cant=0;
CNodoSE<T>* cursor=ptrcabeza;
while (cursor!=NULL)
{
cant++;
cursor = cursor->GetSiguiente();
}
return cant;
}
template <class T>
bool CListaSE<T>::Vacia()
{
return ptrcabeza == NULL;
}
template <class T>
T CListaSE<T>::EliminarPorPrioridad(int prioridad)
{
T temp;
CNodoSE<T> * cursor = ptrcabeza;
Int pos=1;
While (cursor->GetSiguiente!= NULL)
{
if (prioridad == cursor->GetPrioridad())
{
temp= cursor->GetDato();
Eliminar(pos);
}
pos++;
}
return temp;
}

template<class T>
T CLista<T>::MayorPrioridad()
{
CNodoSE<T>* cursor = ptrcabeza;
While(cursor->GetSiguiente()!= NULL)
{
cursor= cursor->GetSiguiente();
if (max < cursor->GetPrioridad())
max= cursor->GetPrioridad();
}
return EliminarPorPrioridad(max);
}





template<class T>
class CCola
{
private:
CListaSE<T> cola;
public:
CCola();
void Adicionar(T Elem, int prioridad);
T Extraer(int prioridad);
T Frente();
T Fondo();
bool EsVacia();
};
template<class T>
void CCola<T>::Adicionar(T valor, int prioridad)
{
cola.Adicionar(valor, prioridad);
}


template<class T>
bool CCola<T>::EsVacia()
{
return cola.Vacia();
}

template<class T>
T CCola<T>::Fondo()
{
if(!EsVacia())
return cola.Obtener(cola.Longitud());
else
throw Exception("Cola Vacia");
}

template<class T>
T CCola<T>::Frente()
{
if(!EsVacia())
return cola.Obtener(1));
else
throw Exception("Cola Vacia");
}

template<class T>
T CCola<T>::Extraer()
{
if(!EsVacia())
return cola.Mayorprioridad();
else
throw Exception(“Cola Vacia”);
}
 
Terminos de Uso

1 - Copiar o Descargarse este contenido implica aceptar los terminos aqui detallados.

2 - Usted puede utilizar este contenido en sus propios programas y puede compilarlo en un programa y modificarlo a su gusto.

3 - Usted NO PUEDE redistribuir este contenido tal como se presenta aqui sin el permiso del autor original del mismo.

4 - Usted seguirá cualquier restricción adicional del copyright que el autor pudo haber puesto en la descripción del contenido.

 

Contactos myStudio Network