约瑟夫环-顺序表-C++
2015-11-18 11:18
477 查看
#include <iostream> using namespace std; template<class T> class SeqList { public: SeqList(int size=64); SeqList(T value[],int n); ~SeqList(); bool isEmpty(); int length(); T get(int i); bool set(int i,T x); friend ostream &operator<<<T>(ostream &out,SeqList<T> &list); void insert(int i,T x); void insert(T x); bool remove(int i,T &old); void clear(); private: T *element; int size; int len; }; template<class T> SeqList<T>::SeqList(int size) { this->size=size<64?64:size; this->element=new T[this->size]; this->len=0; } template<class T> SeqList<T>::SeqList(T value[],int n) { if (n>0) { this->element=new T[2*n]; this->size=2*n; this->len=n; for(int i=0;i <n;i ++) { this->element[i]=value[i]; } } } template<class T> SeqList<T>::~SeqList() { delete []this->element; } template<class T> bool SeqList<T>::isEmpty() { return len==0; } template<class T> int SeqList<T>::length() { return len; } template<class T> T SeqList<T>::get(int i) { if (i >=0&&i<len) { return element[i]; } return 'F'; } template<class T> bool SeqList<T>::set(int i,T x) { if (i>=0&&i<len) { element[i]=x; return true; } return false; } template<class T> ostream &operator<<(ostream &out,SeqList<T> &list) { out<<"("; if (list.len>0) { out<<list.element[0]; for (int i=1;i<list.len;i++) { out<<","<<list.element[i]; } } out<<")\n"; return out; } template<class T> void SeqList<T>::insert(int i,T x) { if (len==size) { T *temp=element; element=new T[size*2]; for (int i=0;i<size;i ++) { element[i]=temp[i]; } size*=2; } if (i<0) { i=0; } if (i>len) { i=len; } for (int j=len-1;j>=i;j--) { element[j+1]=element[j]; } element[i]=x; len++; } template<class T> void SeqList<T>::insert(T x) { insert(len,x); } template<class T> bool SeqList<T>::remove(int i,T &old) { if (len>0&&i>=0&&i<len) { old=element[i]; for (int j=i;j<len;j++) { element[j]=element[j+1]; } len--; return true; } return false; } template<class T> void SeqList<T>::clear() { len=0; }
#include "SeqList.h" #include <iostream> using namespace std; void josephus(int number,int start,int distance) { SeqList<char> jose(number); int i=0; for (i=0;i<number;i++) { jose.insert('A'+i); } cout<<"约瑟夫环("<<number<<","<<start<<","<<distance<<"),"<<jose; i=start; while (jose.length()>1) { i=(i+distance-1)%jose.length(); char old; if (jose.remove(i,old)) { cout<<"删除"<<old<<","; } cout<<jose; } cout<<"被赦免者是"<<jose.get(0)<<"\n"; } int main() { josephus(5,0,2); system("pause"); return 0; }
相关文章推荐
- 腾讯c++ 阿里java
- 小顶堆第二弹-----堆降序排序(C语言非递归)
- C++编程规范---读书有感(2)
- C语言——符号的声明与定义
- C++类中的枚举类型
- C语言---迷宫游戏 代码
- C++中的单例模式其实也不简单
- C++文件 读写操作大全
- 剑指offer第三十一题【整数中1出现的次数(从1到n整数中1出现的次数)】c++实现
- C语言之动态内存分配
- C++的虚函数表
- C++输入输出操作符重载
- C++输入输出操作符重载
- 【c++】公司职员系统
- 【C++】多态的实现原理
- 单片机C语言代码-代码格式
- C语言之指针高级
- 查询词提示系统的简单实现
- c语言:3种方法;求出0~999之间的所有“水仙花数”并输出。
- 【C】关于C语言数组的总结(1)