数据结构的一道题不会 50

求大神解答用单向循环链表实现,下面这些是书上给的一些函数,本人抄完这些函数到主函数就懵b了=。=#include<stdio.h>typedefintListItem;t... 求大神解答

用单向循环链表实现,下面这些是书上给的一些函数,本人抄完这些函数到主函数就懵b了=。=
#include <stdio.h>
typedef int ListItem;
typedef struct node *link;
typedef struct node {ListItem element;link next;int num;} Node;
typedef struct clist *List;
typedef struct clist{
int n;
link last;
}Clist;
link NewNode()
{
link p;
if((p=malloc(sizeof(Node)))==0)
printf("Exhausted memory.");
else return p;
}
List ListInit()
{
link y;
List L=malloc(sizeof*L);
y=NewNode();
y->next=y;
L->last=y;
L->n=0;
return L;
}
ListItem ListRetrieve(int k,List L)
{
int i=1;
link p;
if(k<1||k>L->n)
printf("out of bounds");
p=L->last->next->next;
while(i<k){p=p->next;i++;}
return p->element;
}
int ListLocate(ListItem x,List L)
{
int i=1;
link p;
p=L->last->next->next;
L->last->next->element=x;
while(p->element!=x){p=p->next;i++;}
return ((p==L->last->next)?0:1);
}
void ListInsert(int k,ListItem x,List L)
{
link p,y;
int i;
if(k<0||k>L->n)
printf("out of bounds");
p=L->last->next;
for(i=1;i<k;i++)
p=p->next;
y=NewNode();
y->element=x;
y->next=p->next;
p->next=y;
if(k==L->n)L->last=y;
L->n++;
}
ListItem ListDelete(int k,List L)
{
link p,q;
ListItem x;
int i;
if(k<1||k>L->n)
printf("out of bounds");
q=L->last->next;
for(i=0;i<k-1;i++)
q=q->next;
p=q->next;
q->next=p->next;
if(k==L->n)L->last=q;
x=p->element;
free(p);
L->n--;
return x;
}
展开
 我来答
百度网友fe390f7
2015-09-11 · TA获得超过122个赞
知道小有建树答主
回答量:140
采纳率:66%
帮助的人:95.7万
展开全部
简述一下思路吧:
通过单向循环链表模拟参与报数的人(data:该人的密码 next:该人的下一个人),并设置计数变量,当计数变量与当前的密码相同时,当前的人退出链表,并将密码替换为该人的密码,重置计数变量。循环往复直到单向循环列表里只剩一人时停止循环。
思路大概就是这样,有什么不懂的欢迎追问哦~
更多追问追答
追问
这个计数变量该如何设置?
追答
在计算函数中追加一个整形变量就可以啊 每有一个报数的 计数变量的值+1
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式