2 Stimmen

Was ist die beste Datenstruktur, um ein Element aus der Mitte zu entfernen?

Die Datenstruktur muss wie ein Stapel sein. Nur mit einem Unterschied. Ich möchte von einem beliebigen Index aus poppen, nicht nur vom letzten. Wenn ich ein Element gepoppt habe n die Elemente mit den Indizes N > n muss wechseln zu N-1 . Irgendwelche Ideen?

P.S.

  1. Schiebendes Element n in den letzten Index des Stapels.
  2. Dann springt er heraus.
  3. Dann löschen Sie stack[n]

ist eine schlechte Idee.

4voto

Phonon Punkte 12271

Ich glaube, Sie suchen nach einer verknüpften Liste.

1voto

ChrisWue Punkte 17876

Eine verknüpfte Liste ( std::list ) ermöglicht es Ihnen, ein Element aus der Mitte zu entfernen mit O(1) Komplexität und "zieht" automatisch die nachfolgenden Elemente hoch. Sie können eine verknüpfte Liste wie einen Stapel verwenden, indem Sie push_front . Sie müssen sich jedoch bewusst sein, dass der Zugriff auf ein Element in einer verknüpften Liste O(n) da Sie am Anfang der Liste beginnen und dann die Links von einem Element zum nächsten durchlaufen müssten, bis Sie beim Element n (es gibt also keine O(1) Indizierung)

Im Grunde müssten Sie

  • Einen Iterator erstellen
  • advance es zu positionieren n
  • Holt das Element aus dem Iterator
  • erase das Element, auf das der Iterator gerade zeigt

Einige Beispielcodes finden Sie hier aquí .

0voto

haberdar Punkte 501

Sie müssen eine verknüpfte Liste implementieren, aber anders als bei einem Array wird die Reihenfolge in einer verknüpften Liste durch einen Zeiger in jedem Objekt bestimmt. Sie können also keine Indizes für den Zugriff auf die Elemente verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X