스택 전환 및 스택 정렬
1. 문제 설명
(1) 귀속으로 창고를 뒤집는다.예를 들어 입력 창고 {1, 2, 3, 4, 5}, 1은 창고 꼭대기에 있습니다.뒤바뀐 창고는 {5,4,3,2,1}이고 5는 창고 꼭대기에 있습니다.
(2) 창고를 귀속 방법으로 정렬한다.
2. 솔루션
이 두 가지 문제는 주로 지원자의 귀속에 대한 이해를 고찰하는 것이다.귀속 프로그램에는 두 가지 관건적인 요소가 있는데 그것이 바로 귀속 정의와 귀속 중지 조건이다.
(1) 질문 1
분석을 거친 후 이 문제의 귀속 정의와 귀속 종지 조건을 쉽게 얻을 수 있다.귀속 정의: 현재 창고의 맨 아래 요소를 창고 꼭대기로 옮기고 다른 요소를 한 계단 아래로 옮긴 다음 이 창고 꼭대기 요소를 포함하지 않는 하위 창고를 계속합니다.종지 조건: 창고가 비어 있을 때까지 귀속합니다.코드는 다음과 같습니다.
//
void move_bottom_to_top(stack& s) {
if(s.empty()) return;
int top1 = s.top();
s.pop();
if(!s.empty()) {
move_bottom_to_top(s);
int top2 = s.top();
s.pop();
s.push(top1);//
s.push(top2);
return;
}
s.push(top1);
}
//
void reverse_stack(stack& s) {
if(s.empty()) return;
move_bottom_to_top(s);//
int top = s.top();
s.pop();
reverse_stack(s);//
s.push(top);
}
(2) 문제2
창고 정렬과 창고 뒤집기 사상은 기본적으로 일치하기 때문에 위의 코드를 조금만 수정하면 창고 위치 정렬 코드를 얻을 수 있다.
void move_min_to_top(stack& s) {
if(s.empty()) return;
int top1 = s.top();
s.pop();
if(!s.empty()) {
move_min_to_top(s);
int top2 = s.top();
if(top1 > top2) {
s.pop();
s.push(top1);
s.push(top2);
return;
}
}
s.push(top1);
}
void sort_stack(stack& s) {
if(s.empty()) return;
move_min_to_top(s);
int top = s.top();
s.pop();
sort_stack(s);
s.push(top);
}
새 책'프로그래머 면접 필기시험 보전'홈페이지에 전재하다
본문 링크 주소: 창고 전환과 창고 정렬
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.