汉罗塔非递归
2016-06-23 12:56
316 查看
/*汉诺塔递归和非递归算法实现*/ #include <iostream> using namespace std; typedef struct Tower{ int height; char a,b,c; }Tower; typedef struct Node{ Tower element; Node* pNext; }Node,*LinkList; typedef struct { LinkList Top; }Stack; void InitStack(Stack& stack) { stack.Top=(LinkList)malloc(sizeof(Node)); stack.Top->pNext=NULL; } void DestroyStack(Stack& stack) { free(stack.Top); stack.Top=NULL; } void Push(Stack& stack,int height,char a,char b,char c) { LinkList temp=(LinkList)malloc(sizeof(Node)); temp->element.height=height; temp->element.a=a; temp->element.b=b; temp->element.c=c; temp->pNext=stack.Top->pNext; stack.Top->pNext=temp; } Tower Pop(Stack& stack) { LinkList temp=stack.Top->pNext; stack.Top->pNext=temp->pNext; Tower element=temp->element; free(temp); return element; } int EmptyStack(Stack stack) { if (stack.Top->pNext==NULL) { return 1; } else { return 0; } } void main() { Stack stack; InitStack(stack); Push(stack,10,'A','B','C'); while (!EmptyStack(stack)) { Tower temp=Pop(stack); if (temp.height==1) { cout<<temp.a<<"-->"<<temp.c<<endl; } else { Push(stack,temp.height-1,temp.b,temp.a,temp.c); Push(stack,1,temp.a,temp.b,temp.c); Push(stack,temp.height-1,temp.a,temp.c,temp.b); } } DestroyStack(stack); }
相关文章推荐
- 《代码大全》读后感3
- jdk, scala, maven, gradle, ant install shell bash, and Dockerfile for Ubuntu:14:04
- Linux系统安全配置的一些规则(整理) 图
- 动手实践 Linux VLAN - 每天5分钟玩转 OpenStack(13)
- Android签名
- 三星上传问题解答(特别是2014年7月1日后新注册的开发者)
- 11 在C#中写文件
- 5、xen虚拟机扩展磁盘空间再一法
- android倒计时功能的实现(CountDownTimer)
- 团队绩效评估计划
- 《代码大全》读后感2
- 正则表达式
- iOS9中的网络问题
- Mysql函数INSTR、LOCATE、POSITION VS LIKE
- 本地存储 之 NSUserDefaults 及NSUserDefaults对存储对象的封装
- Chrome扩展开发学习笔记之扩展基础
- 快速简单理解i2c标准协议
- 如何让应用程序在开机后自动启动?
- Nexpose 注册和安装攻略
- 《代码大全》读后感1