Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
|
|
CI-1201 Programación II
/* ADH_list.h (C) 2002 adolfo@di-mare.com */
typedef int T;
class ADH_list {
public:
void push_front( const T& v ); // agrega el valor al principio
void push_back( const T& v ); // agrega el valor al final
void pop_front(); // Elimina el valor del principio
void pop_back(); // Elimina el valor del final
bool empty() const; // "true" si la lista está vacía
T first() const; // Obtiene una copia del primer valor de la lista
void operator=(const ADH_list& L); // LO = L
void swap(ADH_list& L); // intercambia *this <==> L
void remove(const T& v); // Elimina cada uno de los valores iguales a "v"
friend ostream& operator << (ostream &, const ADH_list& );
friend istream& operator >> (istream &, ADH_list& );
};
// EOF: ADH_list.h
|
Figura 1: La clase lista
La implementación del
contenedor de la clase lista que le fue entragada en el aula
corresponde al prototipo de la clase que está en la
Figura 1. El
modelo que corresponde a la implementación que usted
ya conoce es el de la
Figura 2.
L ──>─┐
│
v
┌────────┬───┐ ┌────────┬───┐ ┌────────┬───┐
│ elem_1 │ *─┼──>│ elem_2 │ *─┼──>│ elem_3 │ *─┼─> NIL
└────────┴───┘ └────────┴───┘ └────────┴───┘
|
Figura 2: Lista simple
L->last ───────────────────────────────────────┐
│
┌────────────┐ ┌────────────┐ ┌───────────┐ │
│ v │ v │ v v
│ ┌────────┬───┐ │ ┌────────┬───┐ │ ┌────────┬───┐
│ │ elem_1 │ ├─┼─┘ │ elem_2 │ ├─┼─┘ │ elem_3 │ ├─┼─┐
│ └────────┴───┘ └────────┴───┘ └────────┴───┘ │
│ ^ next ^ │
│ │ │ │
│ first last v
└───────<───────────────<────────────────<─────────┘
|
Figura 3: Lista circular, con
puntero al último nodo
Esta tarea programada, ustede debe implementar la clase lista,
usando una lista circular, de manera que en el
Rep lo que exista es un puntero al último nodo de
la lista, y de ése nodo, un puntero al primero, como se
muestra en la
Figura 3.
// USE_list.cpp (basado en)
// Fig. 20.17: fig20_17.cpp
// Testing Standard Library class list
#include <iostream>
#include "ADH_list.h"
void printList( const ADH_list
&L ) {
if ( L.empty() ) {
cout << "List is empty";
}
else {
ADH_list LO;
LO = L; // Hace una copia
while (! LO.empty()) {
T val = LO.first();
cout << " " << val;
LO.pop_front();
}
}
}
int main() {
int a[] = { 2, 6, 4, 8 };
const int SIZE = sizeof(a) / sizeof(a[0]);
ADH_list LV, LO;
LV.push_front( 1 );
LV.push_front( 2 );
LV.push_back( 4 );
LV.push_back( 3 );
cout << "LV contains: ";
printList( LV );
// LV.sort();
cout << "\nLV after sorting contains: ";
printList( LV );
// LO.insert( LO.begin(), a, a + SIZE );
cout << "\nLO contains: ";
printList( LO );
// LV.sort();
cout << "\nLV contains: ";
LV.pop_front();
LV.pop_back(); // all sequence containers
cout << "\nAfter pop_front and pop_back LV contains:\n";
printList( LV );
// method swap is available in all containers
LV.swap( LO );
cout << "\nAfter swap:\n LV contains: ";
printList( LV );
cout << "\n LO contains: ";
printList( LO );
LV.remove( 4 );
cout << "\nAfter remove( 4 ) LV contains: ";
printList( LV );
cout << endl;
return 0;
}
// EOF: USE_list.cpp
|
Figura 4: Programa que usa la lista
Como muestra de que su lista funciona correctamente, su
implementación debe producir los mismos resultados cuando
el programa de la
Figura 4 se usa con su lista, o con la
vista en clase.
Entregue su tarea por
correo electrónico, como
lo hizo anteriormente.
Entrega de Tareas
Tiempo de entrega: |
1 semana |
Modalidad: |
Individual |
Soluciones
Adolfo Di Mare <adolfo@di-mare.com>.
Copyright © 2002
Derechos de autor reservados © 2002