能详细地介绍栈吗?

来源:百度知道 编辑:UC知道 时间:2024/05/05 19:53:59
能给我介绍一下栈吗?顺便解一解下题:
如下图,有一个无穷大的的栈S,在栈的右边排列着1,2,3,4,5共五个车厢。其中每个车厢可以向左行走,也可以进入栈S让后面的车厢通过。现已知第一个到达出口的是3号车厢,请写出所有可能的到达出口的车厢排列总数(不必给出每种排列)。
出口← ← 1 2 3 4 5
S↓

解题程序如下:

#include <stdio.h>
#include <stdlib.h>

int path[8];

int search(int level, int stack, int remain, int last_in_stack)
{
int total = 0;
if (remain == 0 && stack == 0)
{
for (int i = 0; i < level; i++)
{
printf("%d ", path[i]);
}
printf("\n");
return 1;
}
if (remain > 0)
{
path[level] = 1;
total += search(level + 1, stack, remain - 1, 0);
path[level] = 2;
total += search(level + 1, stack + 1, remain - 1, 1);
}
if (stack > 0 && !last_in_stack)
{
path[level] = 3;
total += search(level + 1, stack - 1, remain, 0);