了解队列/堆栈类是如何工作的,并弄清楚为什么这段代码是';t工作
本文关键字:工作 段代码 为什么 代码 弄清楚 堆栈 队列 何工作 了解 | 更新日期: 2023-09-27 18:20:14
第一个foreach方法得到几个错误。我不明白为什么,似乎它应该起作用。。。
foreach-类、结构或接口成员声明中的标记"foreach"无效。
这会打印出1 2 3 4 1 2 3 3 4 1 3 4。
第二种foreach方法。这是怎么回事?我认为它只是按照顺序一次迭代一个数字。混淆的地方在于它是相同的代码,但堆栈而不是队列。第二个前臂打印出4 3 2 1。为什么会这样?
namespace Cards
{
class Class1
{
Queue numbers = new Queue();
foreach (int number in new int[4]{1,2,3,4})
{
numbers.Enqueue(number);
Console.WriteLine(number + " has joined the queue");
}
foreach (int number in numbers)
{
Console.WriteLine(number);
}
while(numbers.Count > 0)
{
int number = (int)numbers.Dequeue();
Console.WriteLine(number + " has left the queue");
}
}
}
代码需要在方法中。。
class Class1
{
public void DoQstuff()
{
Queue numbers = new Queue();
foreach (int number in new int[4]{1,2,3,4})
{
numbers.Enqueue(number);
Console.WriteLine(number + " has joined the queue");
}
foreach (int number in numbers)
{
Console.WriteLine(number);
}
while(numbers.Count > 0)
{
int number = (int)numbers.Dequeue();
Console.WriteLine(number + " has left the queue");
}
}
}
如果你运行,整个事情就会像预期的那样工作
排队工作,先进先出。。。。。所以1是第一个进入,所以它的第一个退出
堆叠工作,先入后出,所以1是第一个进入的东西,所以它将是最后一个离开的东西
比如,如果你在咖啡店排队等候服务,你必须排队等候,直到轮到你,排队的第一个人,就是第一个被服务的人。
堆叠就像把书叠在一起。。。。你不能从堆栈中取出第一个东西,除非你把它上面的所有东西都拆了。
堆栈不遵循与队列相同的启发式方法。在一个队列中,什么先进入,什么也先出来。在堆栈中,您看到的是FILO(先进先出)。
这就是为什么你会看到相反的情况发生,即4,3,2,1。
好吧!在第二个循环中,您将尝试打印集合中的所有元素。1) 在"队列"的情况下,对象在添加时存储。所以你会得到与第一个循环(FIFO)相同的答案2) 在Stack的情况下,对象将以相反的顺序存储,因此当您从集合中弹出对象时,您可以删除最后插入的对象。(LIFO)
希望这能有所帮助。