면접 문제 7:두 개의 스 택 으로 대기 열 을 실현 합 니 다.
10410 단어 면접 문제
사고방식:제목 은 우리 가 두 개의'선진 후 출'창 고 를 이용 하여'선진 선 출'의 대열 을 실현 하도록 요구한다.
삽입 할 때 삽 입 된 요 소 를 stack 1 에 넣 습 니 다.현재 stack 1 에 몇 가지 요 소 를 삽입 했다 고 가정 하면,
삭제 작업 을 진행 하려 고 합 니 다.분명히 현재 스 택 꼭대기 의 요 소 는 나중에 삽입 한 것 이 고 스 택 밑 의 요소 가 있어 야 합 니 다.
삭 제 됩 니 다.stack 1 에 서 는 스 택 기본 요 소 를 직접 삭제 할 수 없습니다.이 럴 때 는 stack 2 를 빌려 야 합 니 다.
stack 2 를 조작 하지 않 았 습 니 다.stack 2 는 비어 있 습 니 다.stack 1 의 요 소 를 스 택 에서 하나씩 나 와 stack 2 에 누 르 고,
그러면 stack 2 의 스 택 상단 요 소 는 삭제 할 요소 입 니 다.그 다음 에 요 소 를 삽입 하려 면 stack 1 에 눌 러 주세요.
요 소 를 삭제 하려 면 stack 2 스 택 상단 요 소 를 삭제 합 니 다.stack 2 가 비어 있 으 면 stack 1 의 모든 요 소 를 삭제 합 니 다.
스 택 을 하나씩 나 와 stack 2 에 누 르 고 삭 제 를 완료 합 니 다.stack 1 과 stack 2 가 모두 비어 있 으 면 삭제 작업 을 완료 할 수 없습니다.
주의:
1.본 문 제 는 템 플 릿 으로 쓰 는 것 이 좋 고 더욱 통용 된다.
2.대기 열 이 비어 있 는 지 아 닌 지 를 판단 하 는 함 수 를 쓸 수 있 습 니 다.
code:
1 #include <iostream>
2 #include <stack>
3 #include <string>
4 using namespace std;
5
6 template<typename T> class CQueue
7 {
8 public:
9 CQueue(void);
10 ~CQueue(void);
11
12 void appendTail(const T& node);
13 T deleteHead();
14 bool empty();
15 private:
16 stack<T> stack1;
17 stack<T> stack2;
18 };
19
20 //
21 template<typename T> CQueue<T>::CQueue(void)
22 {
23 ;
24 }
25
26 //
27 template<typename T> CQueue<T>::~CQueue(void)
28 {
29 ;
30 }
31
32 template<typename T> void CQueue<T>::appendTail(const T& element)
33 {
34 stack1.push(element);
35 }
36
37 template<typename T> T CQueue<T>::deleteHead()
38 {
39 if (stack2.size() <= 0)
40 {
41 while (stack1.size() > 0)
42 {
43 T& data = stack1.top();
44 stack1.pop();
45 stack2.push(data);
46 }
47 }
48
49 T head = stack2.top();
50 stack2.pop();
51 return head;
52 }
53
54 template<typename T> bool CQueue<T>::empty()
55 {
56 if (stack1.size() + stack2.size() <= 0) return true;
57 return false;
58 }
59
60
61 int main()
62 {
63 int n;
64 while (cin >> n)
65 {
66 CQueue<int> myQuence;
67 for (int i = 0; i < n; ++i)
68 {
69 string myStr;
70 cin >> myStr;
71 if (myStr == "PUSH")
72 {
73 int k;
74 cin >> k;
75 myQuence.appendTail(k);
76 }
77 else
78 {
79 if (myQuence.empty()) cout << -1 << endl;
80 else cout << myQuence.deleteHead() << endl;
81 }
82 }
83 }
84 return 0;
85 }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 프로그래머 면접에서의 다중 스레드 문제 요약wait ()/notify ()/notify All () 의 모든 방법을 호출할 때, 현재 라인이 이 대상의 자물쇠를 얻지 못하면, Illegal MonitorState Exception의 이상을 던집니다. Thre...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.