Вы были в кафетерии, верно? и видел стопку тарелок? Когда чистая тарелка добавляется в стопку, она ставится сверху. Когда пластина удалена, это удалено от вершины. Так что это называется «первым пришел-первым вышел» (LIFO). Компьютерный стек подобен этому, за исключением того, что он содержит числа, и вы можете сделать их из массива или списка, если хотите. (Если под стопкой тарелок есть пружина, они говорят, что вы «толкаете» одну сверху, а когда вы удаляете одну, вы «высовываете» ее. Вот откуда эти слова.)
В кафетерии зайдите обратно, где они моют посуду. У них есть конвейерная лента, куда они кладут тарелки для мытья с одного конца, а они выходят с другого конца в том же порядке. Это очередь или «первым пришел - первым обслужен» (FIFO). Вы также можете сделать один из них из массива или списка, если хотите.
Для чего они хороши? Хорошо, предположим, у вас есть древовидная структура данных (которая похожа на настоящее дерево из дерева, за исключением того, что она перевернута вверх ногами), и вы хотите написать программу, которая будет полностью проходить через нее, чтобы распечатать все листья.
Один из способов - пройти в глубину . Вы начинаете с ствола и идете к первой ветви, а затем идете к первой ветви этой ветви и так далее, пока не доберетесь до листа и распечатаете его. Но как вы можете вернуться к следующей ветке? Что ж, каждый раз, когда вы переходите по ветке, вы «выталкиваете» некоторую информацию из своего стека, а когда вы делаете резервную копию, вы «выталкиваете» ее обратно, и это говорит вам, какую ветку выбрать следующей. Вот как вы отслеживаете, какую ветку делать дальше в каждой точке.
Другой способ - это прогулка в ширину . Начиная со ствола, вы нумеруете все ветви со ствола и помещаете эти числа в очередь. Затем вы берете число с другого конца, переходите к этой ветви, и для каждой ветви, выходящей из it , вы снова нумеруете их (последовательно с первым) и помещаете их в очередь. Продолжая это делать, вы сначала посетите ветки, которые находятся на расстоянии 1 ветки от ствола. Затем вы собираетесь посетить все ветви, которые находятся на расстоянии 2 веток от ствола, и так далее. В конце концов вы доберетесь до листьев и сможете распечатать их.
Это две очень основные концепции в программировании.