2017-12-13 25 views
0

인터뷰에서 단일 스택을 사용하여 큐를 구현하라는 요청을 받았지만이를 수행 할 수있었습니다. 그러나 yield를 사용하여 동일한 결과를 얻을 수 있는지 궁금합니다. ?C에서 단일 스택을 사용하여 큐를 구현하기 위해 yield를 사용할 수 있습니까?

+1

수율은 알고리즘 개념이 아닌 구문 설탕입니다 (열거 형을 사용하지 않고 수율을 사용하여 항상 다시 작성할 수 있습니다). 당신이 그 문제를 어떻게 해결했는지에 대한 아이디어를 주면 도움이 될 것입니다. 나는 같은 크기의 두 번째 메모리 구조없이 스택을 반전시키는 방법을 빨리 생각할 수 없다. – PMF

+0

추가 : 여기에 여러 가지 답변이 있습니다 (예 : https://stackoverflow.com/questions/69192/how-to-implement-a-queueusing-two-stacks?rq=1). 두 개의 스택을 사용하여 큐를 구현하는 방법, 단 하나만 사용하는 방법? – PMF

+1

@PMF 일반적으로이 질문을하는 사람들은 재귀를 사용하기를 기다립니다. 물론 당신은 여전히 ​​스택 콜 스택과 같은 크기를 가진 두번째 메모리 구조에있는 pop 된 아이템을 저장한다. – Evk

답변

0

위의 설명에 따르면, 아니오라고 말합니다. 단일 스택을 사용할 수 없습니다.

OP가 언급 했으므로, 그는 스택을 역으로하기 위해 재귀를 사용했습니다 (맨 아래를 가져옵니다). 따라서 이것은 두 개의 스택을 사용하여 큐를 구현하도록 요청하는 질문에서 솔루션으로 제공되는 것과 기본적으로 동일합니다. 런타임 스택이 두 번째 스택으로 사용되기 때문에 How to implement a queue using two stacks?입니다.

반복을 대신 사용하여 반복적 인 방법 (이론적 컴퓨터 과학에 대한 책 참조)은 항상 재 작성할 수 있지만, 이는 동일한 작업의 다른 데이터 구조가 필요하기 때문에이 작업의 솔루션에서는 금지됩니다 데이터를 보관할 크기. 수율을 사용하려면 반복을 사용해야합니다.

+0

이것은 궁핍 한 quiestion이기 때문에, 항상 내부적으로 1 개의 값을 가진'IEnumerable'을 반환 할 수 있으며'yield returns something '을 한 번만하면됩니다. 그리고 재귀 적으로 이것을 호출합니다. – Evk

+0

그냥 흥미로운 측면 노트, 뭔가 재귀해야 Ackerman의 기능을 확인하십시오. – Dave

+0

같은 질문을하는 경우이 상황에서 어떻게해야합니까? 런타임에 새 스택을 생성한다는 점을 알았지 만 만족스런 대답을 제공해야합니다. 그렇지 않으면 일자리를 얻을 기회가 느슨 할 것이므로 조언 해주십시오. –