博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
约瑟夫环问题
阅读量:6834 次
发布时间:2019-06-26

本文共 2120 字,大约阅读时间需要 7 分钟。

直接上C++代码:

这里有问题的地方就是joseph_circle.cpp实现方法eliminate的循环语句的条件,如果把p->next != p改为p->next != nullptr就会出现循环已经删除了最后一个还继续循环,还继续删除,然后抛出空指针异常。

joseph_circle.h

1 #ifndef __YueHeFuHuan__joseph_circle__ 2 #define __YueHeFuHuan__joseph_circle__ 3  4 #include 
5 #include
6 using namespace std; 7 struct node{ 8 int payload; 9 node* next;10 node(int value){11 payload = value;12 }//通过构造器传值更好,更直观。13 };14 15 class joseph_circle{16 public:17 joseph_circle();18 node* tail;19 void add(int n);20 void output();21 void eliminate(int step);22 };23 24 25 #endif /* defined(__YueHeFuHuan__joseph_circle__) */

joseph_circle.cpp

1 #include "joseph_circle.h" 2  3 joseph_circle::joseph_circle(){ 4     tail = nullptr; 5 } 6 void joseph_circle::add(int value){ 7     if (tail == nullptr) { 8         tail = new node(value); 9         tail->next = tail;10     }else{11         node* next_node = tail->next;12         tail->next = new node(value);13         tail = tail->next;14         tail -> next = next_node;15         16     }17 }18 void joseph_circle::output(){19     if (tail == nullptr) {20         cout << "链表为空!" << endl;21     }else{22         node* p = tail->next;23         while (true) {24             cout << "payload:" << p->payload << endl;25             if (p == tail) {26                 break;27             }28             p = p->next;29         }30     }31 }32 void joseph_circle::eliminate(int step){33     if (tail == nullptr) {34         cout << "链表为空!" << endl;35     }else{36         node* p = tail;37         node* delete_p;38         //事实证明,当delete一个指针之后,其指针指向不为空39         while (p != nullptr && p->next != p) {40                 //根据步长找到目标元素41                 for (int i=0; i
next;43 }44 delete_p = p->next;45 cout << "deleting: " << delete_p->payload << endl;46 p->next = delete_p->next;47 if (delete_p == tail) {48 tail = p;49 }50 delete delete_p;51 52 }53 }54 }

 

 

转载地址:http://syqkl.baihongyu.com/

你可能感兴趣的文章
linux理论知识点(用于考试)
查看>>
Eclipse 导入 Android studio Exception Ljava/lang/UnsatisfiedLinkEror
查看>>
Android Studio 打包签名发布New Key Store
查看>>
01-查看系统整体性能情况:sar
查看>>
privot函数使用
查看>>
Beginning Silverlight 4 in C#-Silverlight控件
查看>>
用户及场景分析
查看>>
Tool.js
查看>>
Java线程池 ExecutorService
查看>>
Windows Phone 8: Evolution of the Runtime and Application Compatibility
查看>>
NOIP 跳石头
查看>>
那些有趣的博客
查看>>
类和对象的定义
查看>>
Java-GC-标记清除算法
查看>>
(转载)Java多线程入门(一)
查看>>
[C#]中获取当前程序运行路径的方法
查看>>
我的第一天
查看>>
SGU 164.Airline(结论题)
查看>>
findlibrary returned null
查看>>
scala学习手记28 - Execute Around模式
查看>>