- 1.打印序列
- 2.主函数
- 3.循环链表基本操作
void PrintCList(ClinkList &L,int n){//约瑟夫问题 叫n出列
int i = L->data; //获取长度
int j = 0;
ClinkList p = L->next; //设置初始指针指向第一个元素
ClinkList t = L; //指向p的前一元素
ClinkList q = NULL;
while(i>0){
if(p->next!=L){ //p的下一结点不是头结点
j++; //j+1
if(j%n==0){ //如果是n的倍数
printf("%2d ",p->data); //输出数据
if(i>1){
printf("-->"); //输出箭头
}
i--; //长度减1
L->data--;
q = p; //删除出列元素
t->next = q->next;
}
else{ //未出 指针下移
t = t->next;
}
p = p->next; //移动p
free(q); //删除q结点
}
else{ //p下一结点为头结点
j++;
if(j%n==0){
printf("%2d ",p->data);
if(i>1){
printf("-->");
}
i--;
L->data--;
q = p;
t->next = q->next;
t = L; //当删除最后一个元素时 将t移向L
}
else{
t = t->next->next;//为删除元素时 t指向L
}
p = p->next->next; //p为第一个元素
free(q); //释放q结点
}
if(i==1){
printf("%2d ",p->data); //输出最后一个
i--;
L->data--;
L->next = L; //此时循环链表清空
free(p);
}
}
t = NULL;
}
2.主函数
int main(){
int n;
printf("输入被叫数字:");
scanf("%d",n);
ClinkList L;
InitList(L);
printf("%dn",L->data);
PrintList(L);
cout<
3.循环链表基本操作
点击查看:循环链表基本操作的实现
——————END——————
作者注:
记录学习,分享经验。
有兴趣可以关注博主,以后还会持续更新内容哦~



