Ejercicios para el primer examen
[Complex01] Dado una clase que representa un número complejo:
class Complex {
private:
float r, i; //parte real e imaginario
};
-
Sobrecargar el operador de multiplicación
operator*
como función miembro de Complex. -
Sobre cargar el operador de menor que
operator<
como función miembro de Complex. Digamos que un complejo es menor que otro si su distancia es menor al origen en el plano complejo.
[ArrayList01] Dada la clase ArrayList
sobrecargar el operator<
para que devuelva true
cuando el máximo de la lista izquierda sea menor que el máximo de la lista derecha. Por ejemplo, si L1 = 3, 7, 2
y L2 = 3, 4, 2, 1, 0
, devolverá false
. Si L1 = 3, 1, 2
y L2 = 3, 4, 2, 1, 0
devolverá true
.
[ArrayList02] Dada la clase ArrayList
implementar el member function ArrayList merge(const ArrayList &L) const;
que implementa el algoritmo de merge discutido en clase. Si L1 = 5, 10, 15, 16
y L2 = 12, 18
, L1.merge(L2)
devolverá una lista que contiene 5, 10, 12, 15, 16, 18
.
[ArrayList03] En este ejercicio usarás el ArrayList como ADT. Crea una función externa Array insertInOrder(ArrayList &L2)
segun lo descrito en su documentación.
// insertInOrder:
// Given L, an ArrayList whose elements are in
// ascending order, and k, and integer,
// return a new ArrayList that contains the k
// and is in ascending order.
// Example, L = 5, 10, 15.
// insertInOrder(L, 7) will return a list with
// 5, 7, 10, 15
// The list that is received as argument should
// be exactly the same at the end if this function.
Analice la complejidad de la función que implementó en términos de notación O-mayúscula.
[SLList01] Implementar un member function bool palindrome()
que determine si la lista es palíndromo, e.g. si se lee igual de izquierda a derecha y viceversa. Por ejemplo, si L1 = 10, 20 30, 20, 10
, L.palindrome()
devolverá true
. No tiene que ser in-place. Debe tener complejidad O(n).
[SLList02] Implementar un member function SLList splitAndReturn()
que devuelve la última mitad de la lista y recorta la lista original a su primera mitad. Por ejemplo, si L = 5, 10, 15, 20
. L.splitAndReturn()
devolverá una lista que contiene 15,20
y luego de la invocación L
contendrá 5,10
. Trata de hacer lo en O(n), in-place.
[Stack01] Usando como inspiración a selection sort, implementa stack sort, que dado un queue con elementos los ordena ascendentemente usando solo stack(s). Por ejemplo:
void stackSort(queue<int> &q);
[Stack02] Para un stack implementado usando lista enlazada sencilla que tenga la siguente declaración:
class Stack {
private:
Node *head;
public:
Stack() { head = NULL;}
void push(int k);
void pop();
int top() const;
}
sobrecarga el operador<
para que S1 < S2
devuelva true
si el stack de la izquierda tiene menos elementos que el de la derecha.