了解队列/堆栈类的工作原理并找出此代码无法正常工作的原因

时间:2012-01-13 00:13:40

标签: c#

第一个foreach方法会出现几个错误。我无法弄清楚为什么它似乎应该有用......

foreach - 类,结构或接口成员声明中的无效标记'foreach'。

打印出1 2 3 4 1 2 3 4 1 2 3 4.

第二种foreach方法。这是如何运作的?我认为它只是按顺序迭代每个第一个。混淆来自于它是相同的代码,但堆栈而不是队列。第二个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");
        }
    }

}

3 个答案:

答案 0 :(得分:3)

代码需要在方法中..

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是第一件事,所以它将是最后一件事

就像,如果你排队在咖啡店服务,你必须排队等候直到轮到你排队的第一个人,这是第一个服务的人。

堆栈就像把书堆放在一起......你不能把第一件东西从堆栈中取出,直到你把所有的东西都堆在它上面。

答案 1 :(得分:0)

堆栈不遵循与队列相同的启发式方法。在队列中,首先出现的是第一个。在堆栈中,您正在查看FILO(先入,后出)。

这就是为什么你看到相反的情况,即4,3,2,1。

答案 2 :(得分:0)

嘛!在第二个循环中,您尝试打印集合中的所有元素。 1)在Queue的情况下,对象在添加时存储。所以你得到了与你的第一个循环(FIFO)相同的答案 2)如果是Stack,对象将以相反的顺序存储,因此当您从集合中弹出对象时,可以删除最后插入的对象。 (LIFO)

希望这有帮助。