他作为一个理科生是严谨的,他认为天才与否,取决于最终达到的高度。一些事情不过比别人早几年做到,算不上什么天才。
---楼天成
栈(stack)
它的结构为LIFO(last in first out)后进先出。如图所示:
汉诺塔:
汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
思考一下解法:
假设有n个圆盘在x柱上,y,z柱都为空,需要将x的圆盘都按照原来的大小顺序移到z上。
那么首先要借助Z,将X上的n-1个圆盘移到Y,再将第n个圆盘移到Z。
然后借助X,将Y上的n-1个圆盘移到X,将第n个圆盘移到Z。
如此下去。
C代码:
以3个圆盘为例子:
#include<stdio.h>
int i=0;
void Hanoi(int n,char x,char y,char z)
{
if(n==1)
{
printf("%c ------> %c\n",x,z);
i++;
return;
}
Hanoi(n-1,x,z,y);
printf("%c ------> %c\n",x,z);
i++;
Hanoi(n-1,y,x,z);
}
int main()
{
Hanoi(3,'x','y','z');
printf("总共移动%d步",i);
getchar();
}
分享一下数据结构的资源:
《大话数据结构》及其全部代码实现:链接:http://pan.baidu.com/s/1eRJuBjO 密码:xswx