刚刚接触C++以及数据结构,今天做了第一次尝试用C++和数据结构解决问题,问题是基于约瑟夫环问题的简单版。
先来看看约瑟夫环问题的介绍:
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始 报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。(摘自百度百科)
程序的输入应该由三个值组成(n, k, m),接下来程序将会自动运行,本文假设每次都从第一个人开始报数,所以是做了一些简化,但是换汤不换药。
接下来将分部介绍程序的组成
首先是头文件,命名为circle_single_linked_list.h
基本结构:
template
class circleSingleLinkedList{
private:
/*循环单链表的每个的节点定义
*结构简单,所以使用struct
*具体实现请看下文
*/
struct Node{
};
public:
/*内嵌类iterator
*是链表中的一个位置的抽象(abtracts the notion of a position)
*类比vector<>的iterator
*在类外的调用方法为:circleSingleLinkedList::iterator ....
*本文省去了对于const_iterator类型的定义
*/
class iterator{
};
public:
/*循环链表实现
*由构造函数(含默认实参),big three都没有...(程序比较简陋)
*begin()返回表头位置
*insert以及erase是实现约瑟夫环的主要手段
*循环链表只有2个数据成员, theSize存储链表节点个数, head为头指针, 指向链表中的第一个节点
*具体实现见下文
*/
circleSingleLinkedList(const Object& x = Object()){
}
iterator begin()const{
}
int size(){
return theSize;
}
bool empty(){
return size() == ;
}
iterator insert(iterator itr, const Object& x){
}
iterator erase(iterator itr){
}
void print(ostre