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
};
  1. Sobrecargar el operador de multiplicación operator* como función miembro de Complex.

  2. 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.