汉罗塔非递归

来源:互联网 发布:bbc 纪录片 萌 知乎 编辑:程序博客网 时间:2024/05/29 13:50
/*汉诺塔递归和非递归算法实现*/#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);}

0 0