typedef struct _ListNode { size_t number; _ListNode *next; }ListNode; (2)设计一个Joseph类,其中包括mTotal(对应n),mStart(对应m)整型变量和首节点指针mHead,构造函数用于建立长度为mTotal的循环单链表。保护成员函数JosephSequence用于输出约瑟夫序列。析构函数不做任何工作。 具体代码如下: 复制#ifndef JOSEPH_H #define JOSEPH_H #include <stdio.h> typedef struct _ListNode { size_t number; _ListNode *next; }ListNode; class Joseph { private: Joseph() { } public: Joseph(size_t total,size_t start); virtual ~Joseph(); void printJsequence(); protected: void JosephSequence(); private: size_t mTotal; size_t mStart; ListNode* mHead; }; Joseph::Joseph(size_t total,size_t start) { mTotal = total; mStart = start; ListNode *r,*p; mHead = new ListNode(); mHead->next = nullptr; mHead->number = 1; r = mHead; //建立单链表,包含mTotal个节点 for (size_t i=2; i <= mTotal; ++i) { p = new ListNode(); p->number = i; r->next = p; r = p; } r->next = mHead; //将链表连成循环链表 } void Joseph::printJsequence() { JosephSequence(); } //输出约瑟夫序列 void Joseph::JosephSequence() { ListNode *p,*q; size_t j = 1; for (size_t i=1; i <= mTotal; ++i) { j = 1; p = mHead; while (j < mStart-1)//从1数到mStart { p = p->next; ++j; } q = p->next; //q是第mStartge节点,将该节点从循环单链表中移除 p->next = q->next; printf("%d ",q->number); delete q; q = nullptr; mHead = p->next; } } Joseph::~Joseph() { } #endif // JOSEPH_H 测试: 复制#include "Joseph.h" int main() { Joseph jo(6,5); jo.printJsequence(); return 0; } 输出:5 4 6 2 3 1
#ifndef JOSEPH_H #define JOSEPH_H #include <stdio.h> typedef struct _ListNode { size_t number; _ListNode *next; }ListNode; class Joseph { private: Joseph() { } public: Joseph(size_t total,size_t start); virtual ~Joseph(); void printJsequence(); protected: void JosephSequence(); private: size_t mTotal; size_t mStart; ListNode* mHead; }; Joseph::Joseph(size_t total,size_t start) { mTotal = total; mStart = start; ListNode *r,*p; mHead = new ListNode(); mHead->next = nullptr; mHead->number = 1; r = mHead; //建立单链表,包含mTotal个节点 for (size_t i=2; i <= mTotal; ++i) { p = new ListNode(); p->number = i; r->next = p; r = p; } r->next = mHead; //将链表连成循环链表 } void Joseph::printJsequence() { JosephSequence(); } //输出约瑟夫序列 void Joseph::JosephSequence() { ListNode *p,*q; size_t j = 1; for (size_t i=1; i <= mTotal; ++i) { j = 1; p = mHead; while (j < mStart-1)//从1数到mStart { p = p->next; ++j; } q = p->next; //q是第mStartge节点,将该节点从循环单链表中移除 p->next = q->next; printf("%d ",q->number); delete q; q = nullptr; mHead = p->next; } } Joseph::~Joseph() { } #endif // JOSEPH_H 测试: 复制#include "Joseph.h" int main() { Joseph jo(6,5); jo.printJsequence(); return 0; } 输出:5 4 6 2 3 1
#include "Joseph.h" int main() { Joseph jo(6,5); jo.printJsequence(); return 0; } 输出:5 4 6 2 3 1
收藏0 举报
Meyeah 发表于 2016-12-27 15:27 看不懂,好像学C语言的时候那些例程用的不是这种方法吧
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
10
43
1
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注电源系统设计
扫码关注21ic项目外包
扫码浏览21ic手机版
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才
京公网安备 11010802024343号