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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

c语言 队列 游戏,循环队列实现约瑟夫游戏(C语言版)

發布時間:2024/4/11 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言 队列 游戏,循环队列实现约瑟夫游戏(C语言版) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

#include

#include

typedef struct node

{

int *base;

int front;

int rear;

}Node;

/*

思路:

*使用一個順序循環隊列來存放元素

*SIZE的值為元素個數+1,用一個空位來存放rear指針

*若未到數m,則將隊頭元素放在隊尾,并使front后移一位

*若數到m,則將其出隊,并輸出元素

*/

int SIZE=100;//定義全局變量SIZE,方便后面修改其值的大小

int InitNode(Node *p)

{

p->base=malloc(SIZE*sizeof(int));

if(!p->base)

return 0;

p->front=p->rear=0;

return 1;

}

int insert(Node *p,int e)

{

if(p->front==(p->rear+1)%SIZE)

return 0;

p->base[p->rear]=e;

p->rear=(p->rear+1)%SIZE;

return 1;

}

int delelem(Node *p,int e)

{

if(p->front==p->rear)

return 0;

e=p->base[p->front];

p->base[p->front]=0;

p->front=(p->front+1)%SIZE;

return e;

}

int test(Node *p,int i,int m)//進行約瑟夫游戲

{

int num,a,b,j;

if(i!=1)//若位置不從第一個開始,則調整頭指針和尾指針的位置,使它們始終相鄰(即相當于頭指針始終指向i,尾指針始終指向頭指針的前一個位置)

{

b=p->base[p->rear-1];//此處的p->rear-1是因為專門有一個空位置來存放尾指針

p->front=i-1;//使front指向第i個位置

for(j=0;j

{

p->base[p->rear]=p->base[(p->rear+1)%SIZE];

p->rear=(p->rear+1)%SIZE;

}

p->base[p->rear]=b;

}

while(1)

{

num=1;

while(num!=m)

{

num++;

a=delelem(p,a);//將隊頭元素取出,并使頭指針后移一位

insert(p,a);//將取出的隊頭元素插入到隊尾

}

a=delelem(p,a);//若num=m,則刪除該元素(即出隊)

printf("%d ",a);//輸出出隊的元素

if(p->front==p->rear)//若全部元素都已經出隊,則退出循環

break;

}

printf("\n");

return 1;

}

void print(Node *p)

{

int s;

if(p->front==p->rear)

{

printf("為空\n");

exit(0);

}

printf("如下:\n");

s=p->front;

while(s!=p->rear)

{

printf("%d ",p->base[s]);

s++;

}

printf("\n");

}

int main()

{

Node p;

int m,n,i,j;

printf("請輸入元素個數n:");

scanf("%d",&n);

printf("請輸入m(數到m就退出):");

scanf("%d",&m);

printf("請輸入i(從第i個位置開始數):");

scanf("%d",&i);

SIZE=++n;//SIZE=++n是為了空出一個位置來存放rear指針

InitNode(&p);

for(j=1;j<=n;j++)

{

insert(&p,j);//使n個元素入隊

}

//print(&p);

test(&p,i,m);

return 0;

}

標簽:隊列,約瑟夫,int,base,printf,front,C語言,rear,SIZE

來源: https://blog.csdn.net/qq_41032474/article/details/89715283

總結

以上是生活随笔為你收集整理的c语言 队列 游戏,循环队列实现约瑟夫游戏(C语言版)的全部內容,希望文章能夠幫你解決所遇到的問題。

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