1.问题说明
问题描述:编号为1,2,···,n的n个人围坐在一圆桌旁,每人持有一个正整数的密码。从第一个人开始报数,报到一个预先约定的正整数m时,停止报数,报m的人退席,下一个人又重新从1开始报数,依此重复,直至所有的人都退席。编一程序输出他们退席的编号序列。例如,设m=20,n=7,7个人的密码依次是3,1,7,2,4,8,4,则退席的人的编号依次为6,1,7,5,3,2,4。
基本要求:用不带表头结点的循环单链表表示围成圆圈的n个人;要求建立此循环单链表;某人离席相当于删除一个结点,要正确设置程序中循环终止的条件和删除结点时指针的修改变化。
1.2代码实现
#include<stdio.h>
#include<stdlib.h>
#define NULL 0
typedef int ElemType;
typedef struct LNode{
ElemType data;
ElemType sequence;
LNode *next;
}LNode, *LinkList;
//创建一个不带头节点的循环单向链表
void CreateCircular(LinkList &L, int n){
printf("依次输入数据元素:\n");
//输入第一个元素,即头节点
LinkList head = (LinkList)malloc(sizeof(LNode));
head->sequence =</