1.单向循环链表
区分单向链表和单向循环链表:单向循环链表的尾指针指向头结点。
2.单向循环链表的基本操作
#include
#include
#define NULL 0
typedef struct node {
int data;
struct node *next;
}ElemSN;
ElemSN * creat_link(int ms); //创建一个单向循环链表
...
分类:
其他好文 时间:
2014-07-22 23:50:48
阅读次数:
264
1.带表头的单向链表
(1)不带表头的单向链表在实现插入和删除时必须区分头结点和其他节点的处理。
(2)使用带表头的单向链表的好处:不用考虑头结点的单独处理。
表头节点:数据域没有值,指针域指向单向链表中数据域含值的第一个结点。
2.代表头的单向链表的基本操作
#include
#include
#define NULL 0
typedef struct node {
int ...
分类:
其他好文 时间:
2014-07-20 10:31:16
阅读次数:
250
给出几组比赛的胜负情况。判断最后的排名。根据题意这就是一个明显的拓扑排序问题了。
注意
如果因为可能的排名有多种情况,这时要保证编号小的在前。
题目输入的数据可能有重复边
拓扑排序
首先统计每个结点的入度。将度为0的结点编号放入队列(此题放入优先队列中)中。
然后进行循环:
取出队头结点,视作边的起点。
然后“删除与该点相连的边”,代码就是将这个图中的该边另一个结点(即终点)的入度减一;
如果减一以后,终点的入度变为了0,那么将终点的编号入队列。
判断队列是否为空,若不空,则回到1...
分类:
其他好文 时间:
2014-07-19 02:25:55
阅读次数:
175
UVA 11927 - Games Are Important
题目链接
题意:给定一个有向图,结点上有一些石头,两人轮流移动石头,看最后谁不能移动就输了,问先手还后手赢
思路:求出每个结点的sg函数,然后偶数个石头结点可以不用考虑,因为对于偶数情况,总步数肯定能保证是偶数,所以只要考虑奇数情况的结点
代码:
#include
#include
#include ...
分类:
其他好文 时间:
2014-07-18 21:32:27
阅读次数:
224
前言:有网友建议分析下LinkedHashMap的源码,于是花了一晚上时间研究了下,分享出此文,希望大家相互学习。LinkedHashMap的源码理解起来也不难(当然,要建立在你对HashMap源码有较好理解的基础上)。
LinkedHashMap简介
LinkedHashMap是HashMap的子类,与HashMap有着同样的存储结构,但它加入了一个双向链表的头结点,将所有put到LinkedHashmap的节点一一串成了一个双向循环链表,因此它保留了节点插入的顺序,可以使节点的输出顺序...
分类:
编程语言 时间:
2014-07-17 10:48:52
阅读次数:
284
分别以两个(带头结点的)循环有序链表表示集合A和B,完成这两个集合并集的操作:代码如下:#includetypedef struct LNode { int data ; struct LNode *next ;}LNode , *LinkList ;void union_OL(L...
分类:
其他好文 时间:
2014-07-16 19:26:37
阅读次数:
211
非常简单,就当练个手吧 1 //单链表逆序问题,其实很容易的,就是把指针指向给变一下,注意的几个问题 2 //(1)如果就一个元素,不算头结点,直接返回 3 //(2)注意头结点最后要单独处理问题 4 #include 5 using namespace std; 6 7 typedef str.....
分类:
其他好文 时间:
2014-07-14 16:05:19
阅读次数:
192
将线性表以带头结点的单链表作存储结构,偶数放前,奇数放后;代码如下:#includetypedef struct LNode { int data ; struct LNode *next ;}LNode , *LinkList ;int main() { LinkList...
分类:
其他好文 时间:
2014-07-14 10:34:37
阅读次数:
189
引言:
单链表存在一个问题,当我们想要访问某个结点的前一个结点时,要从头结点开始访问。显然这样的操作是令人烦躁的。为此,双向链表出现,它比单链表多出了一个指针域,指向前一个结点。这样,对于双向链表,就可以方便的从后向前遍历链表了。但多出的问题是对于插入和删除结点的开销要增加一倍。
分析描述:
双向链表存储结构图为:,用结构体表示如下:
...
分类:
其他好文 时间:
2014-07-09 11:44:17
阅读次数:
189
通常我们所说的删除链表的某个结点,是彻底删除该结点的空间,而要这么做就必须知道其前驱结点。这里的想法是,链表中存储的val是同类型的,只要将该结点的val内容删除就可以了。那么就可以用该结点的后继结点的值覆盖当前结点,然后删除其后继结点,而对于其后继结点而言,该结点就是前驱。
这里只需要考虑当前删除的结点是否为last node 就可以了,至于是否是头结点,这种情况是可以归为同一种情况的,只是参...
分类:
其他好文 时间:
2014-07-08 13:58:04
阅读次数:
197