1.约瑟夫环问题
#include<stdlib.h>
#include<stdio.h>
typedef int datatype;
typedef struct node
{
datatype data;
struct node*next;
}Node;
void ysf(int n,int k) //总共有n个人,报到数字k出圈
{
//创建循环链表
Node *head=NULL,*p=NULL,*r=NULL;
head=(Node*)malloc(sizeof(Node));
if(head ==NULL)
{
printf("创建失败\n");
return;
}
head ->data =1;
head ->next =NULL;
p=head;
//创建循环
for(int i=2;i<=n;i++)
{
r=(Node*)malloc(sizeof(Node));
r->data =i;
r->next=NULL;
p->next =r;
p=r;
}
p->next =head;
p=head;
while(p->next!=p)
{
for(int i=1;i<k;i++)
{
r=p;
p=p->next; //p为出去的结点
}
printf("%d\t",p->data);
r->next=p->next;
free(p);
p=p->next;
}
printf("%d\t",p->data);
}
int main(int argc, const char *argv[])
{
ysf(10,3);
printf("\n");
return 0;
}
2.十进制转换
void destroy(seqstack *s)
{
if(NULL !=s)
{
free(s);
}
printf("释放成功\n");
}
int convert(seqstack *s,int n,int m)
{
seqstack *s=create();
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");
}