#include
#include
#define N 10
typedef struct node{
int data;
struct node * next;
}ElemSN;
ElemSN*Createlink(int a[],int n){
int i;
ElemSN*h=NULL,*p,*t;
for(i=0;i p=(ElemSN*)malloc(sizeof(ElemSN)); p->data=a[i]; if(!h) h=t=p; else p->next=h; t=t->next=p; } return t; }//創(chuàng)建單向循環(huán)鏈表 ElemSN*Fun(ElemSN*t,int s){ int i; ElemSN*h2=NULL,*t1,*h; //t1是行鏈表的尾結(jié)點(diǎn)指針,h是建立新鏈表的結(jié)點(diǎn)(出約瑟夫環(huán)的結(jié)點(diǎn)),h2新鏈表的頭結(jié)點(diǎn) while(t-t->next){//截止條件是環(huán)中只剩下一個(gè)結(jié)點(diǎn),循環(huán)結(jié)束直接出環(huán) for(i=0;i t=t->next; //每隔幾個(gè)結(jié)點(diǎn)出環(huán)S,指針t的下一個(gè)加點(diǎn)就是要出環(huán)的結(jié)點(diǎn) h=t->next; //h表示要出環(huán)的結(jié)點(diǎn) t->next=h->next;//出環(huán) h->next=NULL;//指針域?yàn)榭諗噫湥霏h(huán)的結(jié)點(diǎn)和約瑟夫環(huán)沒有聯(lián)系 if(!h2)//新鏈表為空時(shí),頭結(jié)點(diǎn)h2,尾結(jié)點(diǎn)t1,在同一個(gè)結(jié)點(diǎn)上 h2=t1=h; else//新鏈表頭結(jié)點(diǎn)不空,出環(huán)的結(jié)點(diǎn)h掛在新鏈表的尾結(jié)點(diǎn)上,尾結(jié)點(diǎn)t1后移,繼續(xù)標(biāo)志鏈表的尾結(jié)點(diǎn) t1=t1->next=h; } if(!h2)//環(huán)中只剩下一個(gè)結(jié)點(diǎn),直接出環(huán),判斷新鏈表為空,說明約瑟夫環(huán)中只有一個(gè)結(jié)點(diǎn) h2=t;//環(huán)中的結(jié)點(diǎn)直接為新鏈表的頭結(jié)點(diǎn) else{ t1->next=t; //新鏈表頭結(jié)點(diǎn)不空,出環(huán)的結(jié)點(diǎn)直接掛到新鏈表的尾結(jié)點(diǎn)上, t->next=NULL;//指針域?yàn)榭眨駝t新鏈表中有為結(jié)點(diǎn)的next是自己,在尾結(jié)點(diǎn)上出現(xiàn)一個(gè)環(huán)(循環(huán)) } return h2; } void Printlink(ElemSN*h){ ElemSN*p; for(p=h;p;p=p->next) printf("%2d\n",p->data); } int main(void){ int a[N]={1,2,3,4,5,6,7,8,9,10}; int s; ElemSN*head; head=Createlink(a,9); printf("請(qǐng)輸入s="); scanf("%2d",&s); head=Fun(head,s); Printlink(head); } 另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
當(dāng)前名稱:單向循環(huán)鏈表(約瑟夫環(huán))-創(chuàng)新互聯(lián)
文章來源:http://weahome.cn/article/ccdcii.html