狐狸逮兔子——链式存储方式
问题描述
围绕着山顶有n个圆形排列的洞,狐狸要吃兔子,兔子说:”可以,但必须找到我,我就藏于这n个洞中,你先到1号洞找,第二次隔1个洞(即3号洞)找,第二次隔2个洞(即6号洞)找,以后如此类推,次数不限.”但狐狸从早到晚进进出出了m次,仍没有找到兔子.问:兔子究竟藏在那个洞里?
问题分析
这实际上是一个反复查找循环链表的过程.
定义一个循环链表,用户自己输入洞的个数n和查找次数m,用具有n个元素的循环链表来表示这n个洞.每个元素表示围绕山顶的一个洞,下标为洞的编号.对所有洞设置初始标志为0,然后通过m次循环,对每次所进之洞修改标志为1,最后输出标志为0的洞,即兔子藏身的洞.
解决问题
typedef int Status;
typedef int ElemType; //结构体里洞的编号和标志为整型
typedef struct LNode
{ElemType data; //洞的编号ElemType flag; //洞的标志,1表示狐狸进过此洞,0表示狐狸没有进过此洞struct LNode *next;
}*LinkList,LNode;
构造一个循环链表,并给n个洞编号,设置洞的初始标志为0.
LinkList InitList(int n)
{//构造一个循环链表Lint i;LinkList p,L;L=(LinkList)malloc(sizeof(LNode));L->next=NULL;p=L;for(i=1;i<=n;i++){p->data=i;p->flag=0;if(i!=n){p->next=(LinkList)malloc(sizeof(LNode));p=p->next;}if(i==n){p->next=L;}}return L;
}
遍历链表,分别输出洞的编号和标志.
Status traverselist(LinkList L,int n)
{//遍历链表LinkList p;p=L;int i;printf("洞的编号:");for(i=0;i<n;i++){printf("%3d",p->data);p=p->next;}printf("\n");printf("洞的标志:");for(i=0;i<n;i++){printf("%3d",p->flag);p=p->next;}printf("\n");return OK;
}
狐狸开始找兔子,将进入过的洞标志改为1,寻找m次结束 。最后输出标志仍为0的洞,即兔子可能藏身地点。
Status Search(LinkList L,int m,int n)
{int i,j;LinkList p;p->flag=1;for(i=1;i<=m;i++){for(j=1;j<=i+1;j++){p=p->next;}p->flag=1;}printf("兔子可能存在的位置为:");p=L;for(i=0;i<n;i++){if(p->flag==0){printf("%3d",p->data);}p=p->next;}printf("\n\n");return OK;
}
全部代码
#include<stdio.h>
#include<stdlib.h>
#define OK 1
typedef int Status;
typedef int ElemType;
typedef struct LNode
{ElemType data; //洞的编号ElemType flag; //洞的标志,1表示狐狸进过此洞,0表示狐狸没有进过此洞struct LNode *next;
}*LinkList,LNode;LinkList InitList(int n)
{//构造一个循环链表Lint i;LinkList p,L;L=(LinkList)malloc(sizeof(LNode));L->next=NULL;p=L;for(i=1;i<=n;i++){p->data=i;p->flag=0;if(i!=n){p->next=(LinkList)malloc(sizeof(LNode));p=p->next;}if(i==n){p->next=L;}}return L;
}Status traverselist(LinkList L,int n)
{//遍历链表LinkList p;p=L;int i;printf("洞的编号:");for(i=0;i<n;i++){printf("%3d",p->data);p=p->next;}printf("\n");printf("洞的标志:");for(i=0;i<n;i++){printf("%3d",p->flag);p=p->next;}printf("\n");return OK;
}Status Search(LinkList L,int m,int n)
{int i,j;LinkList p;p->flag=1;for(i=1;i<=m;i++){for(j=1;j<=i+1;j++){p=p->next;}p->flag=1;}printf("兔子可能存在的位置为:");p=L;for(i=0;i<n;i++){if(p->flag==0){printf("%3d",p->data);}p=p->next;}printf("\n\n");return OK;
}int main()
{int m,n;printf("请输入查找次数和洞的个数;");scanf("%d%d",&m,&n);printf("\n");LinkList L;L=InitList(n);printf("初始:\n\n");traverselist(L,n);printf("\n******************************************\n\n");Search(L,m,n);printf("寻找%d次,结果为:\n\n",m);traverselist(L,n);return 0;
}
狐狸逮兔子——链式存储方式相关推荐
- 【数据结构 C描述】有两个整数集合 A 和 B 分别用两个线性表 LA 和 LB 表示,求:一个新的集合A=A∪B,A仍然为纯集合,线性表采用链式存储方式。【单链表】
这是我的作业题,作业写完后再附到博客中,可能代码写得很烂.虽然是C语言写的,但是我在其中加入了C++的写法,例如cout.我懒得写printf的格式控制符,所以用cout来输出内容,这样我感觉简便多了 ...
- 严蔚敏数据结构C语言版——线性表的链式存储方式详细代码
一.严蔚敏数据结构C语言版 由于书上的许多地方都是伪代码,所以下面的代码对课本上的做了一些改动,使代码能够正常运行 链表的定义即相关类型定义 typedef int ElementType; type ...
- 线性表的链式存储结构及代码实现(单链表,双链表,循环链表)
在上一篇博文中介绍了线性表的顺序存储方式,它最大的缺点就是在插入和删除操作时会移动大量的元素,这显然会耗费很多时间.后来人们便想到了用链式存储方式来解决上面这一问题.链式存储线性表时,不需要使用地 ...
- 二叉树的存储方式【顺序储存(数组)、链式存储、邻接表存储等】
其他二叉树知识!二叉树知识汇总 目录 前言: 1.顺序存储结构 2.链式存储结构 3.二维数组直接存储 4.邻接表存储 前言: 顺序存储和链式存储是经典讲解的内容,本文做简单理论介绍,而对于后两种:二 ...
- 数据结构(C语言版)严蔚敏->二叉树(链式存储结构)的构造及其几种遍历方式(先序、中序、后序、层次)和线索二叉树
二叉树每个节点至多只有两棵子树(即二叉树中不存在度大于2的节点),并且二叉树的子树有左右之分,其次序不能任意颠倒. 1. 二叉树 二叉树一般采用链式存储结构,用链表节点来存储二叉树中每个节点.在二叉树 ...
- 狐狸逮兔子实验 c++
实验描述 狐狸逮兔子实验 (一)问题描述 围绕着山顶有10个圆形排列的洞,互利要吃兔子,兔子说:"可以,但必须找到我,我就藏于这10个洞中,你先到1号洞找,第二次隔1个洞(即3号洞)找,第二 ...
- 线性表-链式存储结构
3.6 线性表的链式存储结构 3.6.1 顺序存储结构不足的解决办法 前面我们讲的线性表的顺序存储结构.它是有缺点的,最大的缺点就是插入和删除时需要移动大量元素,这显然就需要耗费时间.能不能想办法解决 ...
- 综合实验一 狐狸逮兔子
一)问题描述 围绕着山顶有10个圆形排列的洞,狐狸要吃兔子,兔子说:"可以,但必须找到我,我就藏于这10个洞中,你先到1号洞找,第二次隔1个洞(即3号洞)找,第二次隔2个洞(即6号洞)找,以 ...
- 综合实验:狐狸逮兔子
实验要求:(一)问题描述 围绕着山顶有10个圆形排列的洞,狐狸要吃兔子,兔子说:"可以,但必须找到我,我就藏于这10个洞中,你先到1号洞找,第二次隔1个洞(即3号洞)找,第二次隔2个洞(即6 ...
- 数据结构与算法(6-2)二叉树的存储结构(顺序存储、链式存储)
目录 一.二叉树的顺序存储 存储方式 总代码 二.二叉树的链式存储(二叉链表) 1.存储结构 2.创建二叉树 总代码 一.二叉树的顺序存储 存储方式 //树的顺序存储 typedef struct { ...
最新文章
- 如何利用大数据指导市场营销
- 浅析SAAS数据模型设计(Oracle)
- excel python 形状_何使用Python操作Excel绘制柱形图
- 乐山市2021年高考成绩查询,四川乐山2021年普通高考报名人数 实际高考参考人数...
- 下一代防火墙信息收集(概念篇)
- 仅输入单张图片,就能“看”出物体材质!这篇图形学论文已被SIGGRAPH 2021收录...
- Google公开C++编码规范
- 嘿,运维!你与VXLAN有场约会……
- anguarjs 上传图片预览_前端图片上传那些事儿
- 配置VS2008本地调试.NETFRAMEWORK源代码
- 最近和很多创业者和中小企业老板沟通
- maven私服搭建及应用
- 前端数据可视化echarts.js使用指南
- 使用微软MediaCreationTool21H1.exe制作u盘windous10启动盘
- VoxelMorph运行时遇到的问题
- QT开发(九)—— Qt实现应用内动态切换语言,使用Qt语言家编译字体包
- axios的简单封装处理
- linux 消息队列最大值,linux 消息队列的限制
- 百度地图android去除logo,百度地图 Android版 隐藏logo
- KGB知识图谱开创技术应用新渠道
热门文章
- JeecgBoot集成DataV组件库
- 关于用ADS设计PA中电容的选择
- Windows2003下运行JSP,环境配置教程(J2SDK+Tomcat5+IIS)
- pgm概率图模型_概率图形模型(PGM)算法| 机器学习
- 树莓派学习笔记——串口与摄像头
- linux 合并视频文件,Linux下转换视频格式与合并视频
- 吴裕雄--天生自然 诗经:临江仙·滚滚长江东逝水
- PostgreSQL的学习心得和知识总结(十九)|数据库游标详细使用说明及特性总结(全网最精细最详尽 仰望星空也要脚踏实地)
- 数据可视化的方法、工具和应用
- jxl 冻结单元格_如何在Word中冻结表格中单元格的大小