汉罗塔非递归_汉诺塔递归原理

汉罗塔非递归_汉诺塔递归原理/*汉诺塔递归和非递归算法实现*/#includeusingnamespacestd;typedefstructTower{intheight;chara,b,c;}Tower;typedefstructNode{Towerelement;Node*pNext;}Node,*LinkList;typedefstruct

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

/*汉诺塔递归和非递归算法实现*/
#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);
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182941.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java volatile详解

    java volatile详解本篇来自java并发编程实战关于volatile的总结。要说volatile,先得明白内存可见性。那我们就从内存可见性说起。一、内存可见性可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。在单线程环境中,如果向某个变量先写入值,然后在没有其他写入操作的情况下读取这个变量,那么总能得到相同的值。这看起来很自然。然而,当读操作和写操作在不同的线程中执行时,情况却并非如此,这听

    2022年7月18日
    19
  • dedecms 使用中问题汇集

    dedecms 使用中问题汇集

    2021年11月17日
    40
  • 剑指Offer算法题

    剑指Offer算法题

    2022年3月13日
    31
  • 创建文件命令

    创建文件命令创建文件命令:// 创建文本文件的命令有很多,大部分是利用”重定向”的功能来实现的。这里分两种类型来说:1、创建非空文本文件:非空的文本文件很好创建,只要用有屏幕输出的命令就可以了

    2022年8月4日
    4
  • Python数字/字符串补零操作[通俗易懂]

    Python数字/字符串补零操作[通俗易懂]字符串补零可以使用zfill()函数来给字符串补零>>>str=”123″>>>print(str.zfill(8))00000123还能把整数转化成字符来使用zfill()补零>>>num=123>>>print(str(num).zfill(8))00000123数字补零对于数字可以使用格式化的方式来进行补零:>>>number=123>>&

    2022年10月12日
    0
  • 网络爬虫——scrapy案例「建议收藏」

    网络爬虫——scrapy案例「建议收藏」1.创建项目打开一个终端输入(建议放到合适的路径下,默认是C盘)scrapystartprojectTXmoviescdTXmoviesscrapygenspidertxmsv.qq.com2.修改setting修改三项内容,第一个是不遵循机器人协议,第二个是下载间隙,由于下面的程序要下载多个页面,所以需要给一个间隙(不给也可以,只是很容易被侦测到),第三个是请求头,添加一个User-Agent,第四个是打开一个管道ROBOTSTXT_OBEY=FalseDOWN

    2022年6月26日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号