一. 需求分析: 问题定义: m只猴子要选大王,选举方法如下:所有猴子按1,2,………m编号并按照顺序围成一圈。从第一个开始数,每数到第n个,该猴子就跳出圈外,如此循环报数,直到圈内剩下一只猴子时,这只猴子就是大王。m和n由键盘输入,打印出成为猴王的猴子号。 问题分析: 通过对“猴子选大王”问题的分析,由于本题目的数据元素的个数不可预知,所以使用链表。链表是动态的,可以在需要的时候增长和减小其长度,而数组是在编译时分配内存的,所以其大小是不可改变的,而且会出现内存浪费的情况。我认为单循环链表能较好的解决问题。在建立循环链表时,因为链表的大小由输入决定,因此与其匹配的结点数也是变化的,所以要进行动态内存分配。 限制条件;m>0;n>0。 研究意义: 单循环链表及动态存储的实现。 测试用例: m=10;n=4; 最后求出成为猴王的猴子号。 结果:这群猴子的大王是5号猴子。 二. 总体设计: 采用的储存结构:单循环链表 抽象数据类型: ADT struct {对象数据=(整数) 操作对象:struct monkey *create() 建立链表 struct monkey *findout(start,n) 找出被淘汰的猴子的上一个 Struct monkey *letout(last) 删掉被淘汰的猴子,返回的指针值指向下一个猴子} 函数模块之间的调用:
...... |