[Powered by Google Translate] [队列]
[克里斯·格柏，哈佛大学]
这是CS50，CS50.TV]
一个有用的数据结构，用于存储元素的有序集合，是一个队列。
它是用来当需要被删除的元素
以相同的顺序，它们被添加。
这个概念被称为FIFO，这是一个缩写为先，先出。
为了帮助可视化，它可能是有用的图片
一个在商店的收银台。
随着人们到达时，他们等待在后面的行。
收银员然后轮流在前面的为客户提供服务，
然后退出行一次一个。
在计算机科学中，我们指的队列前面的头部
和尾部背面作为。
一个例子时，我们可能会在应用程序中使用此
类入学候补名单。
由于座位成为可用的方法，
在头的等候名单的人提供了机会，以参加在课堂上。
>> 队列可以使用任何集合
为了存储数据，如数组或链表。
随着集合来存储在队列中的项目，
我们还需要一种方法添加项目结束时的队列，
被称为入队
，另一个是删除一个项目从队列头部，
被称为出列。
它是非常有用的另一种方法返回当前的队列长度
还有一个方法来检查，如果队列是空的。
让我们来看看我们怎么可能在C实现一个队列的整数，
使用一个数组元素的集合。
首先，我们创建了一个结构称为队列来保存我们的变量。
我们将使用一个固定大小的索引0的整数数组
存储的元素。
我们还将包括一个变量称为头
存储索引的元素，是目前在队列中的头。
第三个变量，长度，将用于
跟踪在数组中的元素的数量。
作为一种选择，你可以考虑使用一个变量称为尾
指向最后一个字段的数组中的元素。
在我们写更多的代码，
让我们尝试一下我们的设计。
让我们从一个空数组的长度为0，
与头部设置为0。
现在，让我们排队4个值 - 6，2，3和1​​。
现在的长度将是4，
头将保持为0。
>> 如果我们取出一个值，会发生什么情况？
我们将降低至3的长度，
头部设置为1，
返回值6。
该代码可能会是这个样子。
在这里，我们出列的功能，
到队列 - q时 - 和一个指针的元素，需要一个指针
这是一个int类型的。
首先，我们检查，以确保它是大于0的队列长度，
，以确保有一个元素被出列。
然后，我们来看看数组中的元素，在该位置的头，
和设置的元素的值是在该位置上的值。
然后，我们改变了头，成为下一个索引
％的能力。
然后，我们减少队列长度由1。
最后，我们返回true，以指示出列是成功的。
如果我们再次出列，长度将成为2，
头也将成为2，
和返回值是2。
>> 如果我们的入队的另一个值，如7，会发生什么事？
正如我们在队列的末尾，
我们将需要包装和存储0的数组元素中的值。
数学上，这可以通过添加长度表示
头部的索引
以及执行使用队列容量模量。
这里说的是2 2，这是4％4，
它是0。
将这种想法的代码，我们有这个功能。
在这里，我们看到了排队功能，
这需要一个指针到队列 - q时 -
并采取被排队的元素，它是一个整数。
接下来，我们检查，以确保容量的队列
依然大于当前队列长度。
接下来，我们存储元素的数组中的元素
索引处由头+长度％的队列的能力来确定。
然后，我们增加队列长度为1，
然后返回true以指示排队功能是成功的。
>> 除了我们已经提到的两个函数，
有两个额外的功能。
首先是IsEmpty函数，
这需要一个指针到队列
并验证长度为0。
第二个是长度函​​数，
这也需要一个指针到队列
从结构并返回当前的长度。
这个简短的概述，展示了一种可能的实现的队列。
本实施方案的局限性之一
是队列有一个固定的最大大小。
如果我们尝试加入更多的元素比队列可以容纳的，
我们可能需要忽略的要求和删除元素，
或者，我们可能更愿意返回某种类型的错误。
使用一个链表，而不是一个数组
将使其更容易进行动态的队列的大小。
然而，由于我们不直接访问一个链表的元素，
如果我们不跟踪的尾巴，
我们将不得不扫描整个链表，每次去年底。
我们也可以考虑使用另一种数据类型的数组，
如结构，以创建更复杂的元素的队列中。
回想我们的例子中的一类候补名单，
这些结构可能代表个别学生。
>> 我的名字是克里斯·格柏，这是CS50。
[CS50.TV]
和回报 - >>更多的时间。
返回true，表示 - 的队列是成功的。
- ％的容​​量的队列 -
这将是在编辑的乐趣。 [笑]