Arbre Objective-c

CeetixCeetix Membre
11:49 modifié dans API AppKit #1
Bonsoir bonsoir !

Ma question est simple, je suis en train de voir en cours le principe des arbres (binaire, n-aire) en langage C.
Je voulais savoir s'il était posssible d'implémenter ce principe à  l'obj-c et si oui, de quelle maniere?

Merci ^^

Réponses

  • Philippe49Philippe49 Membre
    11:49 modifié #2
    @interface Node : ...  {
          NSMutableArray * children;
          Node * parent;
          .........
    }


    Un noe“ud retient ses fils par le mécanisme automatique du retain lors d'un [children addObject:...]
    Il ne retient pas son père pour éviter le cyclage lors de la destruction de l'arbre.
  • CeetixCeetix Membre
    11:49 modifié #3
    Donc en fait ton NSMutableArray * children;
    c'est le nombre de fils ? genre pour 5 fils j'aurai 5 case dans mon array ?

    Je comprend pas par contre le Parent ...

    En C pour un arbre binaire je fais ca :

    typedef struc sNoeud {
        int iInfo;
        struct sNoeud *pFilsG;
        struct sNoeud *pFilsD;
    }Noeud;
  • AliGatorAliGator Membre, Modérateur
    11:49 modifié #4
    La variable "parent" n'est pas obligatoire, c'est juste pour pouvoir naviguer dans ton arbre dans les deux sens.
    Tout comme pour les listes chaà®nées par exemple où parfois on n'a qu'une référence au suivant (listes simplement chaà®nées) et parfois on a une référence au suivant mais aussi au précédent (liste doublement chaà®née), ça dépend de ce dont tu as besoin.

    Là  si dans ton arbre en C tu veux descendre vers le fils de gauche ou de droit pas de souci, mais si tu veux remonter vers le parent d'un fils (tu as un noeud et tu veux savoir quel est son parent autrement dit de qui il est le fils) tu ne peux pas à  moins de reparcourir tout l'arbre pour le retrouver.

    Maintenant pour mimer le comportement que tu décris avec ton code C mais en Objective-C, c'est simple, il suffit de transformer ta structure en classe. Si tu n'as que deux fils, filsG et filsD, donc un arbre binaire, tu peux avoir une variable pour chacun comme c'est le cas dans ton code C :
    @inerface Noeud {<br />&nbsp; int lInfo; // je sais pas à  quoi correspond cette variable dans ton code, sans doute à  la &quot;valeur&quot; du noeud j&#39;imagine<br />&nbsp; Noeud* filsGauche;<br />&nbsp; Noeud* filsDroit;<br />}
    
    C'est exactement pareil sauf qu'en plus dans ton code Objective-C tu as une classe et non juste une structure C donc tu peux ajouter des méthodes à  cette classe, des accesseurs bien sûr, mais aussi des méthodes qui te disent si ton noeud est une feuille (aucun filsGauche ni filsDroit) ou d'autres trucs, qu'en C tu es obligé d'implémenter sous forme de fonctions indépendantes de ta struct (qui prennent la struct en paramètre de la fonction typiquement) donc c'est moins "objet".


    Si tu commences à  avoir N fils, plutôt que d'avoir N variables, tu peux avoir un tableau, en C ça sera des tableaux C (avec la nécessité d'indiquer en plus le nombre d'éléments par exemple), en Objective-C ça se fera avec un NSMutableArray comme indiqué par Philippe.
  • CeetixCeetix Membre
    11:49 modifié #5
    Merci AliGator ce sont de tres bonnes explications !
    Je vais m'y mettre ^^
  • schlumschlum Membre
    11:49 modifié #6
    à‰tant donné que les appels C sont ben plus rapide que les appels Objective-C, je te conseille de te cantonner au C pour travailler avec ce genre de structures, et de garder l'Objective-C pour des choses plus "high level"  ;)

    (éventuellement, les noe“uds de ton arbre C peuvent contenir des objets Objective-C si c'est le but...)
  • CeetixCeetix Membre
    11:49 modifié #7
    Donc je peux coder en C (struture, declaration de fonction,etc...) pour mac et iphone?
  • AntilogAntilog Membre
    11:49 modifié #8
    dans 1227297364:

    Donc je peux coder en C (struture, declaration de fonction,etc...) pour mac et iphone?

    Bien sûr, tout C est dans Objective-C!!
  • CeetixCeetix Membre
    11:49 modifié #9
    C'est cool ça ^^.
    Vais pouvoir appliquer mes cours :)
Connectez-vous ou Inscrivez-vous pour répondre.