c语言循环链表,解决约瑟夫问题

问题描述

c语言循环链表,解决约瑟夫问题

c语言循环链表,一开始用头结点作为开端,创建一连串的节点,到最后一个节点的next指向head的下一个节点可以么。代码如下,虚心求教。
#include
#include
#define N 6
#define M 5
struct people
{
int num;
struct people *next;
};
struct people *head,*last,*p,*history,*now;
int i,j;
int main()
{
head=malloc(sizeof(struct people));
head->num=0;
head->next=NULL;
last=head;
history=head;

for(i=1;i<N+1;i++)
{
    p=malloc(sizeof(struct people));
    p->num=i;
    p->next=NULL;
    last->next=p;
    last=p;
}

history=head;
now=head->next;
while(now!=NULL)
{
    printf("%d",now->num);
    history=now;
    now=now->next;
}

last->next=head->next;

history=last;
now=last->next;
while(now->next!=NULL)
{
    for(j=1;j<M;j++)
    {
        history=now;
        now=now->next;
    }
    p=now->next;
    free(now);
    now=p;
    history->next=now;
}
printf("%d",now->num);
return 0;

}

解决方案

http://wenku.baidu.com/link?url=Z0SmAl2nrSyavg-aqnS6l5qDPGhA6M4h88gvzrqt-0lYUS_D0BHz9P3vovgMeAX6RQ4ajOLVFvs02baWDtv4qqTtVwavfQKkogAJEV-EwYS

解决方案二:

既然是循环链表,那你最后一个就指向开头的那个就行了

时间: 2024-09-18 11:48:08

c语言循环链表,解决约瑟夫问题的相关文章

c语言-用链表解决约瑟夫问题,我要怎么写主函数啊?

问题描述 用链表解决约瑟夫问题,我要怎么写主函数啊? 解决方案 #include<stdio.h> #include <stdlib.h> typedef struct node//节点存放一个数据和指向下一个节点的指针 { int data; struct node* pnext; } Node; Node *link_create(int n)//创建n个节点的循环链表 { //先创建第1个节点 Node *p,*q,*head; int i ; p = (Node *)mal

利用简洁的C语言代码解决跳台阶问题与约瑟夫环问题_C 语言

跳台阶问题 题目: 一个台阶总共有 n 级,如果一次可以跳 1 级,也可以跳 2 级. 求总共有多少总跳法,并分析算法的时间复杂度. 分析: 也是比较基础的题目,通过递归可以方便的求解 代码实现如下(GCC编译通过): #include "stdio.h" #include "stdlib.h" int function(int n); int main(void) { int tmp; tmp = function(5); printf("%3d\n&q

C++循环链表之约瑟夫环的实现方法_C 语言

本文实例形式展示了C++实现循环链表中约瑟夫环的方法,分享给大家供大家参考之用.具体方法如下: 主要功能代码如下: #include <iostream> using namespace std; typedef struct student { int data; struct student* next; }node,*LinkList; //约瑟夫环 void printfList(LinkList head){ LinkList p=head; if (head!=NULL) { do

c语言-M只猴子选大王的另一种问法,怎样用C语言编程解决啊,急求

问题描述 M只猴子选大王的另一种问法,怎样用C语言编程解决啊,急求 M只猴子选大王,选举办法如下:所有猴子按1...M编号围坐一圈,从第1号开始按顺序1,2...N报数,报到N的猴子退出到圈外,再从下一个猴子开始继续1,2...N报数,报到N的猴子退出圈外,如此循环,直至圈内只剩下一只猴子时就说大王,给定M和最后出圈的者的编号S,求最小的N 解决方案 约瑟夫环问题 解决方案二: 来自百度: #include #include #define n 19 #define m 4 typedef st

c语言-算法训练 最大的算式 用C语言怎么解决

问题描述 算法训练 最大的算式 用C语言怎么解决 问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大.因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号.例如: N=5,K=2,5个数字分别为1.2.3.4.5,可以加成: 1*2*(3+4+5)=24 1*(2+3)*(4+5)=45 (1*2+3)*(4+5)=45 -- 输入格式 输入文件共有二行,第一行为两个有空格隔开的整数,表示N和K,其中

c#-link能不能解决约瑟夫环的问题?

问题描述 link能不能解决约瑟夫环的问题? link能不能解决约瑟夫环的问题?C#+link去解决??? 解决方案 http://www.cnblogs.com/ziyiFly/archive/2008/09/10/1288105.html 解决方案二: http://tieba.baidu.com/p/2432947278 解决方案三: 你参考一下c语言版本的 #include 8 #include 9 10 // 链表节点 11 typedef struct _RingNode 12 {

python超简单解决约瑟夫环问题

  本文实例讲述了python超简单解决约瑟夫环问题的方法.分享给大家供大家参考.具体分析如下: 约瑟环问题大家都熟悉.题目是这样的.一共有三十个人,从1-30依次编号.每次隔9个人就踢出去一个人.求踢出的前十五个人的号码: 明显的约瑟夫环问题,python实现代码如下: ? 1 2 3 4 5 6 a = [ x for x in range(1,31) ] #生成编号 del_number = 8 #该删除的编号 for i in range(15): print a[del_number]

php解决约瑟夫环示例

 这篇文章主要介绍了php解决约瑟夫环示例,需要的朋友可以参考下 约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题.在计算机编程的算法中,类似问题又称为约瑟夫环.又称"丢手绢问题".)   猴子一群,都带着号码的,站好了一圈,数到m的枪毙,剩下的接着数.如此往复,死剩下的一个就疯了    代码如下: <?php function killMonkeys($monkeys, $m){     $k = $m;     while (count($monkey

win7更新kb3045645后无法安装语言包解决办法

  win7|win8.1更新kb3045645后无法安装语言包解决办法来啦!微软5月补丁日到来,包括安全更新在内的各种Win7/Win8.1/Win10等系统的补丁如约而至.本月的安全更新级别较高,而且各个系统均有涉及,用户应该抓紧时间安装. 提醒:不过有个非安全更新却不必急于安装,那就是KB3045645. 这项更新作用于UAC(用户账户控制),安装后会增加这一安全机制的敏感程度,表现在一旦发现有自定义的 .sdb空间数据库文件被创建,就会马上提示用户. 本来加强UAC的安全性不是坏事,但k