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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构一:链表(约瑟夫问题)

發布時間:2025/3/12 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构一:链表(约瑟夫问题) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一:約瑟夫問題

  • 約瑟夫問題-循環鏈表典型應用

  • 例題:
    n 個人圍成一個圓圈,首先第 1 個人從 1 開始一個人一個人順時針報數,報到第 m 個人,令其出列。然后再從下一 個人開始從 1 順時針報數,報到第 m 個人,再令其出列,…,如此下去,求出列順序。
  • 假設:
    m = 8,n=3

二:代碼

1 main.c

/* main.c */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "CircleLinkList.h"#define M 8 #define N 3 //創建數據結構體 typedef struct MYNUM{CircleLinkNode node;int val; }My_Num; //打印回調 void my_Print(CircleLinkNode*data){My_Num *num=(My_Num*)data;printf("%d ",num->val); } //比較回調 int my_Compare(CircleLinkNode*data1,CircleLinkNode*data2){My_Num *num1=(My_Num*)data1;My_Num *num2=(My_Num*)data2;if(num1->val==num2->val){return CIRCLELINKLIST_TRUE;}else{return CIRCLELINKLIST_FALSE;} } int main(void){ //初始化CircleLinkList *clist=_Init_List();//創建數據My_Num num[M];for(int i=0;i<M;i++){num[i].val=i+1;_Insert_List(clist,i,(CircleLinkNode*)&num[i]);//插入}//打印_Print_List(clist,my_Print);printf("\n ");int index=1;CircleLinkNode* Current_Node=clist->head.next;//輔助指針 while(_Size_List(clist)>1){//有三個就輸出if(index==N){//_Print_List(clist,my_Print);My_Num *num=(My_Num*)Current_Node;printf("%d ",num->val);//將其釋放//按照值刪除CircleLinkNode* Current_Next=Current_Node->next;//緩存下一結點 _DeleteByValue_List(clist,Current_Node,my_Compare); Current_Node= Current_Next;//循環到頭結點就跳過if(Current_Node==&(clist->head)){Current_Node=Current_Node->next;} index=1;} Current_Node=Current_Node->next;//循環到頭結點就跳過if(Current_Node==&(clist->head)){Current_Node=Current_Node->next;} index++;}if(_Size_List(clist)==1){My_Num *num=(My_Num*)_Front_List(clist);printf("%d ",num->val);}else{printf("error!");}printf("\n");//釋放內存_Free_List(clist);return 0; }

2 CircleLinkList.h

/* CircleLinkList.h 實現機制為linux鏈表(企業鏈表) */ #ifndef _CIRCLELINKLIST_H_ #define _CIRCLELINKLIST_H_ #include <stdio.h> #include <stdlib.h>#define CIRCLELINKLIST_TRUE 1 #define CIRCLELINKLIST_FALSE 0//創建小節點 typedef struct CIRCLELINKNODE{struct CIRCLELINKNODE *next; }CircleLinkNode; //鏈表 typedef struct CIRCLELINKLIST{CircleLinkNode head;//head頭結點,是結構體 int size;//鏈表數據個數 }CircleLinkList; //值刪除回調函數 typedef int (*COMPARE)(CircleLinkNode *data1,CircleLinkNode *data2); //打印回調函數 typedef void (*PRINT)(CircleLinkNode *data);//初始化 CircleLinkList *_Init_List(); //插入 void _Insert_List(CircleLinkList *clist,int pos,CircleLinkNode *data); //按照位置刪除 void _DeleteByPos_List(CircleLinkList *clist,int pos); //按照值刪除 void _DeleteByValue_List(CircleLinkList *clist,CircleLinkNode *data,COMPARE my_Compare); //返回第一個數據 CircleLinkNode *_Front_List(CircleLinkList *clist); //獲得鏈表長度 int _Size_List(CircleLinkList *clist); //打印 void _Print_List(CircleLinkList *clist,PRINT my_Print); //查找 int _Find_List(CircleLinkList *clist,CircleLinkNode *data,COMPARE my_Compare); //釋放內存 void _Free_List(CircleLinkList *clist); #endif

3 CircleLinkList.c

