C# 实现两个栈输出为安全的队列方式,需要实时push和pull ,保证队列正确性。。。。后续有时间补上多线程
两个栈形成一个队列
根据我们所知的知识,
栈:先进后出
队列:先进先出
实现一个队列很简单,只需要把数据按顺序从一个栈,输入到另一个栈再输出,就是一个队列
考虑到需要实时输入和输出,这样做是有问题的
https://blog.csdn.net/ly1196324806/article/details/107945439
比如这位的给出的问题的,但是代码不对,试试就知道出错了。
public class MyQueue
{
stack <int> input;//输入
stack <int> output;//输入
public void Push(int val)
{
input.push(val);
}
public int Pull()
{
if(output.empty())
{
while(!input.empty())
{
output.push(input.pop());
}
}
return output.pop();
}
}
//在Unity中测试
class MyProgram:Monobehive
{
MyQueue myQ=new MyQueue();//实例化自定义队列
void Updata()
{
if(Input.GetKeyDown(KeyCode.Q))
{
myQ.push(Input.GetNum());//Input.GetNum()自定义方法获取当前输入值
}
if(Input.GetKeyDown(KeyCode.W))
{
Debug.Log( myQ.pull());//通过Debug.Log输出
}
}
}
该方法可以实时push和pull ,不会出现多次push 载pull 出现顺序错乱
今天面试出了这个题目,感觉很简单,但是现场却没发现问题