实验三 约瑟夫环和集合的相关运算的设计和实现

2014 10 31

 

 

实验三 约瑟夫环和集合的相关运算的设计和实现

一.实验目的

利用线性表实现约瑟夫环和集合的判等、交、并和差等的运算,学会在实际问题下灵活运用它们。

二.问题描述

1.利用线性表实现约瑟夫环的解答(即实验课本P178设计实验中的约瑟夫环问题)。

2.用有序单链表实现集合的判等、交、并和差的运算(即实验课本P180设计实验中的用单链表实现集合的操作)。

三.实验要求

1.建立实验模型,确定存储结构;对任意n个人,密码为m,实现约瑟夫环问题;出圈的顺序可以依次输出,也可以用一个数组实现。

2.对集合中的元素用有序单链表进行存储;实现交、并、差等基本运算时,不能另外申请存储空间;充分利用单链表的有序性,要求算法有较好的时间性能。

 四.实验环境

PC微机

DOS操作系统或Windows操作系统

Turbo C程序集成环境或Visual C++程序集成环境

五.实验步骤及结果

1.建立一个空工程“约瑟夫环”,建立一个头文件“ysfring.”,如下:

#ifndef ysfring_H

#define ysfring_H

 

struct Node

{

      int data;

      Node*next;

};

class ysfring

{

public:

      ysfring(int n);

      ~ysfring();

      int Delete(Node*p);

      void ysfh(int m);

private:

      Node*ring;

};

#endif

 

 

 

 

2.在工程中新建一个源程序文件ysfring.cpp:

 

#include"ysfring.h"

#include<iostream>

using namespace std;

 

ysfring::ysfring(int n)

{

      ring=new Node;

      ring->data=1;

      ring->next =ring;

      Node*pre=ring;

      for(int i=2;i<=n;i++)

      {

             Node*p=new Node;

             p->data=i;

             p->next =ring;

             pre->next =p;

             pre=p;

      }

}

ysfring::~ysfring()

{

}

int ysfring::Delete (Node*p)

{

      Node*q=p->next ;

      int x=q->data ;

      p->next=q->next;

      delete q;

      return x;

}

void ysfring::ysfh (int m)

{

      Node*pre=ring;

      Node*p=ring->next;

      int count=2;

      while(p!=pre)

      {

             if(count==m)

             {

                    cout<<ysfring::Delete(pre)<<endl;

                    p=pre->next;

                    count=1;

             }

             else

             {

                    pre=p;

                    p=p->next;

                    count++;

             }

      }

      cout<<p->data<<endl;

      delete p;

}

 

 

3.在工程中新建一个源程序文件ysfring-main.cpp:

#include<iostream>

#include"ysfring.h"

using namespace std;

void main()

{

       int m,n;

       cout<<"请输入m(不小于2)的值:";

       cin>>m;

       cout<<"请输入n(人数)的值:";

       cin>>n;

       ysfring ysfh(n);

       ysfh.ysfh(m);

       cin.get();

}

4.运行结果为:

 

六.实验小结

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值