问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

josephus问题数据结构C

发布网友 发布时间:2022-05-24 07:15

我来回答

1个回答

热心网友 时间:2023-10-08 16:41

/* 用顺序表解决josephus问题的算法*/

#include<stdio.h>
#include<stdlib.h>

#define MAXNUM 100
#define FALSE 0
#define TRUE 1

typedef int DataType;

struct SeqList {
int n; /* 存放线性表中元素的个数 n < MAXNUM */
DataType element[MAXNUM]; /* 存放线性表中的元素 */
};

typedef struct SeqList *PSeqList;

PSeqList createNullList_seq( void ) {
PSeqList palist = (PSeqList)malloc(sizeof(struct SeqList));
if (palist != NULL)
palist ->n = 0; /* 空表长度为0 */
else
printf("Out of space!!\n"); /* 存储分配失败 */
return palist;
}

/* 在palist所指顺序表中下标为p的元素之前插入元素x */
int insert_seq( PSeqList palist, int p, DataType x) {
int q;
if ( palist->n == MAXNUM ) { /* 溢出 */
printf("Seq-list overflow!\n");
return FALSE;
}
if ( p < 0 || p > palist->n ) { /* 不存在下标p */
printf("Index out of range! \n");
return FALSE;
}

for (q = palist->n - 1; q >= p; q--) /* 插入位置及之后的元素均后移一个位置 */
palist->element[q+1] = palist->element[q];
palist->element[p] = x; /* 插入元素x */
palist->n++; /* 元素个数加1 */
return TRUE;
}

/* 在palist所指顺序表中删除下标为p的元素 */
int delete_seq( PSeqList palist, int p ) {
int q;
if ( p < 0 || p > palist->n ) { /* 不存在下标p */
printf("Index out of range! \n");
return FALSE;
}

for (q = p; q < palist->n-1; q++) /* 被删除元素之后的元素均前移一个位置 */
palist->element[q] = palist->element[q+1];
palist->n--; /* 元素个数减1 */
return TRUE;
}

/* 求palist所指顺序表中下标为p的元素值 */
DataType retrieve_seq( PSeqList palist, int p ) {
if ( p >= 0 && p < palist->n ) /* 存在下标为p的元素 */
return palist->element[p];
printf("Index out of range! \n ");
return -1; /* 返回一个顺序表中没有的特殊值 */
}

int init_jlist(PSeqList slist, int n) {
int i,k;

if (slist == NULL) return FALSE;
if (n < 1 || n > MAXNUM) {
printf("Number of elements is out of range!\n");
return FALSE;
}
for ( i = 0; i < n; i++ )
k = insert_seq( slist, i, i+1);
}

void josephus_seq( int n, int s, int m) {
int s1, i, w;
PSeqList jlist;
s1 = s - 1;

jlist = createNullList_seq(); /* 创建空顺序表 */
if (jlist == NULL) return;
if (init_jlist(jlist, n) == FALSE) return;
/* 找出列的元素 */
for (i = jlist->n; i > 0; i--) {
s1 = ( s1 + m - 1 ) % i ;
w = retrieve_seq(jlist, s1); /* 求下标为s1的元素的值 */
printf("Out element %d \n", w); /* 元素出列 */
delete_seq(jlist, s1); /* 删除出列的元素 */
}

free(jlist);
}

/* ====================== */

void inputnsm(int* np, int* sp, int* mp) {
printf("\n please input the values(<100) of n = ");
scanf("%d", np);
printf("\n please input the values of s = ");
scanf("%d", sp);
printf("\n please input the values of m = ");
scanf("%d", mp);
}

int main( ){
int n,s,m;

inputnsm(&n, &s, &m);
josephus_seq(n, s, m);

getchar(); getchar();

return 0;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
圣斗士星矢正义传说攻略_圣斗士星矢正义传说新手攻略 圣斗士星矢正义传说怎么觉醒圣衣 圣衣玩法攻略 圣斗士星矢正义传说召唤石怎么获得 获取攻略一览 超市促销员手机上打卡迟到几分钟 在超市里打卡显示的公司是什么意思? 长鹿休闲度假农庄交通指南 求从容桂到长鹿农庄怎么坐车,详细,准确 形容神情的五字词语 女生内衣穿多久该扔掉 吴江离张家港有多远? 编写C语言算法,试编写一个求解Josephus问题的函数,用整数序列1, 2, 3, …… 约瑟夫环的算法原理 求解josephus问题的算法 什么是约瑟夫法则 用弹簧测力计探究动滑轮的省力特点的视频 弹力测力计的使用方法 如题 快影制作视频封面微信发却没有 sql group 后按分组数量的多少排序怎么写? 求助asp 中group by 的用法是什么啊!! 急!急!为什么有时用groupby结果还是显示同一个人的记录 sql group by 排序问题 sort by 和 group by 的区别是什么? SQL中的group by为什么是按照分组的第二个字段排序的呢? 怎样做网站优化,使其在搜索引擎中排名靠前。 男孩儿SEO博客:如何建立一个成功的品牌型的网站 设计单片机低频信号发生器,要求使用汇编语言,片选方式 基于单片机和DAC0832做的低频信号发生器 求基于单片机的低频信号发生器的原理图和程序 利用89C51单片机设计多功能低频函数信号发生器,能产生方波、正弦波、三角波等信号波形,信号的频率、幅度 今年箱包最新起名带琦字 急,大家帮忙给孩子取个名字,就差中间一个字,郭( )轩 怎样用vb实现约瑟夫环算法?? Josephus环算法的设计 流程图 描写解决约瑟夫问题的算法,按出列顺序组成新的表,然后再输出 C语言编程Josephus问题 约瑟夫环问题的C++算法,求用链表和递归两种方法,尽量详细! josephus problem 约瑟夫环 C语言 试用循环链表为存储结构,写一个约瑟夫问题的算法。 求c++程序设计“约瑟问题”的算法 约瑟夫难题的约瑟夫指的是哪位约瑟夫? 《假面骑士W》免费在线观看完整版高清,求百度网盘资源 没有壳的蛋能否放进微波炉呢? 鸡蛋(没脱壳)为什么不能放在微波炉里叮呢? 一兆瓦是多少度 60版2元人民币的价格表? 60版2元纸币编号6888888有收藏价值吗? M1的USB接口在接普通U盘的时候可以识别,在接移动硬盘的时候不能识别 吉利星越L雷神Hi·X油电混动版12月25日预售 最大续航1300公里 吉利星越L雷神Hi·X油电混动版月底开售 最大续航1300公里 我的移动硬盘无法读取怎么回事 我的世界有没有办法隐藏章鱼