`

数组环、链表环、约瑟夫环

UP 
阅读更多
双向循环链表
struct node
{
  int id;
  int data;
  int status;
  struct node *up;
  struct node *next;
};

class DoubleLink
{
public:
  DoubleLink();
  ~DoubleLink();

  node* up();
  node* next();
  node* getCurrent();
  int   getSize();

  node* addNode(int size);
  void  deleteNode(int size); //  删除size个节点
  void  deleteLink();         //  删除整条

  void  show();
  void  showDesc();

private:
  node* current;
  void  creatLink();

};

DoubleLink::DoubleLink()
{
  creatLink();
}

DoubleLink::~DoubleLink()
{
  if (current != NULL)
    deleteLink();
}

void DoubleLink::creatLink()
{
  current = (node *)malloc(sizeof(node));

  current->up = current;
  current->next = current;
  current->id = 0;
  current->data = 0;
  current->status = 0;
}

void DoubleLink::deleteLink()
{
  current->up->next = NULL;
  while (current != NULL)
  {
    node *p = current->next;
    free(current);
    current = p;
  }
  current = NULL;
}

void DoubleLink::deleteNode(int size)
{
  if (getSize() <= size) deleteLink();
  node *beg = current->up;

  for (int i = 0; i < size; i++)
  {
    node *p = current->next;
    free(current);
    current = p;
  }

  current->up = beg;
  beg->next = current;
}

node* DoubleLink::addNode(int size)
{
  node *beg = current;
  node *end = current->next;

  for (int i = 0; i < size; i++)
  {
    node *mid = (node *)malloc(sizeof(node));
    beg->next = mid;
    mid->up = beg;
    beg = mid;
  }

  beg->next = end;
  end->up   = beg;

  return current;
}

int DoubleLink::getSize()
{
  int size = 1;
  node *p = current->next;

  while (p != current)
  {
    p = p->next;
    size++;
  }
  return size;
}

void DoubleLink::show()
{
  cout << "DoubleLink Show :" << endl;
  cout << "第0个: " << current->data << endl;

  node *p = current;
  p = p->next;

  for (int i = 1; p != current; i++)
  {
    cout << "第"<< i << "个: " << p->data << endl;
    p = p->next;
  }
}

void DoubleLink::showDesc()
{
  cout << "DoubleLink Show Desc :" << endl;
  cout << "第0个: " << current->data << endl;

  node *p = current;
  p = p->up;

  for (int i = 1; p != current; i++)
  {
    cout << "第"<< i << "个: " << p->data << endl;
    p = p->up;
  }
}


node* DoubleLink::up()
{
  return current->up;
}
node* DoubleLink::getCurrent()
{
  return current;
}
node* DoubleLink::next()
{
  return current->next;
}
分享到:
评论

相关推荐

    用数组和链表方法实现约瑟夫环

    (整数,正负均可),一开始任选一个正整数作为报数上限值m,从第一个人开 ... ...则逆时针)上的下一个人开始重新从1报数,如此下去,直至所有人全部出列。...用c中的数组和链表方法可以求出出列的顺序。

    分别用数组和链表解决约瑟夫环问题。 数组和链表.doc

    分别用数组和链表解决约瑟夫环问题。 数组和链表.doc

    约瑟夫环java纯数组模拟链表写法

    纯手写 java 数组模拟链表约瑟夫环问题 有很大更改空间 仅供参考

    数组表示循环链表约瑟夫环

    总的来说,使用数组表示循环链表来解决约瑟夫环问题是一种巧妙的方法,它结合了数组的高效访问和链表的循环特性,为编程挑战提供了一个有趣的解决方案。通过理解这个算法,不仅可以提升编程技巧,还能深入理解数据...

    约瑟夫环问题(数组实现,链表实现

    在约瑟夫环问题中,我们可以将数组的索引视为人的位置,数组的值表示每个人的状态(例如,是否已被淘汰)。初始化时,数组的每个元素值为1,表示人都在圈内。每次报数后,对应数组元素值为0,表示该人已经出局。当...

    约瑟夫环问题的链表和数组两种解法

    约瑟夫环问题的链表和数组两种解法 设有N个人围坐一圈并按顺时针方向从1到N编号,从第S个人开始进行1到M报数,报到第M个人时,此人出圈,再从他的下一个人重新开始1到M的报数,如此进行下去直到所有的人都出圈为止,...

    利用数组实现约瑟夫环

    数组实现约瑟夫环 数组实现约瑟夫环 数组实现约瑟夫环 数组实现约瑟夫环 数组实现约瑟夫环

    约瑟夫环问题(链表和数组)

    总的来说,约瑟夫环问题的解决方法展示了数组和链表两种数据结构的应用,同时也体现了动态规划和循环结构在解决问题中的重要性。通过理解和实践这两种实现,不仅可以提升编程技能,还能深入理解数据结构和算法在解决...

    用数组实现约瑟夫环的问题

    在现代计算机科学中,约瑟夫环常被用来作为数据结构和算法教学中的经典案例,尤其是用于理解循环链表、数组等数据结构的应用。 ### 一、约瑟夫环的基础概念 约瑟夫环本质上是一种数学问题,涉及到循环队列或循环...

    约瑟夫环(一位数组 结构体 循环链表)

    ### 约瑟夫环(一位数组 结构体 循环链表) #### 一、约瑟夫环问题概述 约瑟夫环问题是一个经典的计算机科学问题,涉及到数学中的组合和算法设计。该问题通常被描述为:n个人围成一圈,从第一个人开始报数(从1数...

    约瑟夫出圈问题的数组和链表实现方法

    cpp文件内采用两种方式实现经典的约瑟夫出圈问题,分别以数组方式和链表方式实现。同时,也可以实现直接输出最后的获胜者。

    数组表示循环链表的约瑟夫环的实验报告

    这个实验报告展示了如何用数组模拟循环链表解决约瑟夫环问题,同时也体现了问题求解的算法设计和实现能力。通过此实验,可以学习到数组操作、循环控制以及动态更新数据结构的方法。在实际编程中,类似的思路可以应用...

    约瑟夫环的链表实现——数据结构

    我们可以利用链表这种数据结构来解决约瑟夫环问题。 首先,让我们详细了解一下链表。链表是一种线性数据结构,与数组不同,它不连续存储元素。每个元素(节点)包含两部分:数据域(存储实际信息)和指针域(指向下...

    约瑟夫环一维数组、一维结构体数组、循环链表

    使用一维数组、一维结构体数组、循环链表三种方法完成;

    C++语言约瑟夫环,双向链表

    以下是一个简单的C++双向链表约瑟夫环的实现思路: 1. 定义链表节点结构体,包含数据域(序号)、前向指针和后向指针。 2. 创建链表,将所有参与者按顺序插入链表,形成环状。 3. 设置计数器和移除条件,通常是从1...

    用C++做的单循环链表简单表示约瑟夫问题

    7. **递归解决方案**:虽然这里提到的是使用单循环链表,但约瑟夫问题也可以用递归方式解决,通过模拟每个节点的生存情况,直到只剩下一个节点。 8. **优化策略**:对于大规模的数据,可以考虑使用更高效的数据结构...

    约瑟夫环链表表示的源代码

    在链表表示的约瑟夫环问题中,每个节点代表一个参与者,节点包含两个部分:一个是参与者的编号,另一个是指向下一个节点的指针。链表的头节点标志着报数的起点。当一个节点被剔除时,它的指针会被更新以指向被剔除...

    约瑟夫环问题,纯C代码

    约瑟夫环问题可以使用数组或链表来解决。 方法一:用数组表示 在使用数组表示的方法中,我们首先创建一个大小为n的数组a,将1到n的整数填充进去。然后,从最后一个元素开始遍历数组,每次淘汰第m个元素(根据模...

    约瑟夫问题的数组实现

    约瑟夫问题有多种解决方案 一种是数组方案 一种是链表方案 这种事数组,链表方案与数组方案哪个更优 需要读者去考虑

    约瑟夫环_约瑟夫环_

    在链表中,我们不需要像数组那样预先分配固定大小的空间,可以更灵活地添加和删除元素,这在处理约瑟夫环问题时尤其有利,因为我们可以方便地在链表中移除节点,而无需移动大量元素。 循环链表实现约瑟夫环的基本...

Global site tag (gtag.js) - Google Analytics