#include <stdlib.h>
typedef struct link
{
struct link *before;
int data;
struct link *next;
}node,*pnode;
typedef struct real_link
{
int size;
struct link head;
pnode tail;
}list,*plist;
void initialize(plist mylist)
{
mylist->head.before=NULL;
mylist->head.next=NULL;
mylist->head.data=0;
mylist->tail=NULL;
mylist->size=0;
}
void creat(plist mylist1)
{
int i;
pnode tmp=&mylist1->head;
while(scanf("%d",&i))
{
pnode p1=(pnode)malloc(sizeof(node));
p1->data=i;
mylist1->size++;
p1->next=NULL;
tmp->next=p1;
p1->before=tmp;
tmp=tmp->next;
mylist1->tail=p1;
p1->next=mylist1->head.next;//链表尾和头相连
mylist1->head.next->before=p1;//实现循环
}
printf("创建成功\n");
}
void kill(plist mylist,int i)
{
pnode tmp=NULL;
while(mylist->size!=1)
{
int count=0;
if(mylist->size==6)
{
tmp=mylist->head.next;
}
while(count<i)
{
tmp=tmp->next;
count++;
}
sleep(1);
printf("%d自杀成功\n",tmp->data);
pnode ptr1=tmp->before;
pnode ptr2=tmp->next;
free(tmp);
ptr1->next=ptr2;
ptr2->before=ptr1;
mylist->size--;
tmp=ptr2;
}
}
list dm;
initialize(&dm);
creat(&dm);
kill(&dm,23);
return EXIT_SUCCESS;
}