C/Visual C - cola de mensajes

 
Vista:

cola de mensajes

Publicado por Fran (1 intervención) el 30/03/2003 23:36:42
como se puede implementar una cola de mensajes ordenados por orden de llegada, con funciones de añadir mensajes, extraer mensajes a partir de un TAD llamado mensaje???
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Implementación de una cola de mensajes ordenados por orden de llegada

Publicado por Alejandro (1153 intervenciones) el 13/05/2025 18:31:04
Fran, para implementar una cola de mensajes ordenados por orden de llegada utilizando un TAD (Tipo Abstracto de Datos) llamado `Mensaje`, podemos seguir los siguientes pasos:

1. Definición del TAD mensaje:
Primero, definimos la estructura del mensaje. Por ejemplo:

1
2
3
4
5
typedef struct {
    int id;         // Identificador del mensaje
    char contenido[256]; // Contenido del mensaje
    time_t tiempo;  // Marca de tiempo para el orden de llegada
} Mensaje;

2. Definición de la cola:
Luego, definimos la estructura de la cola que contendrá los mensajes:

1
2
3
4
5
6
7
8
9
typedef struct Nodo {
    Mensaje mensaje;
    struct Nodo* siguiente;
} Nodo;
 
typedef struct {
    Nodo* frente;
    Nodo* fondo;
} ColaMensajes;

3. Funciones para la cola:
Implementamos las funciones necesarias para manejar la cola:

- Inicializar la cola:

1
2
3
4
void inicializarCola(ColaMensajes* cola) {
    cola->frente = NULL;
    cola->fondo = NULL;
}

- Añadir mensajes:

1
2
3
4
5
6
7
8
9
10
11
12
13
void añadirMensaje(ColaMensajes* cola, Mensaje nuevoMensaje) {
    Nodo* nuevoNodo = (Nodo*)malloc(sizeof(Nodo));
    nuevoNodo->mensaje = nuevoMensaje;
    nuevoNodo->siguiente = NULL;
 
    if (cola->fondo == NULL) {
        cola->frente = nuevoNodo;
        cola->fondo = nuevoNodo;
    } else {
        cola->fondo->siguiente = nuevoNodo;
        cola->fondo = nuevoNodo;
    }
}

- Extraer mensajes:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Mensaje extraerMensaje(ColaMensajes* cola) {
    if (cola->frente == NULL) {
        // Manejo de error: cola vacía
        Mensaje mensajeVacio = {0, "", 0};
        return mensajeVacio;
    }
 
    Nodo* nodoAEliminar = cola->frente;
    Mensaje mensajeExtraido = nodoAEliminar->mensaje;
    cola->frente = cola->frente->siguiente;
 
    if (cola->frente == NULL) {
        cola->fondo = NULL; // La cola está vacía
    }
 
    free(nodoAEliminar);
    return mensajeExtraido;
}

4. Uso de la cola:
Finalmente, podemos utilizar estas funciones en nuestro programa principal para gestionar los mensajes:

1
2
3
4
5
6
7
8
9
10
11
12
int main() {
    ColaMensajes cola;
    inicializarCola(&cola);
 
    Mensaje mensaje1 = {1, "¡Hola, mundo!", time(NULL)};
    añadirMensaje(&cola, mensaje1);
 
    Mensaje mensajeExtraido = extraerMensaje(&cola);
    printf("Mensaje extraído: %s\n", mensajeExtraido.contenido);
 
    return 0;
}

Esta implementación proporciona una cola de mensajes que permite añadir y extraer mensajes en el orden en que fueron recibidos, utilizando un TAD `Mensaje` para encapsular la información del mensaje.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar