数据结构约瑟夫环实习报告源码

#include<cstdio>
int n,m;
struct LinkList
{
    int bianhao;
    int mima;
    struct LinkList* next;
}LinkHuan[50];
void duru()
{
    printf("请按编号顺序输入密码值:\n");

    for(int i=1;i<=n;i++){
        scanf("%d",&LinkHuan[i].mima);
        LinkHuan[i].bianhao=i;
        if(i==n) LinkHuan[i].next=&LinkHuan[1];
        else LinkHuan[i].next=&LinkHuan[i+1];
    }
}
void shuchu()
{

    printf("正确的出列顺序为:\n");
     LinkList* p=&LinkHuan[1];
    while(p->next!=p){
        for(int i=1;i<m-1;i++)
            p=p->next;
        printf("%d出列\n",p->next->bianhao);
        m=p->next->mima;
        p->next=p->next->next;
        if(m!=1)
        p=p->next;
    }
    printf("%d出列\n",p->bianhao);
}
int main()
{
    printf("请输入人的个数n和m的初始值:\n");
    scanf("%d%d",&n,&m);

    duru();

    shuchu();

    return 0;
}
/*
7 20
3 1 7 2 4 8 4
*/

这种是先循环m-2次,在看m的值循环第m-1次。

一定要注意m为1的情况。

#include<iostream>
#include<malloc.h>
using namespace std;

struct LinkList
{
   int data; //代表编号结点的数据
   int password;//代表密码结点的数据
   LinkList *next;//代表后一个结点的地址
};
int m,n,i,j;
LinkList *p,*q,*first;
void Printf()
{
    cout<<"请输入m的初始值 m:";
    cin>>m;
    cout<<"请输入人数 n:";
    cin>>n;
}
int ShuruMima()
{
    for(i=1;i<=n;i++)
   {
        if(i==1)
        {
            first=p=(LinkList*)malloc(sizeof(LinkList));
            if(p==0)
                return 0;
        }
        else
        {
            q=(LinkList*)malloc(sizeof(LinkList));
            if(q==0)
                return 0;
            p->next=q;
            p=q;
        }
        cout<<"请输入第 "<<i<<" 个人的密码: ";
        cin>>(p->password);
        p->data=i;
   }
}
void ShuChu()
{
    p->next=first; //让表尾指向表头形成循环链表
   p=first;
   cout<<"出列顺序为: ";
   for (j=1;j<=n;j++)
   {
        for(i=1;i<m;i++,p=p->next);
        m=p->password;
        cout<<p->data<<" ";
        p->data=p->next->data;
        p->password=p->next->password;
        q=p->next;
        p->next=p->next->next;
        free(q);
   }
   cout<<endl;
}
int main()
{
   Printf();

    ShuruMima();

    ShuChu();

   return 0;
}

这个是循环m-1次后,直接把下个节点移上来,相对简单。

写个报个弄了半天,感觉浪费了不少时间,还弄的费劲。

时间: 2024-11-01 16:59:58

数据结构约瑟夫环实习报告源码的相关文章

数据结构运动会分数统计实习报告源码

#include<cstdio> #include<cstring> int n,m,w; struct Student { char name[20]; int mingci; int score; }; struct Xiangmu { int bianhao; char xiangname[20]; Student students[50]; int xiangscore; }; struct School { char xiaoname[20]; int renshu; i

算法与数据结构 (八) HashMap源码

一  存储结构 static class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key; V value; Node<K,V> next;} transient Node<K,V>[] table; 内部存储的单元如上所示,整体上就是数组加链表的桶状结构. 二  put操作 put(key,value)内部调用的是putVal() 下面是源码  jdk1.8采用的是尾插法

JAVA上百实例源码以及开源项目

简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级.中级.高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情.执着,对IT的憧憬.向往!此时此景,笔者只专注Android.Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能.编辑音乐软件的朋友,这款实例会对你有所帮助.Calendar万年历 1个目标文件EJ

LinkedList源码分析--jdk1.8

JDK1.8 ArrayList源码分析--jdk1.8LinkedList源码分析--jdk1.8 LinkedList概述 ??1.LinkedList是用双向链表实现的集合,基于内部类Node<E>实现的集合.??2.LinkedList支持双向链表访问.克隆.序列化,元素有序且可以重复.??3.LinkedList没有初始化大小,也没有扩容机制,通过头结点.尾节点迭代查找. LinkedList数据结构 ??数据结构是集合的精华所在,数据结构往往也限制了集合的作用和侧重点,了解各种数据

Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例

概要  前面,我们已经学习了ArrayList,并了解了fail-fast机制.这一章我们接着学习List的实现类——LinkedList.和学习ArrayList一样,接下来呢,我们先对LinkedList有个整体认识,然后再学习它的源码:最后再通过实例来学会使用LinkedList.内容包括:第1部分 LinkedList介绍第2部分 LinkedList数据结构第3部分 LinkedList源码解析(基于JDK1.6.0_45)第4部分 LinkedList遍历方式第5部分 LinkedL

Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例

概要 上一章,我们学习了Collection的架构.这一章开始,我们对Collection的具体实现类进行讲解:首先,讲解List,而List中ArrayList又最为常用.因此,本章我们讲解ArrayList.先对ArrayList有个整体认识,再学习它的源码,最后再通过例子来学习如何使用它.内容包括:第1部分 ArrayList简介第2部分 ArrayList数据结构第3部分 ArrayList源码解析(基于JDK1.6.0_45)第4部分 ArrayList遍历方式第5部分 toArray

Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例

java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例 概要  和学习ArrayList一样,接下来呢,我们先对LinkedList有个整体认识,然后再学习它的源码:最后再通过实例来学会使用LinkedList.内容包括:第1部分 LinkedList介绍第2部分 LinkedList数

Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例

java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例 概要 上一章,我们学习了Collection的架构.这一章开始,我们对Collection的具体实现类进行讲解:首先,讲解List,而List中ArrayList又最为常用.因此,本章我们讲解ArrayList.先对ArrayLis

【转】Java 集合系列12之 TreeMap详细介绍(源码解析)和使用示例

概要 这一章,我们对TreeMap进行学习.我们先对TreeMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用TreeMap.内容包括:第1部分 TreeMap介绍第2部分 TreeMap数据结构第3部分 TreeMap源码解析(基于JDK1.6.0_45)第4部分 TreeMap遍历方式第5部分 TreeMap示例 转载请注明出处:http://www.cnblogs.com/skywang12345/admin/EditPosts.aspx?postid=3310928 第1部