鱼C论坛

 找回密码
 立即注册
查看: 2785|回复: 0

[学习笔记] 数据结构与算法-线性表13

[复制链接]
发表于 2022-4-12 19:02:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
//编号为1-N的N个人按顺时针方向围坐一圈,每人持有一个密码(正整数,可自由输入),
//开始人选一个正整数作为报数上限值M,从第一个人按顺时针方向自1开始顺序报数,
//报到M时停止报数。报M的人出列,将他的密码作为新的M值,从他开始继续顺时针报数,
//如此循环下去,直到所有人全部出列为止。



typedef struct node
{
        int num;
        int        data;
        struct node *next;
}node;

node *create(int n)//创建n个数据结构
{
        node *p=NULL,*head,*temp;
        int i=1;
        head=(node*)malloc(sizeof(node));//申请内存
        p=head;

        if(0!=n)
        {
                while(i<=n)
                {
                        temp=(node *)malloc(sizeof(node));
                        temp->num=i++;
                        temp->data= rand() % 50+1;//循环列表初始化,每个人的M随机赋值0—99
                        p->next=temp;
                        p=temp;
                }
                temp->next=head->next;//最后一个指向第一个结点,最开始的舍去
        }
        free(head);
        return temp->next;
}
void main()
{
        node *temp;
        int i,n=50,temp_M;//50个人

        node *p=create(n);
        printf("num\tM\n");
        for(i=0;i<50;i++)
        {
                printf("%d\t%d\n",p->num,p->data);
                p=p->next;
        }
        printf("\n\n");


        temp_M=p->data;

        while(p!=p->next)
        {
                for(i=1;i<temp_M-1;i++)
                {
                        p=p->next;
                }
                temp_M=p->next->data;
                printf("%d->",p->next->num);
                temp=p->next;//删除第temp_M个结点
                p->next=temp->next;

                free(temp);
                p=p->next;
        }
        printf("%d\n",p->data);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 12:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表