IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

[Gestion de la saisie] Vecteur ou linked list ?


Sujet :

Algorithmes et structures de données

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 9
    Points : 6
    Points
    6
    Par défaut [Gestion de la saisie] Vecteur ou linked list ?
    Salut à tous,

    Dans le cadre d'un petit projet pédagogique, la programmation d'un interpréteur de commandes, je dois recréer les fonctionnalités de saisie de texte habituelles, car je n'utilise pas le mode ligne de saisie proposé par le pilote de terminal linux (mode canonique).

    Pour info : je code en C (pour rester proche du système, vu que c'est ce qui m'intéresse), et je n'ai pas posté dans la section C car ma problématique n'est pas en rapport avec le choix du langage.

    Je dois donc gérer le déplacement du curseur, le backspace, etc...

    J'en arrive donc à ma question : j'utilise pour l'instant un vecteur pour stocker les caractères saisis par l'utilisateur mais je dois déplacer tout le contenu celui ci lors de l'insertion non terminale...

    Ex : l'utilisateur saisit la chaîne "ABC", puis déplace le curseur une fois vers la gauche pour insérer après le char 'B'. Le contenu du vecteur doit être décalé de 1 rang vers la droite pour permettre l'insertion du nouveau char > ABxC où x est le nouveau char.

    Cela sous entend qu'à chaque insertion non terminale ou chaque effacement, un sous ensemble du vecteur doit être décalé, ce qui me semble un petit peu lourd en terme de traitement

    J'envisage donc l'utilisation d'une liste linéaire doublement chaînée pour permettre l'insertion de contenu direct, où chaque élément de la liste contient un char, mais :

    - Cela nécessite une allocation mémoire à chaque frappe
    - Cela empêche l'accès direct au donnée
    - Et puis ça demande à développer une fonction qui retourne un char * de la liste pour l'exploiter...

    Au final je me demande si une approche hybride exploitant ces deux types de structure de donnée n'est pas envisagable.

    Qu'en pensez vous, et existe-t-il des voies alternatives (car je suis loin d'avoir une vue exhaustive du sujet).

    j'avoue ne pas avoir regardé les sources d'autres projets similaires, soit car les sources sont trop touffues, et comme c'est à but pédagogique, je réinvente volontairement la roue (j'utilise le moins de librairies possible par ex.)

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par TutuXoZaure Voir le message
    Cela sous entend qu'à chaque insertion non terminale ou chaque effacement, un sous ensemble du vecteur doit être décalé, ce qui me semble un petit peu lourd en terme de traitement
    Ce n'est pas si lourd que cela, mais soit.

    Au final je me demande si une approche hybride exploitant ces deux types de structure de donnée n'est pas envisagable.

    Qu'en pensez vous, et existe-t-il des voies alternatives (car je suis loin d'avoir une vue exhaustive du sujet).
    Une idée, comme ça :

    - Une pile pour les caractères a gauche du curseur
    - Une pile pour les caractères à droite du curseur
    - quelques opérations simples qui gèrent le déplacement du curseur, l'ajout et la suppression d'un caractère.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Ce n'est pas si lourd que cela, mais soit.
    Certes, mais c'est plus pour l'intérêt de la démarche, entrainer la réflexion. Je suis d'accord qu'en terme de charge, c'est tout à fait négligeable.

    Citation Envoyé par pseudocode Voir le message
    Une idée, comme ça :

    - Une pile pour les caractères a gauche du curseur
    - Une pile pour les caractères à droite du curseur
    - quelques opérations simples qui gèrent le déplacement du curseur, l'ajout et la suppression d'un caractère.
    Alors ça c'est vraiment bien comme idée. J'avais envisagé d'utiliser des listes linéaires dont chaque élément contiendrait un vecteur de char, avec un élément de la liste par sous chaîne. Mais là c'est un bon compromis entre simplicité et efficacité du traitement, c'est élégant.

    Merci, je vais essayer ça !

  4. #4
    Membre expérimenté
    Profil pro
    chercheur
    Inscrit en
    Avril 2004
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Avril 2004
    Messages : 830
    Points : 1 453
    Points
    1 453
    Par défaut
    J'ai un vague souvenir d'éditeur "à brèche". Les caractères avant le curseur sont au début du tableau, ceux après à la fin et les nouveaux se mettent dans la brèche. Les déplacements interviennt seulement quand on passe d'un déplacement de curseur à un caractère du texte.
    Ce qui s'énonce clairement se conçoit bien ( Le hautbois)

Discussions similaires

  1. Réponses: 7
    Dernier message: 22/06/2007, 10h56
  2. [VB.NET].saisie progressive dans zone liste déroulante
    Par LE VIEUX dans le forum Windows Forms
    Réponses: 10
    Dernier message: 27/09/2006, 13h21
  3. masque de saisie et zone de liste
    Par noname_971 dans le forum IHM
    Réponses: 2
    Dernier message: 15/02/2006, 15h19
  4. Réponses: 6
    Dernier message: 20/01/2006, 10h18
  5. [formulaire web] gestion de la saisie
    Par Leishmaniose dans le forum Web
    Réponses: 7
    Dernier message: 18/01/2006, 13h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo