La fonction get_iemepermet de récupérer le i-ème élément d’un fichier implémenté en tableau circulaire. Ce guide vous expliquera comment intégrer cette fonctionnalité dans un programme C qui gère des fichiers en tableaux circulaires.
get_iemeLa fonction get_iemedoit permettre de récupérer l’élément situé à une position spécifique dans un fichier circulaire sans le retirer. Le fichier est géré sous forme de tableau circulaire.
Pour intégrer get_ieme, nous devons disposer les éléments suivants dans la structure de la fiche circulaire :
head : Pointant vers le début de la file.tail : Pointant vers la position suivante pour l’insertion. typedef struct {
int *data; // Tableau pour stocker les éléments
int capacity; // Capacité maximale du tableau
int head; // Indice du premier élément
int tail; // Indice du prochain emplacement d'insertion
int size; // Nombre d'éléments actuels
} CircularQueue;
void initializeQueue(CircularQueue *queue, int capacity) {
queue->data = (int *)malloc(capacity * sizeof(int));
if (queue->data == NULL) {
printf("Erreur d'allocation mémoire.\n");
exit(1);
}
queue->capacity = capacity;
queue->head = 0;
queue->tail = 0;
queue->size = 0;
}
get_iemeget_iemei(i-ème élément) sans modifier le fichier.idoit être valide (0 ≤ i < taille actuelle du fichier).index = (head + i) % capacity;get_ieme int get_ieme(CircularQueue *queue, int i, int *value) {
if (i < 0 || i >= queue->size) {
return -1; // Indice invalide
}
int index = (queue->head + i) % queue->capacity; // Calcul de l'indice circulaire
*value = queue->data[index];
return 0; // Succès
}
Voici un programme complet intégrant get_ieme:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int *data; // Tableau pour stocker les éléments
int capacity; // Capacité maximale
int head; // Indice du premier élément
int tail; // Indice du prochain emplacement d'insertion
int size; // Nombre d'éléments actuels
} CircularQueue;
// Initialisation de la file
void initializeQueue(CircularQueue *queue, int capacity) {
queue->data = (int *)malloc(capacity * sizeof(int));
if (queue->data == NULL) {
printf("Erreur d'allocation mémoire.\n");
exit(1);
}
queue->capacity = capacity;
queue->head = 0;
queue->tail = 0;
queue->size = 0;
}
// Ajouter un élément à la file
int enqueue(CircularQueue *queue, int value) {
if (queue->size == queue->capacity) {
return -1; // La file est pleine
}
queue->data[queue->tail] = value;
queue->tail = (queue->tail + 1) % queue->capacity; // Gestion circulaire
queue->size++;
return 0;
}
// Retirer un élément de la file
int dequeue(CircularQueue *queue, int *value) {
if (queue->size == 0) {
return -1; // La file est vide
}
*value = queue->data[queue->head];
queue->head = (queue->head + 1) % queue->capacity; // Gestion circulaire
queue->size--;
return 0;
}
// Récupérer le i-ème élément de la file
int get_ieme(CircularQueue *queue, int i, int *value) {
if (i < 0 || i >= queue->size) {
return -1; // Indice invalide
}
int index = (queue->head + i) % queue->capacity; // Calcul de l'indice circulaire
*value = queue->data[index];
return 0; // Succès
}
// Libérer la mémoire de la file
void freeQueue(CircularQueue *queue) {
free(queue->data);
queue->data = NULL;
queue->capacity = queue->head = queue->tail = queue->size = 0;
}
// Programme principal
int main() {
CircularQueue queue;
initializeQueue(&queue, 5); // Capacité de la file : 5
// Ajout d'éléments dans la file
enqueue(&queue, 10);
enqueue(&queue, 20);
enqueue(&queue, 30);
enqueue(&queue, 40);
enqueue(&queue, 50);
// Récupérer le i-ème élément sans le retirer
int value;
for (int i = 0; i < queue.size; i++) {
if (get_ieme(&queue, i, &value) == 0) {
printf("Élément %d : %d\n", i, value);
} else {
printf("Impossible de récupérer l'élément %d\n", i);
}
}
// Libérer la mémoire
freeQueue(&queue);
return 0;
}
enqueue) : get_ieme : get_iemepermet de récupérer chaque élément sans modifier le fichier.Si vous exécutez le programme, vous obtiendrez la sortie suivante :
Élément 0 : 10
Élément 1 : 20
Élément 2 : 30
Élément 3 : 40
Élément 4 : 50
idoit être comprise entre 0et queue->size - 1.(head + i) % capacity.get_iemene modifiez pas le fichier, contrairement à dequeue.get_iemethread-safe : Utilisez des verrous ou des fonctions atomiques pour sécuriser l’accès dans un environnement multithread.intpar void *pour gérer différents types de données.Dans l’industrie, certaines minutes coûtent extrêmement cher. Lorsqu’une machine stratégique s’arrête au milieu d’une production,…
Le calcul d’incertitude constitue une étape essentielle dans toute mesure scientifique. En physique, en chimie,…
Le fraisage CNC sous commande Fanuc repose sur une logique de précision, de trajectoires coordonnées…
Le langage Fanuc s’impose aujourd’hui comme l’un des fondements de l’usinage CNC moderne. Derrière les…
Un entretien d’embauche ressemble rarement à une conversation ordinaire. Derrière des questions en apparence simples…
Préparez efficacement votre entretien commercial avec 140 questions clés et 12 mises en situation concrètes…
This website uses cookies.