了解队列/堆栈类是如何工作的,并弄清楚为什么这段代码是';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");
        }
    }
}

了解队列/堆栈类是如何工作的,并弄清楚为什么这段代码是';t工作

代码需要在方法中。。

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)

希望这能有所帮助。