关于链表节点赋值的问题
题目是这样的
任务:编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。
要求:利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号。
测试数据:
m的初值为20,n=7 ,7个人的密码依次为3,1,7,2,4,7,4,首先m=6,则正确的输出是什么?
要求:
输入数据:建立输入处理输入数据,输入m的初值,n ,输入每个人的密码,建立单循环链表。
输出形式:建立一个输出函数,将正确的输出序列
下面是我今天弄的代码,我想问下怎么给每个节点赋上我输入的值(密码)啊!急!拜托各位高手了!
#include<iostream.h>
class OnelinkNode //单链表的结点类
{
public:
int data; //数据元素域
int code;
OnelinkNode *next; //指针域,指向后继结点的指针
OnelinkNode(int k=0,int m=0,OnelinkNode *nextnode=NULL)
{ //构造结点,内联函数
data=k;
code=m;
next=NULL;
}
~OnelinkNode() //析构函数
{}
};
class Onering //单向循环链表类
{
public:
OnelinkNode *head; //头指针
Onering(int n=0); //构造函数
~Onering(); //析构函数
bool isEmpty()const //判断单向循环链表是否为空
{
return head==NULL;
}
bool remove(OnelinkNode *p); //删除p的后继节点
void output(); //输出单向循环链表的各个节点值
};
Onering::Onering(int n) //建立n个节点的单向循环链表
{ //链表节点值为1到n
head=NULL;
if(n>0)
{
int i=1,m;
OnelinkNode *rear,*q;
m=0;
head=new OnelinkNode(i++,m,head); //构造节点data值为i,next值为head
rear=head;
cout<<"请输入第1个人的密码:";
cin>>m;
while(i<=n)
{
cout<<"请输入第"<<i<<"个人的密码:";
cin>>m;
q=new OnelinkNode(i++,m,head);
rear->next=q; //q节点链入rear节点之后
rear=q; //rear指向新的链尾节点
}
rear->next=head;
}
}
Onering::~Onering() //析构函数
{
OnelinkNode *p=head,*q;
do
{
q=p;
p=p->next;
delete q;
}while(p!=head);
head=NULL;
}
bool Onering::remove(OnelinkNode *p) //删除q的后继节点
{
if(p!=NULL)
{
OnelinkNode *q=p->next; //q是p的后继节点
if(q!=NULL)
{
if(q==head) //欲删除head指向节点是,
head=q->next; //要将head向后移动
p->next=q->next; //删除q节点
cout<<q->data<<"出列"<<" ";
delete q;
return true;
}
}
return false;
}
void Onering::output() //输出单向循环链表的各个节点值
{
cout<<"剩下: ";
OnelinkNode *p=head;
do
{
cout<<p->data<<"-> ";
p=p->next;
}while(p!=head);
cout<<endl;
}
void display(Onering &ring,int s,int d) //解约瑟夫环
{
int j=0;
OnelinkNode *p=ring.head;
while(j<s-1) //计数起始点
{
j++;
p=p->next;
}
while(p->next!=p) //多于一个节点时循环
{
j=1;
while(j<d-1) //计数
{
j++;
p=p->next;
}
ring.remove(p); //删除p的后继节点
p=p->next;
ring.output();
}
cout<<"最后一个人是"<<p->data<<"\n"; //最后一个人
}
void main(void)
{
int n,s=1,d=0;
cout<<"输入人数总数n: "; //输入人数
cin>>n;
// cout<<"输入初始密码: "; //输入初始密码
// cin>>d;
Onering ring1(n); //建立有n个结点的单向循环链表
ring1.output();
display(ring1,s,d);
}