我们了解了STL中的队列与栈的数据结构,那么有没有想过使用队列实现STL中的栈这种数据结构呢?或者使用栈实现STL的队列的数据结构呢?
下面将讲解一下方法。
用队列实现栈:
通过STL的队列方法使用队列实现栈:
写一个队列结构体用栈的方法
struct Que
{
stack<int> S, Q;
int back()
{
if (!S.empty())
{
return S.top();
}
else
{
if (Q.empty())
{
return 0;
}
while (!Q.empty())
{
S.push(Q.top());
Q.pop();
}
return S.top();
}
}
void pop()
{
if (!Q.empty())
{
Q.pop();
}
else
{
if (S.empty())
{
;
}
else
{
while (!S.empty())
{
Q.push(S.top());
S.pop();
}
Q.pop();
}
}
}
int front()
{
if (!Q.empty())
{
return Q.top();
}
else
{
if (S.empty())
{
return 0;
}
while (!S.empty())
{
Q.push(S.top());
S.pop();
}
return Q.top();
}
}
bool empty()
{
if (Q.empty() && S.empty())
{
return true;
}
else
{
return false;
}
}
int size()
{
if (this->empty())
{
return 0;
}
else
{
int Sum = 0;
if (Q.empty())
{
while (!S.empty())
{
++Sum;
Q.push(S.top());
S.pop();
}
return Sum;
}
else
{
while (!Q.empty())
{
S.push(S.top());
Q.pop();
}
return Sum;
}
}
}
void push(int val)
{
if (S.empty())
{
while (!Q.empty())
{
S.push(S.top());
Q.pop();
}
S.push(val);
}
else
{
S.push(val);
}
}
};
:具体的push,empty,pop都在STL标准模板库,这里不多赘述。
用栈实现队列:
和队列实现栈方法差不多,大家可以参考STL模板库
代码如下:
struct STACK
{
queue<int> Q, S;
int size=0;
bool empty()
{
return S.empty();
}
void pop()
{
S.pop();
--size;
}
void push(int val)
{
Q.push(val);
while (!S.empty())
{
Q.push(S.front());
S.pop();
}
S = Q;
while (!Q.empty())
{
Q.pop();
}
++size;
}
int Size()
{
return size;
}
int top()
{
return S.front();
}
};
大家引用的时候只需实例化相关结构体即可。
用栈实现队列还有一种方法:
请参考以下博文:
LINK:转到此博文
(转载自CSDN博主:派大阿星。主页地址:https://me.csdn.net/qq_42348284)(https://blog.csdn.net/qq_42348284/article/details/107953091?utm_source=app)