어떻게 스 택 으로 대기 열 기능 을 실현 하고 어떻게 대기 열 로 스 택 기능 을 실현 합 니까?
22186 단어 알고리즘
우선, 우 리 는 창고 와 대열 이 무엇 인지 명확 하 게 해 야 한다.스 택 은 특수 한 선형 표 로 선형 표 의 한 끝 에서 만 조작 할 수 있 고 스 택 지붕 은 조작 을 허용 하 며 스 택 바닥 은 조작 을 허용 하지 않 습 니 다.창고 의 특성: 후진 선 출.대열 은 선진 적 으로 먼저 나 온 선형 표 이다.이것 은 표 의 전단 (front) 에서 만 삭제 작업 을 할 수 있 고 표 의 백 엔 드 (rear) 에서 만 삽입 작업 을 할 수 있 습 니 다.삽입 작업 을 하 는 끝 을 팀 꼬리 라 고 하고 삭제 작업 을 하 는 끝 을 팀 머리 라 고 합 니 다.
글 목록
스 택 은 대기 열의 기본 적 인 사 고 를 실현 합 니 다. 두 개의 스 택 을 구성 합 니 다. 그 중 하 나 는 저 장 된 데 이 터 를 저장 하고 다른 하 나 는 그 중의 데 이 터 를 거꾸로 놓 아 출력 을 실현 합 니 다.
public static class twoStacksQueue {
private Stack<Integer> stackPop;
private Stack<Integer> stackPush;
public twoStacksQueue() {
stackPop = new Stack<>();
stackPush = new Stack<>();
}
public void add(int pushInt) {
stackPush.push(pushInt);
}
public int poll() {
if (stackPop.empty() && stackPush.empty()) {
throw new RuntimeException("Queue is empty!");
} else if (stackPop.empty()) {
while (!stackPush.isEmpty()) {
stackPop.push(stackPush.pop());
}
}
return stackPop.pop();
}
public int peek() {
if (stackPop.isEmpty() && stackPush.isEmpty()) {
throw new RuntimeException("Queue is empty!");
} else if (stackPop.empty()) {
while (!stackPush.isEmpty()) {
stackPop.push(stackPush.pop());
}
}
return stackPop.peek();
}
}
대기 열 구현 스 택
대기 열 은 스 택 의 기본 적 인 사 고 를 실현 합 니 다. 두 개의 대기 열 을 구성 합 니 다. 그 중 하 나 는 입력 한 데 이 터 를 저장 하고 출력 할 때 마지막 데 이 터 를 제외 한 다른 데 이 터 를 모두 다른 대기 열 로 이동 시 킨 다음 이 대기 열 을 입력 저장 하 는 데 사용 합 니 다.
public static class twoQueueStack {
private Queue<Integer> queue;
private Queue<Integer> help;
public void swap() {
Queue<Integer> temp = new LinkedList<>();
temp = queue;
queue = help;
help = temp;
}
public twoQueueStack() {
queue = new LinkedList<>();
help = new LinkedList<>();
}
public void push(int pushInt) {
queue.add(pushInt);
}
public int peek() {
if (queue.isEmpty()) {
throw new RuntimeException("Stack is empty!");
}
while (queue.size() != 1) {
help.add(queue.poll());
}
int res = queue.poll();
help.add(res);
swap();
return res;
}
public int pop() {
if (queue.isEmpty()) {
throw new RuntimeException("Stack is empty!");
}
while (queue.size() != 1) {
help.add(queue.poll());
}
int res = queue.poll();
swap();
return res;
}
}
테스트 코드
public static void main(String[] args) {
twoStacksQueue myQueue = new twoStacksQueue();
myQueue.add(1);
myQueue.add(2);
myQueue.add(3);
myQueue.add(4);
while (myQueue.peek() != 4) {
System.out.println(myQueue.poll());
}
System.out.println(myQueue.peek());
twoQueueStack myStack = new twoQueueStack();
myStack.push(1);
myStack.push(2);
myStack.push(3);
myStack.push(4);
while (myStack.peek() != 1) {
System.out.println(myStack.pop());
}
System.out.println(myStack.peek());
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Codility Lesson3】FrogJmpA small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.