Skip to content
Snippets Groups Projects
Commit 46181620 authored by Pierre Kunzli's avatar Pierre Kunzli
Browse files

ajout serie 12 corrige partiel

parent 4bb570db
Branches
No related tags found
No related merge requests found
main: dll.o browser.c
gcc browser.c dll.o -o browser -Wall -Wextra -g -pedantic -fsanitize=address -fsanitize=leak
dll.o: dll.c dll.h
gcc -c -Wall -Wextra -g -pedantic -fsanitize=address -fsanitize=leak dll.c -o dll.o
clean :
rm -r *.o
#include "dll.h"
int main(){
dll list = dll_create();
list = dll_push(list, "bonjour");
list = dll_push(list, "123");
dll_print(list);
dll_destroy(&list);
}
\ No newline at end of file
#include "dll.h"
// === Création et consultation ===
// crée la liste doublement chaînée
dll dll_create(){
dll res;
res.head = NULL;
res.cur = NULL;
return res;
}
// retourne la valeur à la position actuelle dans la liste
char* dll_value(dll list){
if(list.cur == NULL){
return NULL;
}
return list.cur->data;
}
// la liste est-elle vide?
bool dll_is_empty(dll list){
return list.head==NULL;
}
// Est-ce que cur est le 1er élément?
bool dll_is_head(dll list){
return list.head != NULL && list.head == list.cur;
}
// Est-ce que cur est le dernier élément?
bool dll_is_tail(dll list){
return list.cur != NULL && list.cur->next == NULL;
}
// data est-elle dans la liste?
bool dll_is_present(dll list, char* data){
return false;
}
// affiche la liste
void dll_print(dll list){
if(!dll_is_empty(list)){
list = dll_move_to_head(list);
while(!dll_is_tail(list)){
printf("%s\n", dll_value(list));
list = dll_next(list);
}
printf("%s\n", dll_value(list));
}
}
// === Manipulation ===
// déplace cur au début de la liste
dll dll_move_to_head(dll list){
list.cur = list.head;
return list;
}
// déplace cur à la position suivante dans la liste
dll dll_next(dll list){
if(!dll_is_tail(list)){
list.cur = list.cur->next;
}
return list;
}
// déplace cur à la position précédente dans la liste
dll dll_prev(dll list){
if(!dll_is_head(list)){
list.cur = list.cur->prev;
}
return list;
}
// === Insertion ===
// insertion de data dans l'élément après cur
dll dll_insert_after(dll list, char* data){
// A IMPLEMENTER
dll res;
return res;
}
// insertion de data en tête de liste
dll dll_push(dll list, char* data){
element *new = malloc(sizeof(element));
new->prev = NULL;
new->next = list.head;
if(!dll_is_empty(list)){
list.head->prev = new;
}
list.head = new;
new->data = malloc(strlen(data)+1*sizeof(char));
strcpy(new->data, data);
return list;
}
// === Extraction ===
// extraction de la valeur se trouvant dans l'élément cur
// l'élément cur est libéré (mais pas la chaine de caractères)
char* dll_extract(dll *list){
// A IMPLEMENTER
return NULL;
}
// extrait la donnée en tête de liste
// l'élément en tête est libéré (mais pas la chaine de caractères)
char* dll_pop(dll *list){
// A IMPLEMENTER
return NULL;
}
// vide la liste (les chaines de caractères sont libérées)
void dll_destroy(dll *list){
*list = dll_move_to_head(*list);
element* cur = list->cur;
while(cur !=NULL && cur->next != NULL){
cur = cur->next;
free(cur->prev->data);
free(cur->prev);
}
free(cur->data);
free(cur);
list->head = NULL;
list->cur = NULL;
}
\ No newline at end of file
#include <stdlib.h>
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
typedef struct element_{
char* data;
struct element_* prev;
struct element_* next;
}element;
typedef struct dll_{
element* head;
element* cur;
}dll;
// === Création et consultation ===
// crée la liste doublement chaînée
dll dll_create();
// retourne la valeur à la position actuelle dans la liste
char* dll_value(dll list);
// la liste est-elle vide?
bool dll_is_empty(dll list);
// Est-ce que cur est le 1er élément?
bool dll_is_head(dll list);
// Est-ce que cur est le dernier élément?
bool dll_is_tail(dll list);
// data est-elle dans la liste?
bool dll_is_present(dll list, char* data);
// affiche la liste
void dll_print(dll list);
// === Manipulation ===
// déplace cur au début de la liste
dll dll_move_to_head(dll list);
// déplace cur à la position suivante dans la liste
dll dll_next(dll list);
// déplace cur à la position précédente dans la liste
dll dll_prev(dll list);
// === Insertion ===
// insertion de data dans l'élément après cur
dll dll_insert_after(dll list, char* data);
// insertion de data en tête de liste
dll dll_push(dll list, char* data);
// === Extraction ===
// extraction de la valeur se trouvant dans l'élément cur
// l'élément cur est libéré (mais pas la chaine de caractères)
char* dll_extract(dll *list);
// extrait la donnée en tête de liste
// l'élément en tête est libéré (mais pas la chaine de caractères)
char* dll_pop(dll *list);
// vide la liste (les chaines de caractères sont libérées)
void dll_destroy(dll *list);
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment