STL 關於棧和佇列的面試題

2021-08-13 11:43:05 字數 1934 閱讀 5304

題目分別為:

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...