基于链表编写“猫吃老鼠”

http://pan.baidu.com/s/1nvaTki1

这是一个简单的链表操作问题

"现有n个老鼠围成一圆圈,有一只猫从任意位置开始吃老鼠,每次都隔一个老鼠吃,请给出最后一个老鼠的编号?"
题目的具体要求是给出任给老鼠数n,输出猫最后吃的老鼠的编号。 
思考这样的一个问题,由于涉及到从数据队列中间删除数据(相对于从开头和结尾删除数据),所以需要使用链表。
在现在的编程环境中,链表的操作可以使用std,也可以使用自己编写的链表。由于这里是kata,所以两种方式都采用。
链表分为单向链表和双向链表,由于“猫吃老鼠”是一个单向循环的操作,所以采用单向链表就可以。
 
首先定义数据结构
typedef struct MouseNode
{
    int iNO;
    MouseNode *pNext;
 
    MouseNode(){iNO = 0;pNext = nullptr;}
    MouseNode(int i){iNO = i;pNext = nullptr;}
};
老鼠的结构,除了自己的编号,关键的是定义了下一个指向。
然后编写“吃老鼠动作”
MouseNodeC猫吃老鼠链表操作Dlg::CatEatmouses(MouseNodepStartMouse)
{
 
    MouseNodepThis  = pStartMouse;
 
    pThis->pNext = pThis->pNext->pNext;
    pThis = pThis->pNext;
 
    return pThis;
}
最后编写事件驱动
void C猫吃老鼠链表操作Dlg::OnBnClickedOk()
{
    // TODO: 在此添加控件通知处理程序代码
    int nMouseCount = GetDlgItemInt(IDC_EDIT_INPUT);
    if(nMouseCount <= 1)
    {
        m_iResult = 1;//结果为1
        return ;
    }
    // 开辟N个老鼠内存并初始化 
    MouseNode *pMouseBuffer = new MouseNode[nMouseCount];
 
    // 初始化双向链表 
    pMouseBuffer[0].pNext = &pMouseBuffer[1];
    pMouseBuffer[0].iNO = 1;
    pMouseBuffer[nMouseCount - 1].pNext = &pMouseBuffer[0];
    pMouseBuffer[nMouseCount - 1].iNO = nMouseCount;
    for(int i = 1;i < nMouseCount - 1;i++)
    {
        pMouseBuffer[i].pNext = &pMouseBuffer[i + 1];
        pMouseBuffer[i].iNO = i + 1;
    }
 
    // 开始吃老鼠 
    MouseNode *pNextEatMouse = &pMouseBuffer[nMouseCount-1];
    while (TRUE)
    {
        if(pNextEatMouse->pNext == pNextEatMouse)
        {
            break//当链表中只有一个元素的时候退出
        }
        pNextEatMouse = CatEatmouses(pNextEatMouse);
    }
    m_iResult = pNextEatMouse->iNO;
    delete[] pMouseBuffer;
    SetDlgItemInt(IDC_EDIT_RESULT,m_iResult);
}
并且实现界面
 
虽然std::forward_list也是单向链表,但是目前还没有看过写得非常好的代码,感觉使用起来不如直接使用感觉利索。





目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com
优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/649569

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。