題目分別為:
1.實現乙個棧,要求實現push(出棧)、pop(入棧)、min(返回最小值的操作)的時間複雜度為o(1)。
2.使用兩個棧實現乙個佇列。
3.使用兩個佇列實現乙個棧。
4.判斷元素出棧、入棧順序的合法性。如:入棧的序列(1, 2, 3, 4, 5),出棧序列為(4, 5, 3, 2, 1)是合法序列,入棧的序列(1, 2, 3, 4, 5),出棧序列為(1, 5, 3, 2, 4)是不合法序列。
5.乙個陣列實現兩個棧。
template
class minstack
}void pop()
s1.pop();
}t& min()
}protected:
stack
s1;stack
s2;};
2.使用兩個棧實現乙個佇列。
template
class queue
else
s1.push(x);}}
void pop()
}t tmp = s2.top();
s2.pop();
}protected:
stack
s1;stack
s2;};
3.使用兩個佇列實現乙個棧。
template
class stack
else
q1.push(x);}}
void pop()
q1.pop();
}protected:
queue
q1;queue
q2;};
4.判斷元素出棧、入棧順序的合法性。如:入棧的序列(1, 2, 3, 4, 5),出棧序列為(4, 5, 3, 2, 1)是合法序列,入棧的序列(1, 2, 3, 4, 5),出棧序列為(1, 5, 3, 2, 4)是不合法序列。
class legalstack
void pop()
while (!s1.empty())
}void changesort(size_t num = 0)}}
protected:
stack
s1;
stack
s2;
};
5.乙個陣列實現兩個棧。
template
class doublestack
void checkcapacity()
if (_top1 == _top2)
for (size_t i = capacity - 1, j = _capacity - 1; i > _top2; i--, j--)//把右邊的挪下去
delete _a;
_a = tmp;
_top2 += _capacity/2;}}
void push1(const t& x)
void push2(const t& x)
void pop1()
void pop2()
size_t size1()
size_t size2()
t& top1()
t& top2()
void print()
cout
<< endl;
cout
<< "stack2 is: ";
for (size_t i = _capacity-1; i > _top2; i--)
cout
<< endl;
}protected:
t* _a;
size_t _top1;
size_t _top2;
size_t _capacity;
};
關於棧和佇列的面試題
1.實現乙個棧,要求實現push,pop min 返回最小值 的時間複雜度為o 1 方法一 解題思路 首先我們在之前封裝的棧結構外面再封裝一層,將其封裝為乙個最小棧,與之前不同的是,我們在棧中存放的是乙個結構體,這個結構體中有兩個成員,乙個是資料本身的值,另乙個為棧內所有存放元素中的最小值,這樣即可...
關於佇列和棧的幾道面試題
1 實現乙個棧,要求實現push 入棧 pop 出棧 min 返回最小值的操作 的時間複雜度為o 1 第一道題,我們需要分析,我想一般的思維肯定是想到,開闢一塊空間,進行儲存最小值,這種方法也是大家通常地一下就可以想到的。但是在這裡會有乙個問題,就是如果你的最小值在棧頂,當你pop了棧頂以後,下面的...
棧和佇列面試題
遞迴反轉乙個棧 void reverse stack s reverse s int tmp2 s.top s.pop reverse s s.push tmp1 reverse s s.push tmp2 遞迴排序乙個棧 void sort stack s sort s int tmp2 s.to...