码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-05-26 16:07:08      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

#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次后,直接把下个节点移上来,相对简单。

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

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

标签:

原文地址:http://blog.csdn.net/a197p/article/details/46008931

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!