Come è possibile Invertire lo stack senza utilizzare alcuna struttura di dati (extra)? Qualche suggerimento o Pseudo codice potrebbe essere utile. Cerco e non sono riuscito a trovare alcuna soluzione praticabile. Il problema qui è che non mi piacciono le dimensioni dello stack. Se so che potrei almeno continuare a creare qualcosa, grazie in anticipo.Stack inverso senza utilizzare alcuna struttura dati
5
A
risposta
6
Questo può essere fatto con la doppia ricorsione, come follows:.
void insert_at_bottom(node **stack, int data)
{
if(isempty(*stack)){
push(stack,data);
return;
}
int temp=pop(stack);
insert_at_bottom(stack,data);
push(stack,temp);
}
void rev_stack(node **stack)
{
if(isempty(*stack)) return;
int temp = pop(stack);
rev_stack(stack);
insert_at_bottom(stack,temp);
}
3
È possibile farlo facilmente utilizzando la ricorsione. Quindi la dimensione massima consentita dello stack sarebbe vincolata alla massima profondità di ricorsione. Alcuni Codice:
public void reverse(Stack st) {
int m = (int)st.Pop();
if (st.Count != 1) {
reverse(st);
}
Push(st , m);
}
public void Push(Stack st , int a) {
int m = (int)st.Pop();
if (st.Count != 0) {
Push(st , a);
}
else {
st.Push(a);
st.Push(m);
}
}
Poiché lo stack stesso è una struttura dati, è possibile utilizzarlo? – corsiKa
Cosa puoi fare è popare tutti gli elementi dello stack corrente e inviarli a un altro. Non lo sono se questo ti andrebbe bene. – svs
Come viene implementato lo stack? Se è la tua implementazione con un elenco collegato, basta invertire la direzione dei puntatori. – chill