日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

【C++】【六】约瑟夫问题

發布時間:2023/11/27 生活经验 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C++】【六】约瑟夫问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

核心代碼:

int index = 1;clinknode* pcur = list->head.next;while (Size_circlelinkist(list)>1){if (index == N) {mynum* temnum = (mynum*)pcur;printf("%d ", temnum->val);clinknode* pnext = pcur->next;RemoveByValue_circlelinkist(list, pcur, mycompare);pcur = pnext;if (pcur == &(list->head)) {pcur = pcur->next;}index = 1;}pcur = pcur->next;if (pcur == &(list->head)) {pcur = pcur->next;}index++;}if (Size_circlelinkist(list) == 1) {mynum* temp = (mynum*)Front_circlelinkist(list);printf("%d ", temp->val);}else {printf("occur error!\n");}

全部調用代碼:?

main.cc

#define _CRT_SECURE_NO_WARNINGS#include <iostream>
#include <stdlib.h>
#include <string.h>
#include "circlelinklist.h"#define M 8
constexpr auto N = 3;typedef struct MYNUM {circlelinkist node;int val;
}mynum;void MYPRINT(clinknode* data) {mynum* num = (mynum*)data;printf("%d  ", num->val);
}int mycompare(clinknode* data1, clinknode* data2) {mynum* num1 = (mynum*)data1;mynum* num2 = (mynum*)data2;if (num1->val == num2->val) {return 1;}return 0;
}
int main()
{circlelinkist* list = Init_circlelinkist();mynum num[M];for (int i = 0; i < M; ++i) {num[i].val = i + 1;Insert_circlelinkist(list, i,(clinknode*)&num[i]);}Print_circlelinkist(list, MYPRINT);printf("\n");//yuesefu work space printf("==================\n");int index = 1;clinknode* pcur = list->head.next;while (Size_circlelinkist(list)>1){if (index == N) {mynum* temnum = (mynum*)pcur;printf("%d ", temnum->val);clinknode* pnext = pcur->next;RemoveByValue_circlelinkist(list, pcur, mycompare);pcur = pnext;if (pcur == &(list->head)) {pcur = pcur->next;}index = 1;}pcur = pcur->next;if (pcur == &(list->head)) {pcur = pcur->next;}index++;}if (Size_circlelinkist(list) == 1) {mynum* temp = (mynum*)Front_circlelinkist(list);printf("%d ", temp->val);}else {printf("occur error!\n");}printf("\n");printf("==================\n");Free_circlelinkist(list);system("pause");return 0;
}

cieclrlinklist.h

#ifndef CIRCLELINKLIST
#define CIRCLELINKLISTtypedef struct clinknode {struct clinknode* next;
}clinknode;typedef struct circlelinkist {clinknode head;int size;
}circlelinkist;typedef int(*COMPARE)(clinknode*, clinknode*);typedef void(*PRINTNODE)(clinknode*);circlelinkist* Init_circlelinkist();void Insert_circlelinkist(circlelinkist* clist, int pos, clinknode* data);clinknode* Front_circlelinkist(circlelinkist* clist); void RemoveByPos_circlelinkist(circlelinkist* clist, int pos);void RemoveByValue_circlelinkist(circlelinkist* clist, clinknode* data, COMPARE compare);int Size_circlelinkist(circlelinkist* clist);int Find_circlelinkist(circlelinkist* clist, clinknode* data, COMPARE compare);void Print_circlelinkist(circlelinkist* clist, PRINTNODE print); void Free_circlelinkist(circlelinkist* clist);//typedef struct PERSON {
//    clinknode node;
//    char name[64];
//    int age;
//}person;
//
//
//void myprint(clinknode* data) {
//    person* p = (person*)data;
//    printf("name:%s,  age:%d \n", p->name, p->age);
//}
//
//int mycompare(clinknode* data1, clinknode* data2) {
//    person* p1 = (person*)data1;
//    person* p2 = (person*)data2;
//
//    if (strcmp(p1->name, p2->name) == 0 && p1->age == p2->age) {
//        return CIRCLELINKLIST_TRUE;
//    }
//    return CIRCLELINKLIST_FALSE;
//}#endif // !CIRCLELINKLIST

