• 大小: 0.4M
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: 其他
  • 标签: 其他  

资源简介

ysfGame.zip

资源截图

代码片段和文件信息

#include
using namespace std;

class Node         //创建双向循环链表的结点类
{
      friend class Doublelist;    //作为友元类
      friend void DoubleJoseph();  //作为友元函数来调用
      
      public:
             Node();
             int data;
             Node *prior;
             Node *next;
       private:
};

class Doublelist     //双向循环链表类
{
      friend void DoubleJoseph();    //作为友元函数来调用
      public:
             void Creatlist(Doublelist &L);   //双向循环链表
             int getLength(Doublelist &L);    //用于获取双向链表的长度
             Doublelist();
      private:
              Node *Head;
};



Node::Node()     //Doublelist类的构造函数初始化结点数据
{
            data = 0;
            prior = NULL;
            next = NULL;
}



Doublelist::Doublelist()    //Doublelist类的构造函数初始化链表数据
{
                        Head = NULL;
}




void Doublelist::Creatlist(Doublelist &L)   //建立双向循环链表
{
     cout << “\t\t请输入双向生死游戏的总人数N:“;
     int n;
     cin >> n;
     Node *p*s;
     for(int i=1;i<=n;i++)
     {
             p=new Node;     //构造头结点
             p->data=i;
             p->next=NULL;  
             if(i==1)
             {
                  L.Head=p; 
                  p->prior=NULL;
                  s=L.Head;
             }
             else
             {
                  s->next=p;
                  p->prior=s;
                  s=s->next;
             }  
     }
     s->next = L.Head;
     L.Head->prior = p;
}



int Doublelist::getLength(Doublelist &L)   //获取双向链表的长度
{
    Node *p = L.Head;
    int count = 0;
    while(p->next != L.Head)
    {
                  count++;
                  p = p->next;
    }
    count++;
    return count;
}



void DoubleJoseph()   //实现约瑟夫双向生死游戏
{
     Doublelist L;   //定义链表
     L.Creatlist(L);   //建立链表
 Node *p*q*r;  //定义指针
     p = L.Head;    //定义头结点

     cout << “\t\t请输入游戏开始的位置S:“;  //输入开始报数位置S
     int s;
     cin >> s;
     cout << “\t\t请输入正向的死亡数字M:“;   //输入正向死亡位置M
     int m;
     cin >> m;  
     cout << “\t\t请输入逆向的死亡数字W:“;   //输入逆向死亡位置W
     int w;
     cin >> w;
     cout << “\t\t请输入剩余的生者人数“;     //输入剩余生存人数K
     int k;
     cin >> k;
     cout << endl;
 
     int t = 1;    //初始定义t值
     while( k     {
          if(t%2)   //判断正向逆向
          { 
               for(int j=0; j  {
                         q=p;
                         p=p->next;
                 }
               if(p == L.Head)     //元素定位出列 
                 {
                         r=p;
                         L.Head = p->next;  //指向下一元素结点
                         q->next = p->next;         //依次更换元素结点
                         p->next->prior = q;
                         p = p->next;
                 }             
              else   
  {
                     r = p;
                     q->next = p->next;
                     p->next->prior = q;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        5121  2017-06-30 21:08  ysf\ysfg.cpp
     文件      477930  2019-01-08 19:24  ysf\报告.docx

评论

共有 条评论