typedefstruct data{ //定义一个结构体“data” intnum; //用于存放人的序号intval; //用于存放密码 }typedata;
typedefstruct node{ //定义一个结构体(结点),其中包含一个数据域和一个指针域
typedata data; //结构体的嵌套 struct node *next; }listnode;
typedeflistnode *linklist; linklist head;
void main()// 进入主函数 {
intn,i,b,m,j;
linklist head=(listnode *)malloc(sizeof(listnode)); //申请一个空间(头结点 head) listnode *p,*q; //定义两个可以指向结点的指针 printf(\"输入总人数:\"); scanf(\"%d\
q=head; //用指针q指向头结点 for(j=1;j<=n;j++) //本次循环主要是将每一个人的数据(包括序号、密码)存入循环链表中 {
printf(\"请输入第%d号同学的密码:\\n\ scanf(\"%d\
printf(\"\\n\"); q->next=(listnode *)malloc(sizeof(listnode)); //将头结点的next域指向刚生成的一个结点
q=q->next;
q->data.val=b; //输入密码 q->data.num=j; //输入序号 q->next=head->next;
} //将尾结点的next域指向第一个结点,构成循环链表 printf(\"请任意输入一个数m:\"); scanf(\"%d\
if(m<=0) printf(\"输入错误\"); do{
I=1; while(I!=m)
{ //将q指针指向所要输出的结点的前一结点 q =q->next; I++;
}
}
}
p=q->next; //p指向输出结点
q->next=p->next; //将输出结点的前结点的next域指向输出结点的后结点 printf(\"num:%d\val:%d\\n\输出 m=p->data.val; //取得输出结点的密码 free(p);
while(q->next!=q); //只剩最后一个结点时结束
printf(\"num:%d\val:%d\\n\输出最后一个结点 free(q); //释放最后一个结点 free(head); //释放头结点