以下是引用渚薰在2007-1-6 12:01:19的发言:
最简单的是用循环数组,但是,有两个缺点
1、如果在人出列的时候,对数组进行删除操作,会加大时间复杂度
2、如果用结构体类型,表明某一个人已经出列,那么这样会加大空间复杂度
所以,这类题目(如果n很大的话),最好就是用链表,伪代码如下
typedef struct people{
int num;
people *next;
}
main() {
根据n初始化单向循环列表,第一个节点为p;
k=1;
while (p->next!=p) //判断是否只剩一个节点
{
if (k==3)
{
从链表中删除p节点,同时p指向被删除节点的后一个节点;
k=1;
} else {
k++;
p=p->next;
}
}
最后打印p->num;
}
就是对的呀