/* CircleLinkList.c */ #include "CircleLinkList.h"//初始化 CircleLinkList *_Init_List(){CircleLinkList *clist=(CircleLinkList *)malloc(sizeof(CircleLinkList));clist->head.next=&(clist->head);clist->size=0;return clist; } //插入 void _Insert_List(CircleLinkList *clist,int pos,CircleLinkNode *data){if(clist==NULL){return ;}if(pos<0||pos>clist->size){pos=clist->size;//默認往尾部插 }CircleLinkNode *pCurrent=&(clist->head);for(int i=0;i<pos;i++){//尋找前一結點 pCurrent=pCurrent->next; }//插入數據data->next=pCurrent->next;pCurrent->next=data;clist->size++; }//打印 void _Print_List(CircleLinkList *clist,PRINT my_Print){if(clist==NULL){return ;}CircleLinkNode *pCurrent=(clist->head.next);for(int i=0;i<clist->size;i++){if(pCurrent==&(clist->head)){//如果打印多次,跳過頭指針 pCurrent=pCurrent->next; }//打印my_Print(pCurrent);pCurrent=pCurrent->next; } } //按照位置刪除 void _DeleteByPos_List(CircleLinkList *clist,int pos){if(clist==NULL){return ;}if(pos<0||pos>=clist->size){return ;}CircleLinkNode *pCurrent=&(clist->head);for(int i=0;i<pos;i++){//尋找前一結點 pCurrent=pCurrent->next; }//將這個要刪除結點緩存CircleLinkNode *DelNode= pCurrent->next;pCurrent->next=DelNode->next;//釋放刪除結點空間,/*if(DelNode!=NULL){free(DelNode);DelNode=NULL;} */clist->size--; } //按照值刪除 void _DeleteByValue_List(CircleLinkList *clist,CircleLinkNode *data,COMPARE my_Compare){if(clist==NULL){return ;}if(data==NULL){return ;}CircleLinkNode *PreCurrent= &(clist->head);//數據的前一個 CircleLinkNode *pCurrent=PreCurrent->next;//查找到相對應的數據 for(int i=0;i<clist->size;i++){if(my_Compare(pCurrent,data)==CIRCLELINKLIST_TRUE){//匹配成功 PreCurrent->next=pCurrent->next;clist->size--;break;}//沒有匹配到//PreCurrent->next= pCurrent;//pCurrent->next=PreCurrent->next; PreCurrent=pCurrent;pCurrent=PreCurrent->next;}} //返回第一個數據 CircleLinkNode *_Front_List(CircleLinkList *clist){return clist->head.next; } //獲得鏈表長度 int _Size_List(CircleLinkList *clist){return clist->size; } //查找 int _Find_List(CircleLinkList *clist,CircleLinkNode *data,COMPARE my_Compare){if(clist==NULL){return -1;}if(data==NULL){return -1;}CircleLinkNode *pCurrent=(clist->head.next);int pos=-1;for(int i=0;i<clist->size;i++){if(my_Compare(pCurrent,data)==CIRCLELINKLIST_TRUE){//找到了 pos=i;break;}pCurrent=pCurrent->next;}return pos; } //釋放內存 void _Free_List(CircleLinkList *clist){if(clist!=NULL){free(clist);clist=NULL;} }

3:結果顯示

1.編譯環境

centos 3.10.0-862.el7.x86_64 gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)

2.編譯命令

gcc main.c CircleLinkList.c -std=c99./a.out

3.結果

1 2 3 4 5 6 7 83 6 1 5 2 8 4 7

總結

以上是生活随笔為你收集整理的数据结构一:链表(约瑟夫问题)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产伦精品一区二区三区千人斩 | 好屌妞视频这里有精品 | 久热精品在线视频 | 中文字字幕一区二区三区四区五区 | 男女视频免费 | 精品无码黑人又粗又大又长 | 美女视频网址 | 国产精品500部 | 国产精品一区二区三区高潮 | 一本色道久久hezyo无码 | 人人妻人人爽一区二区三区 | 国产欧美日韩精品一区 | 色老妹 | 日本www网站 | 亚洲国产精品成人无久久精品 | 久久精品视屏 | 日韩激情| 欧美成人精品欧美一级乱黄 | 国产淫视频 | 小sao货水好多真紧h无码视频 | 国内精品久久99人妻无码 | 免费三级网 | 欧美色资源 | 蜜桃又黄又粗又爽av免 | 国产又粗又黄 | 男女啪啪网站免费 | 成人做爰66片免费看网站 | 免费在线亚洲 | 中文字字幕一区二区三区四区五区 | 久久综合99 | 狠狠噜噜 | 精品视频在线观看一区二区 | 国产拍拍拍拍拍拍拍拍拍拍拍拍拍 | 免费a v网站 | 91精品视频网 | 国产污片在线观看 | 成人免费av网站 | 成人三级做爰av | 久草资源在线观看 | 在线观看日韩视频 | 欧美一区二区免费电影 | 欧美专区在线视频 | 黄色大网站| 五月婷婷激情综合 | 国产无码日韩精品 | 粉嫩av蜜桃av蜜臀av | 爱爱网视频 | 日韩国产精品一区二区 | 亚洲中文字幕无码爆乳av | 日韩三级网 | 91免费在线观看网站 | 欧美日韩加勒比 | 熟女国产精品一区二区三 | 日本免费一二三区 | 精品欧美一区二区精品少妇 | 国产香蕉97碰碰碰视频在线观看 | 欧美一区二区三区色 | 欧美成人dvd在线视频 | 亲切的金子片段 | 国产成人午夜高潮毛片 | av加勒比在线 | 蓝牛av | 黄色私人影院 | 91婷婷在线 | 影音先锋人妻啪啪av资源网站 | 国产精品视频成人 | 国产在线精品一区二区三区 | 最新精品国产 | a级在线免费观看 | 亚洲天堂网在线观看 | 欧美无吗 | 伊人手机视频 | 波多野结衣亚洲天堂 | 69av视频| 北条麻妃99精品青青久久 | 超碰caoprom | 人成免费| 伊人网综合网 | 特黄特色大片免费 | 99热日本| 国产精品乱码一区 | 亚洲乱码国产乱码精品精剪 | 九九精品在线观看视频 | 最新激情网站 | 榴莲视频黄色 | 波多一区 | av激情四射| 尤物视频免费在线观看 | 久久爱影视i | 青青草视频在线看 | 久久最新视频 | 久久综合久久久久 | 亚洲狼人天堂 | 欧美性三级 | 久久久www成人免费毛片 | 国产亚洲精品精品国产亚洲综合 | 欧美日韩成人一区二区在线观看 | 亚洲国产情侣 | 日韩一区三区 |