2013-11-21 2 views
5

(여분의) 데이터 구조를 사용하지 않고 스택을 역전시킬 수 있습니까? 모든 제안이나 의사 코드가 도움이 될 수 있습니다. 나는 노력하고 있었고 가능한 해결책을 찾지 못했습니다. 여기의 문제는 스택의 크기도 아니다. 내가 뭔가를 창조 할 수 있었다는 것을 안다면, 미리 감사드립니다.데이터 구조를 사용하지 않고 역 스택

+0

스택 자체는 데이터 구조이므로 사용할 수 있습니까? – corsiKa

+3

현재 스택의 모든 요소를 ​​팝하여 다른 스택으로 밀어 넣을 수 있습니다. 나는 그것이 당신에게 어울리지 않을지라도. – svs

+1

스택은 어떻게 구현 되었습니까? 연결된 목록이있는 자체 구현의 경우 포인터 방향 만 바꿉니다. – chill

답변

6

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

재귀를 사용하면 쉽게 수행 할 수 있습니다. 그런 다음 최대 허용 스택 크기는 최대 재귀 수준으로 제한됩니다. 일부 코드 :

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); 
    } 
} 
관련 문제