Zum Sortieren eines Stapels mit nur Push, Pop, Top, IsEmpty, IsFull?
Gegeben ein Stapel S, muss Sortieren der Stapel, mit nur Push
, Pop
, Top
, IsEmpty
, IsFull
.
Auf der Suche für die einfachste Lösung.
Bearbeitet werden: Entfernt im Ort Zustand. Können nicht verwenden Sie einen anderen Stapel oder Warteschlange.
- wenn diese Hausaufgaben, bitte markieren Sie Sie als solche
- Nein ist es nicht!!!
- Einfach. Pop alles in einen Vektor, Sortieren, schieben Sie es alles zurück. Version 2 entledigt sich der stack, weil es die falsche Datenstruktur. Tun es auf andere Weise ist nur interessant für Hausaufgaben.
- Können Sie ändern die Datenstruktur?
- Nein können wir nicht.
- Können Sie mehr als einen stack?
- Nein verwenden können ein weiterer stack oder queue.
- Einsatz von zusätzlichen Arrays ist nicht erlaubt. Nicht bedienen, SO dass für diese Lösung würde ich..
- Das klingt wie eine furchtbar gemeinsame Hausaufgaben-problem. Welche Art von Unternehmen oder Programmieren würde, verbieten Sie von der Nutzung zusätzlicher Speicher? Nicht die änderung der primären Struktur der Daten, sicher, (Teil von jemand anderem interface), aber nicht in der Lage, zum erstellen von sekundären Speicher? Recht. Zugegeben, die Hausaufgaben, die Präsentation ist lösbar, während Ihnen nicht. Wenn es keine Hausaufgaben sind, warum sind Sie platzieren eine solche schwere Einschränkungen auf sich?
- das ist einfach nur völliger Unsinn. Der stack besteht kein Zweifel, wurde mit Hilfe eines Arrays, Sortieren Sie die frikkin array. Ich glaube nicht für eine minute, dies ist keine Hausaufgaben Frage, die Abstimmung zu schließen.
- gut, wenn Sie call-Vorbereitung für Vorstellungsgespräche, wie Hausaufgaben, dann ist es, dass nur. Wenn Sie nicht über eine Lösung - das ist auch OK so. Nehmen Sie es nicht als einen Fehler. Es gibt viele Helfer, SO dass Benutzer, die versuchen, mir zu helfen. Trotzdem danke.
- Nun, wenn Sie Jungs haben, mal schauen link in Anthony ' s Antwort. Es gibt eine Lösung, die nur mit zwei Variablen zu Sortieren eines Stacks.
- Bitte rufen Sie nicht an eine Frage, wie 'völliger Quatsch'. Das einzige, was völliger non sense hier ist Ihr Kommentar. Sie besitzen nicht SO OK!!!!
- Ankit, Nein, Anthony die Antwort verwendet einen zweiten Stapel.
- Vermutlich ist es akzeptabel, zu verwenden, was den Mechanismus Sprache bietet die Verknüpfung der call-frames zusammen. (Ja, dies ist in der Regel, aber nicht immer ein stack) So, schreiben oder zitieren Sie eine rekursive Lösung, und nennen es einen Tag. Es ist sicherlich möglich, zu lösen mit einem halbwegs vernünftigen, wenn nicht allzu strenger Auslegung sogar die ursprünglichen unbearbeiteten Zustand. Ich habe es getan.
- Wir sind nicht die Erstellung von neuen Tags für eine Frage, wenn ein geeigneter tag existiert.
- Ich denke, eine "zweite Stapel" oder "in-place" bedeutet einfach, dass Sie nicht verwenden können, ein anderes Aggregat-Daten-Struktur, der eine ähnliche Größe. Dies ist eine durchaus vernünftige Frage, und es hat eine ziemlich einfache Antwort.
- Wow es gibt eine Menge von kritischen Menschen gibt. Wer kümmert sich, wenn es die Hausaufgaben, interview, aktuelle Arbeit, oder einfach nur someong gelangweilt aus seinem Geist zu entscheiden, um code zu schreiben, als auf ein date gehen? Die Frage ist gestellt. Wenn Sie nicht denken, es lohnt sich Ihre kostbare Zeit, die dann nicht reagieren, aber vergeuden Sie nicht, die gleiche kostbare Zeit, jammern und Klagen, Sie hätten zu nehmen, wertvolle Zeit aus Ihrem Tag zu Lesen, über ein problem, das Sie lösen konnte nicht vor ein paar Jahren.
- Ich kann nicht für andere sprechen, aber ich persönlich egal, so oder so. Was mich ärgert ist, wenn Leute Fragen, offensichtliche test-basierte Frage, sei es Hausaufgaben machen oder etwas anderes, dann verweigern Sie jede Art von Befragung oder geben keine ehrliche Antwort. Seien Sie direkt und sagen, dass es Hausaufgaben/interview rezension/etc. nicht schlagen, um es.
- Eh. Mein Punkt ist. Wer gibt einen rip? Eine Frage ist eine Frage. Tun Sie wirklich brauchen, zu wissen, warum, um Sie zu beantworten? Ich sehe eine Tonne von Fragen, die beantwortet werden konnten, einfach wenn die person, eingegeben in Google. Was ich nicht mache (in der Regel, aber in diesem Fall scheint die Ausnahme zu sein), ist Verschwendung von Zeit wonking darüber. Ich Ignoriere die Frage und bewegen auf.
- I don ' T care, ich war nicht der, der zu Fragen wenn es Hausaufgaben. 😛 Aber einmal war es gefragt, die das Verhalten nervte mich.
- Woah!! "Verhalten nervte" ihn. Grandios!! Sehen Sie, ich änderte meinen Griff um 'homeWorkBoy'. Nun, jede Frage, die ich als Hausaufgaben Frage. 😀 - OP (Ankit)
- Wäre es nicht toll, wenn @GMan änderte seinen Griff um 'GMan_thePolice'. Helfen, den kleinen wie uns, die sich richtig Verhalten, wenn er Rum 😀 🙂
- Deine Reife scheint wie ein fels in eine Höhle.
- Jetzt würde der rock glänzen, wenn es war eine Kohle. So sollten Sie haben gesagt, Sie wie ein Diamant in der Höhle. Shine on you crazy diamond kann sein :). Und wer will schon reif zu sein 😉
- Einen Punkt gut gemacht.
- Keine eigene Anstrengung gezeigt. -1.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es kann getan werden...
Ok: sortiert, ähem, "in-place" und nur mit den aufgeführten ops trifft nicht brauchen, Oben() oder IsFull() oder einen anderen stack oder Daten-Struktur, die andere als die call-frames. (Vermutlich der springende Punkt der
Hausaufgabenproblem war, erfordern eine rekursive Lösung.)Ruby
resort
die nicht davon ausgehen, dass der stack ist bereits sortiert undsort
die nicht. Beide arbeiten, indem Sie rekursiv knallen ein element ab, bis Ihr Ziel erreicht ist. Im Falle der top-level -resort
es das Ziel ist, entfernen Sie alles und bauen es wieder auf, durch den Aufrufsort
, undsort
Werke von recursing gerade weit genug, um ein einzelnes element. Ich denke, dies war der Sinn der übung.Für dieses problem, können wir prüfen, mit dem system-stack? Mehrere rekursive Aufrufe.
techInterview Diskussion - Sortierung auf Stapel
Mehr pseudo als alles andere, aber es gibt code-Beispiele und mögliche Lösung.
Nicht möglich.
Das geschieht, weil Sie nicht Durchlaufen, den stack, weil es im Ort (Sie könnten, wenn Sie verwenden würden, extra-Speicher). So wenn Sie nicht Durchlaufen Sie die stack-Sie können nicht einmal vergleichen Sie zwei Elemente auf dem stack. Eine Art ohne Vergleich würde müssen zusätzlichen Speicher, so dass kann nicht verwendet werden, entweder.
Auch im sicher, dass seine Hausaufgaben nicht, weil ich glaube nicht, dass ein Lehrer Ihnen wäre ein problem, dass nicht gelöst werden.
Wenn Sie wirklich müssen tun Sie es nur mit stacks, verwenden Sie einfach 1-2 zusätzliche temporäre Stapel (ich denke, 2 sind gebraucht, aber nicht 100% sicher) und es tun.
Was für temporäre Daten-Strukturen können Sie nutzen?
Mit push und pop, und kein temporärer Speicher für n Elemente, Zugriff auf Daten, die in der Nähe der Unterseite des Stapels wäre unmöglich ohne die Speicherung des rest -irgendwo-.
Wenn
top
(equiv zu{x=pop();push(x);return x}
) ersetzt wurde mitshift
wäre es perfekt machbar - der Stapel würde sich ändern, in den fifo-Speicher (shift+push, pop würde in Vergessenheit fallen) und es erlauben würde, für eine einfache bubblesort auf den aktuell verfügbaren Elemente.Können Sie nicht. Sie können nicht Sortieren Sie die Inhalte von einem Stapel, ohne entfernen von Elementen, per definition. Auch push und pop sind nicht in-place-Operationen, so dass im Grunde Sie Fragen zu Sortieren eines Stacks mit Top, IsEmpty und IsFull.
IsEmpty = !IsFull. So Fragen Sie zum Sortieren eines Stacks mit Top und IsEmpty.Schlechten Sie nicht haben konnte beiden anderen Stapel, dann könnte man gespielt haben, die Türme von Hanoi in O(n) Speicherplatz.
//Eine java-version
Bubble-Sort und Insert-Sort in Java
https://github.com/BruceZu/sawdust/blob/82ef4729ee9d2de50fdceab2c8976d00f2fd3ba0/dataStructuresAndAlgorithms/src/main/java/stack/SortStack.java
Sortieren stapeln ohne zusätzliche Raum ist durchaus nicht eine Möglichkeit .
Zumindest keine, die zu meiner sane mind .
Wir können sicherlich die Verwendung der rekursions-stack als zusätzlichen Platz hier .
Die unter Ansatz könnte helful .
Mein Ansatz ist O(N**2) . Hier bin ich der Iteration über stack-N mal, jedes mal die Befestigung der I-TEN element in den stack .
Erstens fest das element unten durch, knallend aus N Elementen, und drücken min_element und in
Zweiten Versuch behoben, das 2. element von unten durch, knallend aus N-1 Elementen und schob min_element außer das man geschoben, bevor diese
Und so weiter .
Finden Sie den code unten für mehr details .