生活随笔
收集整理的這篇文章主要介紹了
                                
约瑟夫问题_笔记
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
 
                                
                            
                            
                             
此時m=8,n=3,每次數3次就將那個數進行輸出,輸出后的數將會被釋放
 
123輸出3456輸出6781輸出1245輸出5782輸出2478輸出8474輸出4777輸出7 
需要添加循環鏈表類,筆記里有! 
 main.cpp
 
#include"List.h"#define M 8
#define N 3typedef struct 
MYNUM
{
CircleLinkNode* node;int val;
}
MyNum;
void Myprint(
CircleLinkNode* 
data)
{
MyNum * num = (
MyNum*)
data;cout << num->val << 
" " ;}
bool MyCompare(
CircleLinkNode* data1, 
CircleLinkNode* data2)
{
MyNum* num1 = (
MyNum*)data1;
MyNum* num2 = (
MyNum*)data2;
if (num1->val == num2->val){return true;}return false;
}
int main()
{
List* l = new 
List();
MyNum num[
M];for (size_t i = 
0; i < 
8; i++){num[i].val = i + 
1;l->
Insert_CircleLinkList(l->linklist,i,(
CircleLinkNode*)&num[i]);}//打印l->
Print_CircleLinkList(l->linklist,
Myprint);cout << endl;int index = 
1;//輔助指針
CircleLinkNode* pCurrent = l->linklist->head.next;while (l->
Size_CircleLinkList(l->linklist) > 
1){
if (index == 
N){
MyNum* temNum = (
MyNum*)pCurrent;cout << temNum->val << 
" ";//保存待刪除節點的下一個節點
CircleLinkNode* pNext = pCurrent->next;//根據值刪除l->
RemoveByValue_CircleLinkList(l->linklist,pCurrent,
MyCompare);pCurrent = pNext;
if (pCurrent == &(l->linklist->head)){pCurrent = pCurrent->next;}index = 
1;}pCurrent = pCurrent->next;
if (pCurrent == &(l->linklist->head)){pCurrent = pCurrent->next;}index++;}
if (l->
Size_CircleLinkList(l->linklist) ==
1){
MyNum* tempNum = (
MyNum*)l->
Front_CircleLinkList(l->linklist);cout << tempNum->val;}
else{cout << 
"出錯!" << endl;}return 
0;
}
                            
總結
                            
                                以上是生活随笔為你收集整理的约瑟夫问题_笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                            
                                如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。