Hanoi塔问题 栈与递归C语言编程实现
来源:互联网 发布:关于人工智能的股票 编辑:程序博客网 时间:2024/05/16 06:28
Hanoi塔 栈与递归C编程实现
参考书 严蔚敏 数据结构
#include <stdio.h>#include <stdlib.h>#include <conio.h>typedef int ElemType;typedef int Status;#define STACK_SIZE 10#define STACK_INCREMENT 10#define OK 1#define ERROR -1typedef struct{ElemType *base;ElemType *top;int stacksize;char tag;}Stack;Status InitStack(Stack &S,char tag){S.base=(ElemType*)malloc(STACK_SIZE*sizeof(ElemType));if (!S.base)return ERROR;S.top=S.base;S.tag=tag;S.stacksize=STACK_SIZE;return OK;}Status Pop(Stack &S,ElemType &e){if (S.base==S.top)//判断是否非空return ERROR;S.top--;//栈顶元素降低e=*S.top;//输出return OK;}Status Push(Stack &S,ElemType e){if ((S.top-S.base)>=S.stacksize)//栈满追加数据元素{S.base=(ElemType *)realloc(S.base,(S.stacksize+STACK_INCREMENT)*sizeof(ElemType));//指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。//新的大小一定要大于原来的大小不然的话会导致数据丢失!if (!S.base)exit(ERROR);S.top=S.base+S.stacksize;S.stacksize+=STACK_INCREMENT;}*S.top=e;S.top++;return OK;}Status StackEmpty(Stack &S){if (S.base==S.top)return 1;elsereturn 0;}int c=0;//全局变量记录搬运次数void Move(Stack &x,ElemType n,Stack &z){Pop(x,n);Push(z,n);}void hanoi(ElemType n,Stack &x,Stack &y,Stack &z){printf("%d:Move disk %d from %c to %c\n",++c,n,x.tag,z.tag);if (n==1)Move(x,1,z);else{hanoi(n-1,x,z,y);//将x上编号为1至n-1的圆盘移到y,z作为补助塔Move(x,n,z);//将编号为n的圆盘从x移到zhanoi(n-1,y,x,z);//将y上编号为1至n-1的圆盘移到z,x作为补助塔}}void main(){int n;Stack x,y,z;char tagx='x';//给栈打标签char tagy='y';//给栈打标签char tagz='z';//给栈打标签ElemType e;InitStack(x,tagx);InitStack(y,tagy);InitStack(z,tagz);printf("请输入Hanoi塔的高度\n");scanf("%d",&n);hanoi(n,x,y,z);printf("搬运结束,输入罗汉塔Z:\n");while(!StackEmpty(z)){Pop(z,e);printf("%d\n",e);}getch();}
输入塔高3
输出
请输入Hanoi塔的高度
3
1:Move disk 3 from x to z
2:Move disk 2 from x to y
3:Move disk 1 from x to z
4:Move disk 1 from z to y
5:Move disk 2 from y to z
6:Move disk 1 from y to x
7:Move disk 1 from x to z
搬运结束,输入罗汉塔Z:
1
2
3
- Hanoi塔问题 栈与递归C语言编程实现
- 栈与递归实现Hanoi塔问题
- 栈与递归的实现(Hanoi塔问题等等)
- hanoi塔的c语言函数递归实现
- 递归算法——Hanoi(汉诺)问题(Java实现&C语言实现)
- n阶Hanoi塔问题 递归实现
- 数据结构:栈与递归(Hanoi塔问题)
- 递归-Hanoi塔问题
- 递归---Hanoi塔问题
- 学习C/C++语言:递归求解hanoi汉诺塔问题
- Hanoi塔递归实现
- (原创)Hanoi塔问题的递归方法与非递归方法(java实现)
- c语言实现Hanoi塔移动步骤
- hanoi塔基于栈的递归实现
- Hanoi(汉诺)塔问题(C实现)
- 汉诺塔(hanoi) C语言实现
- 递归实现汉诺(Hanoi)塔---C语言版
- 算法-Hanoi塔问题+递归
- HttpURLConnection用法详解
- alchemy lua 配置
- linux边学边记---Shell脚本的追踪与debug
- Linux内核部件分析<8> 设备驱动模型之bus
- XPages Extension Library Deployment in Domino 8.5.3 and IBM XWork Serve
- Hanoi塔问题 栈与递归C语言编程实现
- Linux内核部件分析<9> 设备驱动模型之device-driver
- MyEclipse 7.0 + PHPEclipse下调试环境搭建(xDebug)
- 数理逻辑:谓词演算(8)演绎定理
- linux边学边记---判断语句if、case、while、for
- 《HP大中华区总裁孙振耀退休感言》
- 程序员这口饭-职业规划解决方案
- Java 控制台 IO
- android 开发环境搭建