我用的vc 6.0++,表示数据结构不通,求大侠修改#include
#include<stdio.h>
#define N 100
void OutRing(int n, int quit[N]);
//数据结构设计//
typedef struct node{
int number;//每个人的编号
struct node *next;//指向下一个人的结点
}Lnode, *Linklist;
Linklist p;//设头指针p
Linklist InitRingLList(int n);
void Josephus(Linklist R, int n, int k, int quit[N]);
void main(){
int quit[N];
int n,k,m;
printf("enter :");
scanf("%d %d %d",&n,&k,&m);
p=InitRingLList(n);
Josephus(p,n,k,quit[N]);
OutRing(n,quit[N]);
}
//建立单循环链表函数与初始化//
Linklist InitRingLList(int n){ //尾插法建立//n代表总人数
Lnode *R, *p, *q;
int i;
R = new Lnode;
q = R;
for (i = 1; i < n; i++){
p = new Lnode;
q->number = i;
q->next = R;
q = p;
}
p->number = n;
p->next = R;//链表首尾相连
R = p;//R指向循环链表尾结点
return R;
}
//删除结点和保存输出顺序的函数//
void Josephus(Linklist R, int n, int k, int quit[N]){ //从编号为k的人开始报数
int i, j;
Lnode *p, *q;
p = R;
for(i = 0; i < n; i++ ){
for (j = 1; j <= k - 1; j++)//沿链前进 k-1步
p = p->next;
q = p->next;//q为被删除结点
p->next = q->next;//删除结点
quit[i] = q->number;//保存编号
delete q;//释放空间// delete为保留字
}
}
//序列的输出函数
void OutRing(int n, int quit[N]){
int i;
for (i = 0; i < n; i++)
cout << quit[i];
}
void main(){
int n;
printf("请输入总人数:")
scanf("%d", &n);
int k;
printf("/n请输入开始编号")
scanf("%d", &k);
int m;
printf("/n请输入报数上限")
scanf("%d", &m);
}