[Greenpot]
Forero del todo a cien
- Registro
- 4 Nov 2003
- Mensajes
- 358
- Reacciones
- 0
Esta es la primera practica.
El que la haga se lleva un gallifante :D
Se desea implementar un cola de enteros mediante una lista de nodos doblemente enlazada. La cola debe facilitar operaciones para insertar un elemento, extraer un elemento, inicializar una cola, destruir una cola y copiar una cola en otra distinta.
Además, la cola debe proporcionar un mecanismo de iteración que permita examinar cualquier elemento mediante un iterador interno que se podrá mover secuencialmente desde el principio o el final de la cola.
Un iterador es un mecanismo que permite referenciar los elementos de un contenedor, en general se implementa como un puntero. En el caso que nos ocupa, el iterador debe estar asociado a un elemento y no a una posición; si el elemento que referencia se desplaza, el iterador debe seguir señalándolo. Si el elemento referenciado por el iterador se extrae, éste debe señalar al siguiente.
La interfaz de las operaciones de la cola debe atenerse a lo establecido en la tabla de operaciones a implementar.
Use para los nodos de la lista y para la cola las siguientes estructuras:
struct NodoCola {
/* Escriba los campos necesarios en los nodos de la lista
de enteros doblemente enlazada */
};
typedef struct NodoCola TNodoCola, *PNodoCola;
struct Cola {
/* Escriba los campos necesarios para mantener la lista
de nodos y realizar las operaciones que se piden sobre la cola */
};
typedef struct Cola TCola, *PCola;
Operaciones a implementar
Declaración prototipo Descripción
void inicializa(PCola cola) Inicializa una cola vacía. Prepara la cola para que pueda ser utilizada, haciendo la función de constructor. Las operaciones siguientes no se pueden realizar si no se ha llamado a inicializa sobre la cola. Inicializa no se puede llamar sobre una cola ya inicializada.
int inserta(PCola cola,int t) Se inserta en el final de la cola un entero t. La función devuelve 1 si se ha realizado la inserción y 0 en caso contrario. Si el elemento insertado es el primero, el iterador pasa a señalarlo. Para crear un nodo en memoria dinámica emplee la función malloc.
int extrae(PCola cola) Se extrae el elemento del principio de la cola. La función devuelve 1 si se ha realizado la extracción y 0 en caso de que no haya elementos a extraer. Si el iterador señala al elemento que se extrae pasa a señalar al siguiente, si existe. Para destruir un nodo de memoria dinámica emplee la función free.
int tamano(PCola cola) Devuelve el número de datos en la cola.
void copia(PCola destino, PCola origen) Se copia los datos de la cola origen en la cola destino de forma que al final las dos colas contengan los mismos datos en el mismo orden. El iterador debe mantener la posición relativa en la cola destino con respecto a la origen.
void destruye(PCola cola) Se vacía la cola liberando todos los nodos que la componen. Hace la función de destructor, no debiendo ser utilizada la variable después de llamarse. Para liberar un nodo de memoria dinámica emplee la función free.
int examina(PCola cola) Se devuelve el entero del elemento al que señala el iterador. En caso de que la cola esté vacía se devuelve 0.
int inicio(PCola cola) Se sitúa el iterador en el primer elemento de la cola. La función devuelve 1 si se ha realizado la operación y 0 si la cola está vacía.
int fin(PCola cola) Se sitúa el iterador en el último elemento de la cola. La función devuelve 1 si se ha realizado la operación y 0 si la cola está vacía.
int avanza(PCola cola) Se avanza el iterador al siguiente elemento de la cola. El sentido de avance es desde el inicio de la cola hacia el fin, el último elemento añadido. La función devuelve 1 si se ha realizado la operación y 0 en caso contrario.
int retrocede(PCola cola) Se retrocede el iterador al anterior elemento de la cola. El sentido del retroceso es desde el fin de la cola hacia el principio, el primer elemento que saldrá. La función devuelve 1 si se ha realizado la operación y 0 en caso contrario.
El que la haga se lleva un gallifante :D
Se desea implementar un cola de enteros mediante una lista de nodos doblemente enlazada. La cola debe facilitar operaciones para insertar un elemento, extraer un elemento, inicializar una cola, destruir una cola y copiar una cola en otra distinta.
Además, la cola debe proporcionar un mecanismo de iteración que permita examinar cualquier elemento mediante un iterador interno que se podrá mover secuencialmente desde el principio o el final de la cola.
Un iterador es un mecanismo que permite referenciar los elementos de un contenedor, en general se implementa como un puntero. En el caso que nos ocupa, el iterador debe estar asociado a un elemento y no a una posición; si el elemento que referencia se desplaza, el iterador debe seguir señalándolo. Si el elemento referenciado por el iterador se extrae, éste debe señalar al siguiente.
La interfaz de las operaciones de la cola debe atenerse a lo establecido en la tabla de operaciones a implementar.
Use para los nodos de la lista y para la cola las siguientes estructuras:
struct NodoCola {
/* Escriba los campos necesarios en los nodos de la lista
de enteros doblemente enlazada */
};
typedef struct NodoCola TNodoCola, *PNodoCola;
struct Cola {
/* Escriba los campos necesarios para mantener la lista
de nodos y realizar las operaciones que se piden sobre la cola */
};
typedef struct Cola TCola, *PCola;
Operaciones a implementar
Declaración prototipo Descripción
void inicializa(PCola cola) Inicializa una cola vacía. Prepara la cola para que pueda ser utilizada, haciendo la función de constructor. Las operaciones siguientes no se pueden realizar si no se ha llamado a inicializa sobre la cola. Inicializa no se puede llamar sobre una cola ya inicializada.
int inserta(PCola cola,int t) Se inserta en el final de la cola un entero t. La función devuelve 1 si se ha realizado la inserción y 0 en caso contrario. Si el elemento insertado es el primero, el iterador pasa a señalarlo. Para crear un nodo en memoria dinámica emplee la función malloc.
int extrae(PCola cola) Se extrae el elemento del principio de la cola. La función devuelve 1 si se ha realizado la extracción y 0 en caso de que no haya elementos a extraer. Si el iterador señala al elemento que se extrae pasa a señalar al siguiente, si existe. Para destruir un nodo de memoria dinámica emplee la función free.
int tamano(PCola cola) Devuelve el número de datos en la cola.
void copia(PCola destino, PCola origen) Se copia los datos de la cola origen en la cola destino de forma que al final las dos colas contengan los mismos datos en el mismo orden. El iterador debe mantener la posición relativa en la cola destino con respecto a la origen.
void destruye(PCola cola) Se vacía la cola liberando todos los nodos que la componen. Hace la función de destructor, no debiendo ser utilizada la variable después de llamarse. Para liberar un nodo de memoria dinámica emplee la función free.
int examina(PCola cola) Se devuelve el entero del elemento al que señala el iterador. En caso de que la cola esté vacía se devuelve 0.
int inicio(PCola cola) Se sitúa el iterador en el primer elemento de la cola. La función devuelve 1 si se ha realizado la operación y 0 si la cola está vacía.
int fin(PCola cola) Se sitúa el iterador en el último elemento de la cola. La función devuelve 1 si se ha realizado la operación y 0 si la cola está vacía.
int avanza(PCola cola) Se avanza el iterador al siguiente elemento de la cola. El sentido de avance es desde el inicio de la cola hacia el fin, el último elemento añadido. La función devuelve 1 si se ha realizado la operación y 0 en caso contrario.
int retrocede(PCola cola) Se retrocede el iterador al anterior elemento de la cola. El sentido del retroceso es desde el fin de la cola hacia el principio, el primer elemento que saldrá. La función devuelve 1 si se ha realizado la operación y 0 en caso contrario.