Oui, une liste chaînée serait pratique alors, je pense.
Il s'agit tout simplement de relier entre elles tes strings :
str1 -> str2 -> str3 -> str4 -> 0
Si tu veux un supprimer la string 3, il te suffit simplement de faire pointer la 2 sur la 4, ce qui fait qu'en parcourant ta liste chaînée, tu passeras directement de la 2 à la 4, donc c'est comme si la 3 aurait été supprimée.
Si tu veux ajouter une string, il te suffit de faire l'opération inverse : tu veux par exemple ajouter une string entre la 3 et la 4, tu n'as qu'à faire pointer la 3 vers cette nouvelle string et faire pointer la nouvelle vers la 4. Ainsi en parcourant la liste chainée, tu iras de la 3 à la nouvelle, puis à la 4.
Pour déplacer une string, ça revient au même que la supprimer puis l'ajouter quelque part.
Par exemple, voici une structure possible :
#define TAILLE_STR 15
typedef struct favori
{
char string[TAILLE_STR];
struct favori *suivant; // Ou bien 'short suivant;' si tu utilises un tableau, ce qui sera probablement ton cas
}FAVORI;Tu peux te contenter d'un membre suivant seulement ou bien tu peux chainer ta liste doublement : tu rajoute un pointeur vers le membre précédent. Mais ça te fait faire deus fois plus de manipulations pour en supprimer ou en ajouter une.