Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
cours
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
costanti.volta
cours
Commits
2b45b6a4
Verified
Commit
2b45b6a4
authored
1 year ago
by
orestis.malaspin
Browse files
Options
Downloads
Patches
Plain Diff
updated cours9
parent
000e364a
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
slides/cours_9.md
+2
-85
2 additions, 85 deletions
slides/cours_9.md
with
2 additions
and
85 deletions
slides/cours_9.md
+
2
−
85
View file @
2b45b6a4
...
...
@@ -210,7 +210,7 @@ void prises_devant(int n, bool board[n][n], int li, int co) {
*
de type
`LIFO`
(
*Last in first out*
).

](figs/Stack.svg){width=70%}
[Wikipedia
](
https://upload.wikimedia.org/wikipedia/commons/e/e1/Stack_
(
data_structure
)
_LIFO.svg)](figs/Stack.svg){width=70%}
## Des exemples de la vraie vie
...
...
@@ -368,8 +368,7 @@ void assert(int expression);
-
Macro permettant de tester une condition lors de l'exécution d'un programme:
-
Si
`expression == 0`
{.C} (condition fausse),
`assert()`
{.C} affiche un message d'erreur sur
`stderr`
{.C} et termine l'exécution du programme.
-
Sinon l'exécution se poursuit normalement.
-
Peuvent être désactivés à la compilation avec
`-DNDEBUG`
(équivalent à
`#define
NDEBUG`
)
-
Peuvent être désactivés à la compilation avec
`-DNDEBUG`
(équivalent à
`#define NDEBUG`
)
## À quoi ça sert?
...
...
@@ -417,85 +416,3 @@ int stack_peek(stack *s) {
-
Mais peuvent être pratiques quand même pour ça...
-
Typiquement désactivées dans le code de production.
# La pile dynamique
## Comment modifier le code précédent pour avoir une taille dynamique?
. . .
```
C
// alloue une zone mémoire de size octets
void *malloc(size_t size);
// change la taille allouée à size octets (contiguïté garantie)
void *realloc(void *ptr, size_t size);
```
## Et maintenant?
. . .
```
C
stack_create(); // crée une pile avec une taille par défaut
// vérifie si la pile est pleine et réalloue si besoin
stack_push();
// vérifie si la pile est vide/trop grande
// et réalloue si besoin
stack_pop();
```
## Exercice: ouvrir un repo/issues pour l'implémentation
*
Oui-oui cela est une introduction au développement collaboratif (et
hippie).
# Le tri à deux piles (1/3)
## Cas pratique

{width=70%}
# Le tri à deux piles (2/3)
## Exercice: formaliser l'algorithme
. . .
## Algorithme de tri nécessitant 2 piles (G, D)
Soit
`tab`
le tableau à trier:
```
C
pour i de 0 à N-1
tant que (tab[i] > que le sommet de G)
dépiler G dans D
tant que (tab[i] < que le sommet de D)
dépiler de D dans G
empiler tab[i] sur G
dépiler tout D dans G
tab est trié dans G
```
# Le tri à deux piles (3/3)
## Exercice: trier le tableau `[2, 10, 5, 20, 15]`
```
C
```
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment