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

added search

parent 26736b38
No related branches found
No related tags found
No related merge requests found
Pipeline #15035 passed
......@@ -416,10 +416,23 @@ Une liste chaînée triée est:
# Les listes triées
## Quelle structure de données?
## Quel but?
* Permet de retrouver rapidement un élément.
* Utile pour la recherche de plus court chemin dans des graphes.
* Ordonnancement de processus par degré de priorité.
## Comment?
* Les implémentations les plus efficaces se basent sur les tableaux.
* Possibles aussi avec des listes chaînées.
# Les listes triées
## Quelle structure de données dans notre cas?
Une liste chaînée bien sûr!
Une liste chaînée bien sûr (oui c'est pour vous entraîner)!
```C
typedef struct _element { // chaque élément
......@@ -614,19 +627,81 @@ element* sorted_list_search(sorted_list list, int val);
. . .
```C
element* recherche(liste lst,int val) {
element* pos = position(lst,val);
if (est_vide(lst)) {
return NULL;
element* sorted_list_search(sorted_list list, int val) {
// search for element smaller than val
element* pos = sorted_list_position(list, val);
if (NULL == pos && val == list->data) {
return list; // first element contains val
} else if (NULL != pos->next && val == pos->next->data) {
return pos->next; // non-first element contains val
} else {
return NULL; // well... val's not here
}
if (NULL == pos && val == lst->n) {
return lst;
} else if (NULL != pos->suivant && val == pos->suivant->n) {
return pos->suivant;
}
```
# La recherche
## La fonction `sorted_list_position`
```C
element* sorted_list_position(sorted_list list, int val);
```
![Trois exemples de retour de la fonction `sorted_list_position()`.](figs/sorted_list_position.svg)
# La recherche
## Exercice: implémenter
```C
element* sorted_list_position(sorted_list list, int val);
```
. . .
```C
element* sorted_list_position(sorted_list list, int val) {
element* pos = list;
if (sorted_list_is_empty(list) || val <= list->data) {
pos = NULL;
} else {
return NULL;
while (NULL != pos->next && val > pos->next>data) {
pos = pos->next;
}
}
return pos;
}
```
# Exercice: recherche sans position
# Complexité de la liste chaînée triée
## L'insertion?
. . .
$$
\mathcal{O}(N).
$$
## L'extraction?
. . .
$$
\mathcal{O}(N).
$$
## La recherche?
. . .
$$
\mathcal{O}(N).
$$
# Liste doublement chaînée
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