数据结构-双端链表双端链表与传统的链表非常相似,但是它有一个新的特性:对最后一个链接点的引用,就像对第一个链接点的引用一样,对最后一个链结点引用像在表头一样,当然可以仍然可以像普通链表一样在表尾插入一个链接点方法是遍历整个链表至到到达表尾,双端链表,跟双向链表是不一样的,下节在详细说双向链表。pac...
分类:
其他好文 时间:
2014-12-17 12:13:47
阅读次数:
140
STL中常用的数据结构:
[1] stl中stack、queue默认的底层实现为deque结构。
[2] deque:用map管理多个size大小的连续内存块,方便头尾插入。
[3] vector:变长动态数组,每次增大1.5倍,删除元素时不释放空间。
[4] priority_queue底层默认采用vector向量O(nlogn)。
[5] list:双向链表容器。
[6]...
分类:
其他好文 时间:
2014-12-16 11:52:16
阅读次数:
234
二叉搜索树的结点有2个指针,分别指向左右孩子,双链表的每个结点也有2个指针,分别指向前后结点,所以在不创建新结点,只调整指针指向时可以将二叉搜索树变成双向链表;又由于二叉搜索树在中序遍历时是有序的,所以可以采用中序处理二叉搜索树调整指针指向将其变成有序双向链表。为了简化指针移动操作,我们让左孩子为前...
分类:
其他好文 时间:
2014-12-16 11:21:59
阅读次数:
165
struct list_head结构体是linux实现数据结构双向链表的基础。其定义:struct list_head { struct list_head *next, *prev;};可见链表里面的成员还是链表,每个链表都指向了前面和后面的链表。一般将struct list_head作为一...
分类:
其他好文 时间:
2014-12-13 00:55:42
阅读次数:
362
原文:C语言双向链表 今天写了点双向链表的各种操作,写插入的时候费了点时间,不过,现在看来还是值得耗费那点时间去写的,这种小东西应该能信手拈来才行啊。 1 /*双向链表*/ 2 #include 3 #include /*strcmp(const char *,const char *) retur...
分类:
编程语言 时间:
2014-12-12 10:02:21
阅读次数:
230
题目大意:你有一行盒子,从左到右编号为1~n,现在有4种操作。
1 X Y 表示把X盒子移到Y盒子的左边
2 X Y 表示把X盒子移到Y盒子的右边
3 X Y 表示交换X盒子和Y盒子的位置
4 将盒子顺序全部翻转过来
最后问进行m次操作后,奇数位置的盒子编号和为多少
思路:最好的方法使用双向链表。这里用数组的方法模拟,用Left[i]和Right[i]
分别表示编号为i的盒子左边和右边的盒子编号(为0表示没有盒子)。通过模拟
链表连接的方法改变连接顺序。...
分类:
编程语言 时间:
2014-12-11 10:30:15
阅读次数:
235
原文: 一步一步写算法(之双向链表) 【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 前面的博客我们介绍了单向链表。那么我们今天介绍的双向链表,顾名思义,就是数据本身具备了左边和右边的双向指针。双向链表相比较单向链表,主要有下面几个特点: (1...
分类:
编程语言 时间:
2014-12-11 10:06:23
阅读次数:
226
原文: 一步一步写算法(之排序二叉树) 【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 前面我们讲过双向链表的数据结构。每一个循环节点有两个指针,一个指向前面一个节点,一个指向后继节点,这样所有的节点像一颗颗珍珠一样被一根线穿在了一起。然而今天...
分类:
编程语言 时间:
2014-12-11 10:01:54
阅读次数:
157
实现单链表排序 时间复杂度要求为 nlogn
由于是单链表,用快速排序无法往前面遍历(双向链表可以考虑),这里我们用到归并排序
代码如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(in...
分类:
其他好文 时间:
2014-12-10 22:52:35
阅读次数:
258
题目大意:题意很明确,就是约瑟夫环。不过从第W个位置开始计数1,数S个
位置,然后出环,输出。
思路:用STL里边的string存放小孩的名字。用list双向链表模拟约瑟夫环。
注意:
string里边clear();用来清除所有字符。
list里push_back(i);用来将编号i放入list
begin();指向第一个元素的位置
end();指向最后一个元素后边的位置
list::iterator it;迭代器用来指向报数编号。
find(first,last,value);用来在区间[fi...
分类:
其他好文 时间:
2014-12-06 18:13:16
阅读次数:
237