引言 常见的约瑟夫环问题有用循环链表做的,有用数组做的,这里提供一个用数学公式做的,由此可见,很多计算机的问题如果最终用到数学的知识,时间复杂度会大大的降低 分析问题 首先我们对0到n-1删除第一个数进行分析,第一个被删除的数一定是序号为m-1的数,因为0号数了1,1号数了2,m-1号数了m,那么应...
分类:
编程语言 时间:
2015-05-03 20:28:43
阅读次数:
150
开始没看单向循环链表,感觉应该很简单,但实际上有几个概念不是很清楚:头结点,头指针,尾指针,尾节点???【个人理解】:头结点就是一个链表中实际存储数据的那个节点的前一个节点,这个节点不存储数据,只有一个指针指向第一个实际存储数据的节点(这个有效节点专业术语叫:首元素),这个节点就是头节点,指向头结....
分类:
其他好文 时间:
2015-05-03 15:55:21
阅读次数:
120
循环链表 循环链表(Circular Linked List):是一种头尾相接的链表。其特点是最后一个结点的指针域指向链表的头结点,整个链表的指针域链接成一个环。
从循环链表的任意一个结点出发都可以找到链表中的其它结点,使得表处理更加方便灵活。
循环链表的操作
对于单循环链表,除链表的合并外,其它的操作和单线性链表基本上一致,仅仅需要在单线性链表操作算法基础上作以下简单修改:...
分类:
其他好文 时间:
2015-04-28 18:25:44
阅读次数:
139
斐波那契堆是一个可合并最小堆,提取最小节点和删除节点的时间复杂度为o(logn),其他操作的平摊时间复杂度为o(1)表示方式:斐波那契堆以一个树结构表示,父节点有一个度数表示有几个子节点,同时保存指向自身的一个子节点的指针,子节点通过left和right形成一个循环链表连接所有同级节点如上图所示,借...
分类:
其他好文 时间:
2015-04-28 13:23:04
阅读次数:
302
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。
/**********************************************************************
* Copyright (c)2015,...
分类:
其他好文 时间:
2015-04-27 18:32:49
阅读次数:
129
问题描述:编号为1,2… n 的n 个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1 开始顺序报数,报到m 时停止报数,报m 的人出列,将他的密码作为新的m 值,从他的顺时针方向上的下一个开始重新从1 报数,如此下去,直至所有人全部出列为止,设计一个程序求出出列顺序。
基本功能要求:
1)利用单循环链表作为存储结构模...
分类:
其他好文 时间:
2015-04-23 00:04:39
阅读次数:
184
//带头节点
#include
using namespace std;
typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
}LNode,*LinkList;
void InitList(LinkList &L);
void CreateCyList(LinkList ...
分类:
其他好文 时间:
2015-04-22 20:41:56
阅读次数:
111
重学数据结构,看到循环链表这块,有好多东西刚刚想起来,小总结下。 无论哪种链表,总之新建一个哨位节点对于链表的插入操作时方便的,它保证了head节点。 对于边界节点要特殊处理,删除的时候,如果是链尾节点,需要将其前驱节点next域置为NULL,如果是哨位节点后的第一个需要重新设置head节点...
分类:
其他好文 时间:
2015-04-19 11:21:16
阅读次数:
125
约瑟夫环问题可以简单的使用数组的方式实现,但是现在我使用循环链表的方法来实现,因为上午看到一道面试题规定使用循环链表解决约瑟夫环问题。 什么是约瑟夫环? “约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;.....
分类:
编程语言 时间:
2015-04-18 21:49:24
阅读次数:
121