C/Visual C - lista de colas

 
Vista:

lista de colas

Publicado por carlos (1 intervención) el 18/02/2003 22:52:00
alguien tiene un algoritmo en c de una lista de colas para implementar prioridad
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 lista de colas con prioridad en C

Publicado por Alejandro (1042 intervenciones) el 05/05/2025 23:43:22
Carlos, aquí tienes un ejemplo básico de cómo implementar una lista de colas con prioridad en C. Este algoritmo utiliza una estructura de datos de lista enlazada para gestionar las colas y asignar prioridades a los elementos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <stdio.h>
#include <stdlib.h>
 
typedef struct Node {
    int data;
    int priority;
    struct Node* next;
} Node;
 
Node* createNode(int data, int priority) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = data;
    newNode->priority = priority;
    newNode->next = NULL;
    return newNode;
}
 
void insert(Node** head, int data, int priority) {
    Node* newNode = createNode(data, priority);
    if (*head == NULL || (*head)->priority < priority) {
        newNode->next = *head;
        *head = newNode;
    } else {
        Node* current = *head;
        while (current->next != NULL && current->next->priority >= priority) {
            current = current->next;
        }
        newNode->next = current->next;
        current->next = newNode;
    }
}
 
int removeHighestPriority(Node** head) {
    if (*head ==NULL) {
        printf("La lista está vacía.\n");
        return -1; // Indica que la lista está vacía
    }
    Node* temp = *head;
    int data = temp->data;
    *head = (*head)->next;
    free(temp);
    return data;
}
 
void display(Node* head) {
    while (head != NULL) {
        printf("Dato: %d, Prioridad: %d\n", head->data, head->priority);
        head = head->next;
    }
}
 
int main() {
    Node* head = NULL;
 
    insert(&head, 10, 2);
    insert(&head, 20, 1);
    insert(&head, 30, 3);
 
    printf("Lista de colas con prioridad:\n");
    display(head);
 
    printf("Elemento removido: %d\n", removeHighestPriority(&head));
    printf("Lista después de remover el elemento de mayor prioridad:\n");
    display(head);
 
    return 0;
}

Explicación:



1. Estructura de nodo: Cada nodo contiene un dato, una prioridad y un puntero al siguiente nodo.
2. Función `insert`: Inserta un nuevo nodo en la lista de acuerdo a su prioridad. Los nodos con mayor prioridad se colocan al principio de la lista.
3. Función `removeHighestPriority`: Elimina y devuelve el nodo con la mayor prioridad.
4. Función `display`: Muestra todos los nodos en la lista.
5. Función `main`: Demuestra cómo usar las funciones anteriores.

Este código es un punto de partida y puede ser modificado según las necesidades específicas de tu aplicación.
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