當前位置:編程學習大全網 - 源碼下載 - c語言中的約瑟夫環問題

c語言中的約瑟夫環問題

/*josephus_clist.c*/

/*約瑟夫問題:循環鏈表的實現*/

# include & ltstdio.h & gt

# include & ltstdlib.h & gt

#定義假0

#定義真1

typedef int數據類型;/*將元素類型定義為整數,也可以定義為其他類型*/

結構節點;/*單鏈表節點類型*/

typedef結構節點* PNode/*節點指針類型*/

Struct Node /*單鏈表節點結構*/

{數據類型信息;

PNode鏈接;

};

typedef結構節點*鏈表;

typedef LinkList * PLinkList

int init_clist( PLinkList pclist,int n)

/*用1,2初始化*pclist中所示的循環表,...,n */

{ PNode p,q;

int I;

q = (PNode)malloc( sizeof( struct節點));

if ( q == NULL)返回(FALSE);

* PC list = q;

q->;info = 1;

q->;link = q;

if (n==1)返回(TRUE);

for(I = 2;我& ltn+1;i++)

{ p =(PNode)malloc(sizeof(struct Node));

if (p==NULL)返回(FALSE);

p->;info = I;

p->;link = q-& gt;鏈接;

q->;link = p;

q = p;

}

返回(真);

}

void josephus _ clist(PLinkList pclist,int s,int m)

{PNode p,pre

int I;

p = * pclist

/*查找第s個元素*/

如果(s==1)

{ pre = p;

p = p-& gt;鏈接;

而(p!=*pclist)

{

pre = p;

p = p-& gt;鏈接;

}

}

else for(I = 1;我& lts;i++)

{

pre = p;

p = p-& gt;鏈接;

}

而(p!= p->;Link) /*當鏈表中的節點數大於1時*/

{ for(I = 1;我& ltm;I++) /*找到第m個節點*/

{ pre = p;

p = p-& gt;鏈接;

}

printf(" out元素:%d \n ",p-& gt;info);/*輸出此節點*/

If (*pclist ==p) /*當此節點為第壹個節點時,刪除時需要特殊處理*/

* PC list = p-& gt;鏈接;

pre->;link = p-& gt;鏈接;/*刪除此節點*/

免費(p);

p = pre->鏈接;

}

printf(" out元素:%d \n ",p-& gt;info);/*輸出最後壹個節點*/

* pclist = NULL

免費(p);

}

主( )

{ LinkList jos _ clist

int n,s,m;

/*輸入所需參數的值*/

做{

printf("\n請輸入n = ")的值;

scanf("%d ",& ampn);

} while(n & lt;1);

做{

printf("請輸入s = ")的值;

scanf("%d ",& amps);

} while(s & lt;1);

做{

printf("請輸入m = ")的值;

scanf("%d ",& ampm);

} while(m & lt;1);

if(init _ clist(& amp;何塞_克裏斯特,北)

約瑟夫·克裏斯特(& ampjos_clist,s,m);

其他

printf("空間不足!\ n ");

}

  • 上一篇:Android 中的 TextPaint
  • 下一篇:急求壹財務管理系統(C++)
  • copyright 2024編程學習大全網