struct sq
{
int hao;
int mi;
};
typedef struct Lnode
{
sq data;
Lnode * next;
}*Link;
typedef struct
{
int len;
Link head;
} LinkList;
void InsertList(LinkList &L,int pos,sq e) //依次插入元素,注意第一个和以后的不同,如果有头结点,就不会有这方面的问题
{
Lnode *s=new Lnode ;Lnode *q=new Lnode;
s->data.hao=e.hao ;
s->data.mi=e.mi ;
int i=0;
if (L.head )
{
Lnode *p=L.head ;
while (i<1)
{
q=p;
p=p->next ;
if (p==L.head ) i++;
}
q->next =s;
}
else
{
L.head =s;
}
s->next =L.head ;
}
void CreatCycle(LinkList &L,int n) //建立循环链表
{
L.head =NULL; //无头结点
sq e;
for (int i=1;i<=n;i++)
{
e.hao =i;
cout<<"请输入第"<<i<<"人的密码:";
cin>>e.mi ;
InsertList(L,i,e);
}
}
Link TravelCycle(LinkList L,Lnode * p,int n) //把p定位在第n个被点到的元素元素的前一个位置上,以便删除第n个
{
for (int i=1;i<n-1;i++)
{
p=p->next ;
}
return p;
}
int DeleteCycle(LinkList &L,Link p,sq& e)
{
if (L.head !=NULL)
{
Lnode *q=p->next;
p->next =q->next;
e=q->data;
delete q;
return OK;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
const int n=7;int m=20;
LinkList L;CreatCycle(L,n);
Lnode *p=L.head ;
sq e;int order[n];
for (int i=1;i<=n;i++)
{
p=TravelCycle(L,p,m);
if (DeleteCycle(L,p,e))
{
m=e.mi ;order[i-1]=e.hao ;
}
if (L.head !=NULL) p=p->next;
}
cout<<"出队列的顺序是:";
for (int i=1;i<=n;i++)
cout<<order[i-1]<<",";
return 0;
}
VC下实现的,但学的是C版本