어떻게 스 택 으로 대기 열 기능 을 실현 하고 어떻게 대기 열 로 스 택 기능 을 실현 합 니까?

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

    좋은 웹페이지 즐겨찾기