约瑟夫环
//尾插插升级
int list_insert_tail2(Looplink *p,int pos)
{
for(int i=1;i<=pos;i++)
{
list_insert_tail(p,i);
}
}
//游戏函数
int find_and_kill(Looplink *l,int k, int m) //l是输入的循环链表,k是从哪开始,m是数几个数
{
//找到开始位置
Looplink *p=l;
while(p->data!=k)
{
p=p->next;
}
printf("从%d开始\n",p->data);
//开始游戏踢人
Looplink *q=NULL;
while(p!=p->next)
{
for(int i=1;i<m;i++)
{
q=p;
p=p->next;
}
printf("删除%d\n",p->data);
q->next=p->next;
free(p);
p=q->next;
}
//循环结束留下最后一个
printf("删除%d\n",p->data);
return 0;
}
int main(int argc, const char *argv[])
{
Looplink *l =list_create();
if(NULL==l)
{
return -1;
}
list_insert_tail2(l,8);
//去头节点
Looplink *s =kill_head(l);
l=NULL;
list_show2(s);
find_and_kill(s,1,4);
return 0;
}
//结果
创建成功
插入成功
插入成功
插入成功
插入成功
插入成功
插入成功
插入成功
插入成功
头节点删除成功
1 2 3 4 5 6 7 8
从1开始
删除4
删除8
删除5
删除2
删除1
删除3
删除7
删除6
进制转换
//转换函数
int jzzh(Seqstack *s ,int p ,int m)
{ int count=0; //记录入栈次数
while(p)
{
int a=p%m;
push(s,a);
p=p/m;
count++;
}
for(int i=1;i<=count;i++)
{
pop(s);
}
return 0;
}
//主函数
int main(int argc, const char *argv[])
{
Seqstack *s=create();
if(NULL==s)
{
return -1;
}
jzzh(s,75,8);
return 0;
}
//结果
创建成功
入栈成功
入栈成功
入栈成功
1出栈成功
1出栈成功
3出栈成功