C/Visual C - Estructuras de datos urgeeeeeeeeee¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡

 
Vista:

Estructuras de datos urgeeeeeeeeee¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡

Publicado por omicron (1 intervención) el 29/08/2001 09:22:42
Saludos alguien me puede ayudar con codigo de como se programa una cola doble en C/C++
Gracias espero respuesta
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 doble (deque) en C/C++

Publicado por Alejandro (913 intervenciones) el 11/10/2024 20:44:29
Omicrón, a continuación, te muestro un ejemplo básico de cómo implementar una cola doble (deque) en C. Esta implementación permite agregar y eliminar elementos tanto al principio como al final de la cola.

Código en C



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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include <stdio.h>
#include <stdlib.h>
 
// Definición de un nodo
typedef struct Node {
    int data;
    struct Node* next;
    struct Node* prev;
} Node;
 
// Definición de la cola doble
typedef struct Deque {
    Node* front;
    Node* rear;
} Deque;
 
// Función para crear un nuevo nodo
Node* createNode(int data) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = data;
    newNode->next = NULL;
    newNode->prev = NULL;
    return newNode;
}
 
// Función para inicializar la cola doble
Deque* createDeque() {
    Deque* deque = (Deque*)malloc(sizeof(Deque));
    deque->front = NULL;
    deque->rear = NULL;
    return deque;
}
 
// Función para agregar un elemento al frente
void addFront(Deque* deque, int data) {
    Node* newNode = createNode(data);
    if (deque->front == NULL) {
        deque->front = newNode;
        deque->rear = newNode;
    } else {
        newNode->next = deque->front;
        deque->front->prev = newNode;
        deque->front = newNode;
    }
}
 
// Función para agregar un elemento al final
void addRear(Deque* deque, int data) {
    Node* newNode = createNode(data);
    if (deque->rear == NULL) {
        deque->front = newNode;
        deque->rear = newNode;
    } else {
        newNode->prev = deque->rear;
        deque->rear->next = newNode;
        deque->rear = newNode;
    }
}
 
// Función para eliminar un elemento del frente
int removeFront(Deque* deque) {
    if (deque->front == NULL) {
        printf("Deque is empty\n");
        return -1; // Indica que la cola está vacía
    }
    Node* temp = deque->front;
    int data = temp->data;
    deque->front = deque->front->next;
    if (deque->front != NULL) {
        deque->front->prev = NULL;
    } else {
        deque->rear = NULL; // Si la cola queda vacía
    }
    free(temp);
    return data;
}
 
// Función para eliminar un elemento del final
int removeRear(Deque* deque) {
    if (deque->rear == NULL) {
        printf("Deque is empty\n");
        return -1; // Indica que la cola está vacía
    }
    Node* temp = deque->rear;
    int data = temp->data;
    deque->rear = deque->rear->prev;
    if (deque->rear != NULL) {
        deque->rear->next = NULL;
    } else {
        deque->front = NULL; // Si la cola queda vacía
    }
    free(temp);
    return data;
}
 
// Función para liberar la memoria de la cola
void freeDeque(Deque* deque) {
    while (deque->front != NULL) {
        removeFront(deque);
    }
    free(deque);
}
 
// Función principal para probar la implementación
int main() {
    Deque* deque = createDeque();
 
    addRear(deque, 10);
    addRear(deque, 20);
    addFront(deque, 5);
 
    printf("Removed from front: %d\n", removeFront(deque));
    printf("Removed from rear: %d\n", removeRear(deque));
 
    freeDeque(deque);
    return 0;
}

Explicación del código



1. Estructuras de datos:
- `Node`: Representa un nodo en la cola doble, que contiene un valor (`data`), un puntero al siguiente nodo (`next`) y un puntero al nodo anterior (`prev`).
- `Deque`: Representa la cola doble, que tiene punteros al primer (`front`) y al último nodo (`rear`).

2. Funciones:
- `createNode`: Crea un nuevo nodo.
- `createDeque`: Inicializa la cola doble.
- `addFront`: Agrega un elemento al frente de la cola.
- `addRear`: Agrega un elemento al final de la cola.
- `removeFront`: Elimina un elemento del frente de la cola y devuelve su valor.
- `removeRear`: Elimina un elemento del final de la cola y devuelve su valor.
- `freeDeque`: Libera la memoria utilizada por la cola.

3. Función principal: Se crean algunos elementos en la cola y se eliminan para demostrar su funcionamiento.

Compilación y ejecución



Para compilar y ejecutar el código, puedes usar un compilador de C como `gcc`:

1
2
gcc -o deque deque.c
./deque

Espero que esto te ayude a entender cómo programar una cola doble en C.
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