2013-11-21 5 views
5

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

+0

Poiché lo stack stesso è una struttura dati, è possibile utilizzarlo? – corsiKa

+3

Cosa puoi fare è popare tutti gli elementi dello stack corrente e inviarli a un altro. Non lo sono se questo ti andrebbe bene. – svs

+1

Come viene implementato lo stack? Se è la tua implementazione con un elenco collegato, basta invertire la direzione dei puntatori. – chill

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); 
    } 
}