使用循环链表实现约瑟夫环(围圈报数问题)
2018-06-18 04:20:36来源:未知 阅读 ()
刚开始学C,碰到经典的围圈报数问题,现先将实现代码附下:
#include<stdio.h>
#include<stdlib.h>
struct LNODE{ //链表定义
int data;
struct LNODE *next;
};
typedef struct LNODE Lnode;
typedef struct LNODE *LinkList;
struct LNODE *create(int s[]) //创建单项循环链表
{
struct LNODE *head=NULL,*p=NULL,*last=NULL;
int i=0;
head=(struct LNODE *)malloc(sizeof(struct LNODE));
if(!head)
printf("memory allocation error!");
if(s[0]!=0)
{
head->data=s[0];
head->next=head;
last=head;
i++;
while(s[i]!=0) //判断是否为0,为0则结束
{
p=(struct LNODE*)malloc(sizeof(struct LNODE));
last->next=p;
p->data=s[i];
p->next=head;
last=p;
i++;
}
}
return head;
}
void printlist(struct LNODE *head) //打印循环链表
{
struct LNODE *q;
int i;
printf("the linked list is :\n");
if(!head)
printf("NULL");
else
{
q=head;
do
{
printf("%d\t",q->data);
q=q->next;
}while(q!=head);
}
printf("\n");
}
int main()
{
int circlelist[100],n,i,k=1;
printf("please input the number:");
scanf("%d",&n); //输入人数
getchar();
for(i=0;i<n;i++)
circlelist[i]=i+1; //给每个人编号
circlelist[i]=0; //最后值赋0
for(i=0;i<=n;i++)
printf("%d\t",circlelist[i]); //打印编号
LinkList p=NULL,q=NULL;
p=create(circlelist);
printlist(p); //打印编号链表
while(p->data!=p->next->data) //自身与自身相等时退出循环
{
if(k!=3) //设置报到数3的人退出
{
k++;
q=p;
p=p->next;
}
else
{
k=1;
printf("%d\t",p->data); //打印先后推出的人员编号
q->next=p->next; //删除报3的人员结点
p=q->next;
}
}
printf("\n%d\n",p->data);
}
刚开始指针定义时都没有赋值为NULL,调试没错误,可是却无法执行。
书中说,建议定义时如果暂时不使用指针,先赋值为NULL,我觉得最好这样做,而且,在使用指针时,都应该判断一下是否为空。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- C++冒泡排序 (基于函数模板实现) 2020-05-31
- C++ 在名称空间中使用using声明和using编译指令 2020-05-29
- 1.ffmpeg、ffplay、ffprobe命令使用 2020-05-11
- opencv-12-高斯滤波-双边滤波(附C++代码实现) 2020-05-10
- 关于使用ffmpeg的一些牢骚 2020-05-08
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash