Vorrei premettere questo post dicendo che non ho ancora lavorato su alcun editor di testo. Potrebbe esserci qualche pratica standard di cui non sono a conoscenza ... detto questo, un albero non sembra avere molto senso qui; cosa avresti per i fratelli? Se hai provato ad usare un albero, penso che ti ritroverai con una lista collegata, che funziona bene qui.
Che cosa vuoi dalla tua struttura dati? Presumo che sia necessario spostare rapidamente il cursore, facendo copia / incolla velocemente, ecc. Con un elenco collegato, si hanno inserimenti a tempo costante, quindi spostare il cursore è semplice come rimuovere un nodo cursore speciale __c
e inserire è un posto in avanti.
(T) -> (h) -> (__c) -> (i) -> (s)
(T) -> (h) -> (i) -> (__c) -> (s)
Funziona bene anche perché la maggior parte della navigazione di un utente sarà "lineare"; probabilmente spostano il cursore uno spazio avanti o indietro alla volta. Il solito svantaggio delle liste collegate è l'indicizzazione, ma questo comportamento si presta bene a un iteratore.
Ci saranno sempre casi in cui l'utente usa il mouse per fare clic e spostare il cursore su una posizione molto precedente, e potresti voler cambiare la struttura del nodo per contenere più di una lettera o finirai per scorrere tra migliaia di nodi per spostare il cursore, ma questa è l'idea generale. Forse vuoi rendere ogni nodo un nodo "paragrafo" che punta a un altro elenco di caratteri collegati? Potresti voler rendere il nodo primario un nodo di "formattazione"; la scelta è tua.