Skip to content
Snippets Groups Projects
Verified Commit f0d9ffcc authored by orestis.malaspin's avatar orestis.malaspin
Browse files

added linked list

parent 4733c99c
No related branches found
No related tags found
No related merge requests found
Pipeline #14961 passed
---
title: "Backtracking et piles"
title: "Piles et files d'attente"
date: "2021-11-25"
patat:
eval:
......@@ -148,6 +148,10 @@ int stack_peek(stack *s) {
}
```
## Quelle est la complexité de ces opérations?
. . .
## Voyez-vous des problèmes potentiels avec cette implémentation?
. . .
......@@ -502,3 +506,153 @@ char *infix_to_postfix(char* infix) { // init and alloc stack and postfix
return postfix;
}
```
# La liste chaînée et pile (1/N)
## Structure de données
* Chaque élément de la liste contient:
1. une valeur,
2. un pointeur vers le prochain élément.
* La pile est un pointeur vers le premier élément.
![Un exemple de liste chaînée.](figs/Singly-linked-list.svg){width=80%}
# La liste chaînée et pile (2/N)
## Une pile-liste-chaînée
```C
typedef struct _element {
int data;
struct _element *next;
} element;
typedef element* stack;
```
## Fonctionnalités?
. . .
```C
stack stack_create(); // return NULL;
void stack_destroy(stack *s);
void stack_push(stack *s, int val);
int stack_pop(stack *s);
int stack_peek(stack s);
bool stack_is_empty(stack s); // reutrn NULL == stack;
```
# La liste chaînée et pile (3/N)
## Empiler? (faire un dessin)
. . .
```C
```
## Empiler? (le code ensemble)
. . .
```C
void stack_push(stack *s, int val) {
element *elem = malloc(sizeof(*elem));
elem->data = val;
elem->next = *stack;
stack = elem;
}
```
# La liste chaînée et pile (4/N)
## Jeter un oeil? (faire un dessin)
. . .
```C
```
## Jeter un oeil? (le code ensemble)
. . .
```C
int stack_peek(stack s) {
return s->data;
}
```
# La liste chaînée et pile (5/N)
## Dépiler? (faire un dessin)
. . .
```C
```
## Dépiler? (le code ensemble)
. . .
```C
int stack_pop(stack *s) {
int val = stack_peek(*s);
element *tmp = *s;
*s = (*s)->next;
free(tmp);
return val;
}
```
# La liste chaînée et pile (6/N)
## Détruire? (faire un dessin)
. . .
```C
```
## Détruire? (le code ensemble)
. . .
```C
void stack_destroy(stack *s) {
while (!stack_is_empty(*s)) {
int val = stack_pop(s);
}
}
```
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment