生活随笔
收集整理的這篇文章主要介紹了
约瑟夫问题_笔记
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
此時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;
}
總結
以上是生活随笔為你收集整理的约瑟夫问题_笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。