与约瑟夫环问题有区别,不是c++,通过顺序表存储结构实现来回往复报数问题,需要函数名和该函数实现的功能,同时还有算法描述,最好配一张结果图
顺序表代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//顺序链表最大元素个数
#define MAXLEN 100
//定义顺序链表
typedef struct
{
int a[MAXLEN];
int length; //实际长度
}LinkList;
int main()
{
int i, cnt = 1, n,out;
LinkList list;
printf("请输入总人数和报数:");
scanf("%d %d", &list.length,&out);
n = list.length;
//初始化顺序表,将状态设置为未出队 ,0表示还未出队
for (i = 0; i < n; i++)
list.a[i] = 0;
//开始出队
printf("出队:");
while (n)
{
for (i = 0; i < list.length; i++)
{
if (list.a[i] == 0) //未出队的报数
{
if (cnt % out == 0) //报out的出队
{
cnt = 1; //从1开始报数
n--;
list.a[i] = 1; //1表示已出队
printf("%d ", i + 1); //显示出队的编号
}
else
cnt++;
}
}
}
return 0;
}
顺序表一般可以分为:
1.静态顺序表:使用定长数组存储。
2.动态顺序表:使用动态开辟的数组存储。
//初始化
void SeqListInit(SL *ps);
//破坏顺序表
void SeqListDestory(SL *ps);
//头插
void SeqListPushFront(SL *ps, SeqListDataType data);
//头删
void SeqListPopFront(SL *ps);
//尾插
void SeqListPushBack(SL *ps, SeqListDataType data);
//尾删
void SeqListPopBack(SL *ps);
//任意位置插入
void SeqListInsert(SL *ps, int pos, SeqListDataType data);
//任意位置删除
void SeqListErase(SL *ps, int pos);
//扩容
void SeqListExpan(SL *ps);
//打印
void SeqListPrint(const SL *ps);
//查找
void SeqListFind(SL *ps, SeqListDataType data);