cieclrlinklist.cc


#include <iostream>
#include <stdlib.h>
#include "circlelinklist.h"#define CIRCLELINKLIST_TRUE 1
#define CIRCLELINKLIST_FALSE 0circlelinkist* Init_circlelinkist() {circlelinkist* clist = (circlelinkist*)malloc(sizeof(circlelinkist));clist->head.next = &(clist->head);clist->size = 0;return clist;
}void Insert_circlelinkist(circlelinkist* clist, int pos, clinknode* data) {if (clist == NULL) {return;}if (data == NULL) {return;}if (pos<0 || pos>clist->size) {pos = clist->size;}//輔助指針變量clinknode* pcur = &(clist->head);for (int i = 0; i < pos; ++i) {pcur = pcur->next;}data->next = pcur->next;pcur->next = data;clist->size++;
}clinknode* Front_circlelinkist(circlelinkist* clist) {return clist->head.next;
}void RemoveByPos_circlelinkist(circlelinkist* clist, int pos) {if (clist == NULL) {return;}if (pos < 0 || pos >= clist->size) {return;}clinknode* pcur = &(clist->head);for (int i = 0; i < pos; ++i) {pcur = pcur->next;}clinknode* pnext = pcur->next;pcur->next = pnext->next;clist->size--;
}void RemoveByValue_circlelinkist(circlelinkist* clist, clinknode* data, COMPARE compare) {if (clist == NULL) {return;}if (data == NULL) {return;}clinknode* pper = &(clist->head);clinknode* pcur = &(clist->head);for (int i = 0; i < clist->size; ++i) {if (compare(pcur, data) == CIRCLELINKLIST_TRUE) {pper->next = pcur->next;break;}pper = pcur;pcur = pcur->next;}clist->size--;
}int Size_circlelinkist(circlelinkist* clist) {if (clist->size == 0) {return CIRCLELINKLIST_TRUE;}return clist->size;
}int IsEmpty_circlelinkist(circlelinkist* clist) {if (clist->size == 0) {return CIRCLELINKLIST_TRUE;}return CIRCLELINKLIST_FALSE;
}int Find_circlelinkist(circlelinkist* clist, clinknode* data, COMPARE compare) {if (clist == NULL) {return CIRCLELINKLIST_FALSE;}if (data == NULL) {return CIRCLELINKLIST_FALSE;}clinknode* pcur = clist->head.next;int flag = -1;for (int i = 0; i < clist->size; ++i) {if (compare(pcur, data) == CIRCLELINKLIST_TRUE) {flag = i;break;}pcur = pcur->next;}return flag;
}void Print_circlelinkist(circlelinkist* clist, PRINTNODE print) {if (clist == NULL) {return;}clinknode* pcur = clist->head.next;//for (int i = 0; i < clist->size * 3; ++i)for (int i = 0; i < clist->size; ++i) {/* if (pcur == &(clist->head)) {pcur = pcur->next;printf("========================\n");}*/print(pcur);pcur = pcur->next;}
}void Free_circlelinkist(circlelinkist* clist) {if (clist == NULL) {return;}
}//typedef struct PERSON {
//    clinknode node;
//    char name[64];
//    int age;
//}person;//void myprint(clinknode* data) {
//    person* p = (person*)data;
//    printf("name:%s,  age:%d \n", p->name, p->age);
//}
//
//int mycompare(clinknode* data1, clinknode* data2) {
//    person* p1 = (person*)data1;
//    person* p2 = (person*)data2;
//
//    if (strcmp(p1->name, p2->name) == 0 && p1->age == p2->age) {
//        return CIRCLELINKLIST_TRUE;
//    }
//    return CIRCLELINKLIST_FALSE;
//}

?

總結

以上是生活随笔為你收集整理的【C++】【六】约瑟夫问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。