C语言程序存储结构:来回往复报数的顺序表实现

与约瑟夫环问题有区别,不是c++,通过顺序表存储结构实现来回往复报数问题,需要函数名和该函数实现的功能,同时还有算法描述,最好配一张结果图

顺序表代码如下:

img

#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);