作业7.21 约瑟夫环问题与进制转换

1. 使用循环链表实现约瑟夫环

实现函数

//约瑟夫环
void circle(loopLink *L,int m)
{
	loopLink *p=L;         //p指向头结点
	loopLink *q=L;         
	while(q->next!=L)
	{
		q=q->next;         //q指向头结点L的前一个结点
	}
	int count=0;           //计数
	while(p!=q)          //结点大于1个
	{
		count++;
		if(count==m)
		{
			printf("%d  ",p->data);
			count=0;
			q->next=p->next;
			free(p);
			p=q->next;
		}
		else
		{
			p=p->next;
			q=q->next;
		}
	}
	printf("%d  \n",p->data);
	free(p);
	p=NULL;
	q=NULL;
}

运行结果

人数为8,数到4出圈,所得到序列为4 8 5 2 1 3 7 6
人数为10,数到3出圈,所得到的序列为3 6 9 2 7 1 8 5 10 4

在这里插入图片描述

主函数代码

#include "looplink.h"
int main(int argc, const char *argv[])
{
	int n;
	int m;
	printf("输入人数n:");
	scanf("%d",&n);
	printf("输入数m:");
	scanf("%d",&m);
	loopLink *L=list_create();
	for(int i=1;i<=n;i++)
	{
		list_insert_tail(L,i);
	}
	loopLink *S=delete_head(L);
	printf("新序列为:");
	circle(S,m);
	return 0;
}

2. 使用栈的特点完成进制转换

函数代码

//进制转换
void conversion(int n,int m)
{
	seqStack *S=creat();
	while(n/m!=0)
	{
		int a=n%m;
		push(S,a);
		n/=m;
	}
	push(S,n);
	int b=0;
	printf("进制转换结果:");
	while(!empty(S))
	{
		pop(S,&b);
		if(b>-1&&b<10)
		{
			printf("%d",b);
		}
		else if(b>=10&&b<=15)
		{
			char c=b+55;
			printf("%c",c);
		}
		else
		{
			printf("进制转换失败");
		}
	}
	printf("\n");
}

运行结果

输入十进制数987,可以使用二进制,八进制,十六进制,可以使用十六进制以内的任意进制
二进制结果1111011011
八进制结果1733
十六进制结果3DB
六进制结果4323

在这里插入图片描述

主函数代码

#include "seqstack.h"
int main(int argc, const char *argv[])
{
	int a;
	int b;
	printf("输入十进制数:");
	scanf("%d",&a);
	printf("输入进制:");
	scanf("%d",&b);
	conversion(a,b);
	return 0;
}

源代码链接

循环链表 https://gitee.com/Wei_JiaMin/looplink.git
顺序栈 https://gitee.com/Wei_JiaMin/seqstack.git
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不知名大学生M

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值