数据结构C语言实现之hanoi塔问题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
y
move(Sx, n, Sz);
//将编号为 n 的圆盘从 x 移到 z
Hanoi(n-1, Sy, Sx, Sz); //将 y 上编号为 1 至 n-1 的圆盘利用 x 移到z} Nhomakorabea}
void main() {
SNode *Sx, *Sy, *Sz; int i = 0, n = 0; char ck = 0;
//将 x 上的圆盘编号
i++;
}
Hanoi(n, &Sx, &Sy, &Sz);
printf("\n 从 X 移到 Z 的结果是:\n");
Print(&Sz);
}
m = Pop(S1); Push(S2, m); }
void Hanoi(int n, SNode **Sx, SNode **Sy, SNode **Sz)
{
if (n == 1)
move(Sx, 1 , Sz);
//将编号为 1 的圆盘由 x 移到 z
else
{
Hanoi(n-1, Sx, Sz, Sy); //将 x 上编号为 1 到 n-1 的圆盘利用 z 移到
int data; struct Stack *next; }SNode;
void InitStack(SNode **S) {
*S = (SNode *) malloc (sizeof(SNode)); (*S)->next = NULL; //先建立一个带头结点 }
void Push(SNode **S, int ck)
void Print(SNode **S) {
SNode *p; p = (*S)->next; while(p) {
printf("\t%d\t", p->data); p = p->next; } printf("\n"); }
void move(SNode **S1, int m, SNode **S2) {
{
SNode *p;
p = (SNode *) malloc (sizeof(SNode)); //生成新结点
p->data = ck;
//获 取 元 素 值
p->next = (*S)->next; (*S)->next = p; //插入链表
}
int Pop(SNode **S) {
SNode *p; p = (*S)->next; if (!p) return -1; //空 (*S)->next = p->next; return p->data; }
数据结构 C 语言实现之 hanoi 塔问题
实际上是个递归问题。 /* 栈的应用与递归的实现--将塔座 x 上按直径由小到大且自上而下编号为 1 至 n 的 n 个圆盘依 靠 y 按规则搬到 z 上 */
#include <stdio.h> #include <stdlib.h>
typedef struct Stack {
Sz = NULL;
Sx = NULL; Sy =NULL;
printf("共移动 n 个箱子:"); // n<=24 ???
scanf("%d", &n);
InitStack(&Sx);
InitStack(&Sy);
InitStack(&Sz);
while(i<n)
{
Push(&Sx,n-i);