
数据结构/算法
风中1匹狼
Live is fucking movie
展开
-
linux内核之链表操作解析【转】
(转自:http://www.cnblogs.com/majiangjiang/p/5528198.html)linux内核之链表操作解析本文只是对linux内核中的链表进行分析。内核版本是linux-2.6.32.63。文件在:linux内核/linux-2.6.32.63/include/linux/list.h。本文对list.h文件进行简要分析,有必要的地方还会以图进行说...转载 2018-04-01 22:34:14 · 209 阅读 · 0 评论 -
Linux2.6.32内核笔记(4)内核链表使用与分析【转】
(转自:https://blog.youkuaiyun.com/Deep_l_zh/article/details/48379599)摘要:描述了普通链表、内核链表以及他们之间的区别,介绍了对链表进行创建,插入,遍历和删除的操作,使用内核链表对足球队球员信息进行操作,详细对内核链表中的各个函数进行了分析。 一、链表的概念与种类 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素...转载 2018-09-21 00:05:13 · 167 阅读 · 0 评论 -
LRU算法 缓存淘汰策略【转】
(转自:https://www.cnblogs.com/Dhouse/p/8615481.html)四种实现方式LRU1.1.原理LRU(Leastrecentlyused,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。1.2.实现最常见的实现是使用一个链表保存缓存数据,详细...转载 2018-10-03 20:13:43 · 274 阅读 · 0 评论 -
约瑟夫环问题的两种解法(详解)【转】
(转自:https://blog.youkuaiyun.com/okasy/article/details/79503398)题目:Josephus有过的故事:39个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓。于是决定了自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀。然后下一个重新报数,直到所有人都自杀身亡为止。然而Jos...转载 2018-10-03 20:16:06 · 290 阅读 · 0 评论 -
解题笔记(10)——约瑟夫环问题【转】
(转自:https://blog.youkuaiyun.com/wuzhekai1985/article/details/6628491#commentBox)约瑟夫环问题的原来描述为,设有编号为1,2,……,n的n(n>0)个人围成一个圈,从第1个人开始报数,报到m时停止报数,报m的人出圈,再从他的下一个人起重新报数,报到m时停止报数,报m的出圈,……,如此下去,直到所有人全部出圈为止。当任意给...转载 2018-10-03 21:41:53 · 190 阅读 · 0 评论 -
约瑟夫环之二(用递归的思想解决Josephus问题)【转】
(转自:https://blog.youkuaiyun.com/wusuopubupt/article/details/18214999)原来写过一篇关于约瑟夫问题的链表实现解法,刷九度题到http://ac.jobdu.com/problem.php?pid=1356时,再次遇到这个问题,记下用递归思想解决约瑟夫问题的方法:初始情况: 0, 1, 2 ......n-2, n-1 (共n个...转载 2018-10-03 21:27:47 · 228 阅读 · 0 评论 -
判断一个链表是否为回文结构【转】
(转自:https://blog.youkuaiyun.com/cyuyanenen/article/details/51812425)题目:判断一个链表是否为回文结构。要求:时间复杂度为 O(n),空间时间复杂度为O(1)。思路分析:回文链表的特点就是对称,那么要判断是否回文,就可以用两个指针指向对称的节点,看它们的数据是否一样。由于是单向链表,不能同时用两个指针,从头尾向内部遍历取值比较。且本题...转载 2018-10-05 22:08:21 · 808 阅读 · 0 评论 -
判断一个单向链表是不是回文链(求链表中间节点、链表逆序)【转】
(转自:https://blog.youkuaiyun.com/less_cold/article/details/78253324)要求时间复杂度为O(n),空间复杂度为O(1)。方法一:遍历链表,把链表的数据链接成一个字符串,顺带反转链表,再遍历,得到一个新的字符串,两个字符串比较是否相等,相等就是回文链。方法二:采用快慢指针,快的一次走两步,慢的一次走一步,当快的为null时,慢的在中间位置...转载 2018-10-05 22:11:34 · 133 阅读 · 0 评论 -
单链表的逆置--普通循环方法(详细图解)【转】
(转自:http://www.cnblogs.com/dhls231/p/4773555.html)关于单链表的逆置,大家都很清楚有两种基本方法:(1)普通的循环的方法。(2)递归调用方法。今天正好研究这两种方法,发现很不理解代码这么写的具体的作用,诚如很多人所说,吃透这个还是要自己画一个详细的过程图。今天就给大家介绍一下(普通的循环方法)我学习下来的一些经验,如有不对之处还望大家一起交流。...转载 2018-10-05 23:17:55 · 12185 阅读 · 5 评论 -
单链表的就地逆置(头插法和递归法)【转】
(转自:https://blog.youkuaiyun.com/v_xchen_v/article/details/53067448)单链表的就地逆置是指辅助空间O(1)的逆置方法,有两种方法:普通循环(头插法重新建立带头节点的新链表)和递归。下面我们详细介绍这两种方法:方法一:头插法算法思想:逆置链表初始为空,表中节点从原链表中依次“删除”,再逐个插入逆置链表的表头(即“头插”到逆置链表中),使...转载 2018-10-06 00:21:47 · 3875 阅读 · 0 评论 -
单链表逆序,直接翻转指针!!(普通循环和递归)【转】
(转自:https://blog.youkuaiyun.com/lycnjupt/article/details/47103433)单链表逆序 第二个题目是很经典的“单链表逆序”问题。很多公司的面试题库中都有这道题,有的公司明确题目要求不能使用额外的节点存储空间,有的没有明确说明,但是如果面试者使用了额外的节点存储空间做中转,会得到一个比较低的分数。如何在不使用额外存储节点的情况下使一...转载 2018-10-06 14:50:58 · 215 阅读 · 0 评论 -
Linux 内核通用链表学习小结【转】
(转自:https://www.jb51.net/article/127696.htm)描述在linux内核中封装了一个通用的双向链表库,这个通用的链表库有很好的扩展性和封装性,它给我们提供了一个固定的指针域结构体,我们在使用的时候,只需要在我们定义的数据域结构体中包含这个指针域结构体就可以了,具体的实现、链接并不需要我们关心,只要调用提供给我们的相关接口就可以完成了。传统的链表结构...转载 2018-09-21 00:03:21 · 244 阅读 · 0 评论 -
linux内核中链表结构及使用方法【转】
(转自:https://blog.youkuaiyun.com/wangliang888888/article/details/51213751)声明:在学习linux 内核数据结构之链表部分时参考了http://blog.chinaunix.net/uid-14114479-id-2932024.html。Linux kernel里面从来就不缺少简洁,优雅和高效的代码,只是我们缺少发现和品味的眼光。...转载 2018-09-21 00:03:13 · 285 阅读 · 0 评论 -
Linux2.6.32内核笔记(5)在应用程序中移植使用内核链表【转】
(转自:https://blog.youkuaiyun.com/Deep_l_zh/article/details/48392935)摘要:将内核链表移植到应用程序中,实现创建,添加节点,遍历,删除的操作。 首先复习一下内核链表中经常使用的几个函数,在/include/linux/list.h中。 创建链表: <span style=...转载 2018-09-21 00:02:56 · 188 阅读 · 0 评论 -
深入分析 Linux 内核链表【转】
(转自:https://www.ibm.com/developerworks/cn/linux/kernel/l-chain/#icomments)深入分析 Linux 内核链表一、 链表数据结构简介链表是一种常用的组织有序数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重要实现方式。相对于数组,链表具有更好的动态性,建立链表时无需...转载 2018-04-01 22:46:31 · 258 阅读 · 0 评论 -
Linux内核【链表】整理笔记(2) 【转】
转自:http://blog.chinaunix.net/uid-23069658-id-4725279.html关于链表我们更多时候是对其进行遍历的需求,上一篇博文里我们主要认识了一下和链表操作比较常用的几个内核API接口,其入参全都是清一色的struct list_head{}类型。至于链表的遍历,内核也有一组基本的接口(其实都是宏定义的)供开发者调用。 首先是list_for...转载 2018-04-03 00:13:39 · 330 阅读 · 0 评论 -
Linux内核【链表】整理笔记(1)【转】
转自:http://blog.chinaunix.net/uid-23069658-id-4576255.html我们都知道Linux内核里的双向链表和学校里教给我们的那种数据结构还是些不一样。Linux采用了一种更通用的设计,将链表以及其相关操作函数从数据本身进行剥离,这样我们在使用链表的时候就不用自己去实现诸如节点的插入、删除、遍历等操作了。当然,Linux也是从2.1.x内核开始才对链表...转载 2018-04-03 00:14:54 · 203 阅读 · 0 评论 -
Linux内核数据结构之链表【转】
(转自:https://www.linuxidc.com/Linux/2016-12/137929.htm)Linux内核数据结构之链表1、前言 最近写代码需用到链表结构,正好公共库有关于链表的。第一眼看时,觉得有点新鲜,和我之前见到的链表结构不一样,只有前驱和后继指针,而没有数据域。后来看代码注释发现该代码来自linux内核,在linux源代码下include/Lish.h...转载 2018-04-01 22:52:01 · 169 阅读 · 0 评论 -
linux双向链表分析之list_del中的技巧【转】
(转自:https://blog.youkuaiyun.com/z2007b/article/details/6370383)linux内核的双向链表是比较经典的东西,网上分析链表的同志基本分析了99%,就差了1%。那就是list_del函数。先给出函数原型:#ifdef CONFIG_ILLEGAL_POINTER_VALUE# define POISON_POINTER_DELTA _AC(C...转载 2018-08-02 22:29:31 · 3711 阅读 · 1 评论 -
(数据结构)十分钟搞定时间复杂度(算法的时间复杂度)【转】
(转自:https://www.jianshu.com/p/f4cca5ce055a)我们假设计算机运行一行基础代码需要执行一次运算。int aFunc(void) { printf("Hello, World!\n"); // 需要执行 1 次 return 0; // 需要执行 1 次}那么上面这个方法需要执行 2 次运算int ...转载 2018-08-16 11:17:57 · 1347 阅读 · 0 评论 -
链表、头指针、头结点【转】
(转自:https://blog.youkuaiyun.com/zhenyusoso/article/details/6092843)图1为线性表(ZHAO, QIAN, SUN, LI, ZHOU, WU, ZHENG, WANG)的逻辑状态。头指针指示链表中第一个结点(即第一个数据元素的存储映像)的存储位置。同时,由于最后一个数据元素没有直接后继,则线性链表中最后一个结点的指针为“空”(NULL)。...转载 2018-09-20 12:17:49 · 217 阅读 · 0 评论 -
循环列表和双向列表【转】
(转自:http://xiangdonglee.iteye.com/blog/2240428)本文围绕以下两个部分展开:一、循环链表(circular linked list)二、双向链表(double linked list)一、循环链表(circular linked list)1. 概念将单链表中终端结点的指针端由空指针改为指向头结点,就使整...转载 2018-09-20 12:19:54 · 1764 阅读 · 0 评论 -
Linux 内核链表的使用及深入分析【转】
(转自:https://blog.youkuaiyun.com/BoArmy/article/details/8652776)一、重要知识点 1.内核链表和普通链表的区别 内核链表是一个双向链表,但是与普通的双向链表又有所区别。内核链表中的链表元素不与特定类型相关,具有通用性。 我们先来看一幅图kernel list展示的是内核链表的结...转载 2018-09-20 23:52:30 · 213 阅读 · 0 评论 -
Linux内核中链表的实现与应用【转】
(转自:http://blog.chinaunix.net/uid-27037833-id-3237153.html)链表(循环双向链表)是Linux内核中最简单、最常用的一种数据结构。 1、链表的定义 struct list_head { struct list_head *next, *prev;...转载 2018-09-20 23:54:30 · 201 阅读 · 0 评论 -
链表翻转的图文讲解(递归与迭代(直接循环翻转指针)两种实现)【转】
(转自:https://blog.youkuaiyun.com/FX677588/article/details/72357389)链表的翻转是程序员面试中出现频度最高的问题之一,常见的解决方法分为递归和迭代两种。最近在复习的时候,发现网上的资料都只告诉了怎么做,但是根本没有好好介绍两种方法的实现过程与原理。所以我觉得有必要好好的整理一篇博文,来帮忙大家一步步理解其中的实现细节。 我们知道迭代是从前往...转载 2018-10-06 15:11:36 · 634 阅读 · 0 评论 -
一、单链表逆序的方法
/*单链表逆序的三种方法(递归、直接翻转指针、头插)*/下文代码中的list_head 结构体为链表节点结构体。/*递归方法*/struct list_head *reverse(struct list_head *head){ struct list_head *new_head; /*判断异常 || 结束判断*/ if (!head ||...原创 2018-10-06 15:19:33 · 490 阅读 · 0 评论 -
怎么更好地终极理解递归算法【转】
(转自:https://blog.youkuaiyun.com/StruggleShu/article/details/51051140)递归真是个奇妙的思维方式。对一些简单的递归问题,我总是惊叹于递归描述问题和编写代码的简洁。但是总感觉没能融会贯通地理解递归,有时尝试用大脑去深入“递归”,层次较深时便常产生进不去,出不来的感觉。这种状态也导致我很难灵活地运用递归解决问题。有一天,我看到一句英文:“To ...转载 2018-10-07 13:02:36 · 425 阅读 · 0 评论 -
五、判断单链表是否有环,并找到环的入口点
(原理参考:https://www.jianshu.com/p/ef71e04241e4)/*判断链表有环,并返回环的入口点*/struct list_head *find_loop_point(struct list_head *head){ struct list_head *slow = head; struct list_head *fast = head; ...原创 2018-10-13 00:41:59 · 282 阅读 · 0 评论 -
内存,堆栈,到底为何物?【转】
(转自:https://www.cnblogs.com/5207/p/4267689.html)在网上看到了一篇关于面试的博客文,突然发现自己对于这个博主而言简直差的是十万八千里,他提到的许多技术我尽然一个也答不上来。于是就开始反思,还是要抱一抱佛脚。左看右看发现了内存这个面试的万恶之源。 说实话对于内存这种东西即使是一点也不了解的人也能写出许多的程序,但有一个现实问题就是面...转载 2018-10-13 00:43:04 · 159 阅读 · 0 评论 -
六、判断两个单向链表是否相交
判断两个单向链表是否相交,有两种情况,一种是两个不带环的单向链表相交,一种是两个带环的单向链表相交。情况1:两个不带环的单向链表相交/*判断两个不带环的单向链表是否相交。时间复杂度O(n),空间复杂度O(1)*//*思路:如果两个没有环的链表相交于某一节点,那么在这个节点之后的*//*所有节点都是两个链表共有的,如果它们相交,则最后一个节点一定是共有的*/int is_inters...原创 2018-10-13 10:50:07 · 458 阅读 · 0 评论 -
七、两个有序链表合并(递归方式)
/** * 合并两个有序链表,合并后依旧有序,当链表1是空链表时,合并结果就是链表2,但链表2是空链表时, * 合并结果是链表1;如果两都是空链表,合并结果就是空链表; * 比较两个链表的头结点,小的作为合并后的头结点,在剩余节点中,再次比较两个链表的头结点(采用递归)。 */struct list_head *merge_two_list(struct list_head *list...原创 2018-10-13 21:00:57 · 237 阅读 · 0 评论 -
排序算法的稳定是指,关键码相同的记录排序前后相对位置不发生改变【转】
(转自:https://www.nowcoder.com/questionTerminal/1ed2cf389c134a2ebc9d14ecdd8de3b0)下面哪种排序算法是不稳定的() A.插入排序 B.冒泡排序 C.快速排序 D.归并排序 答案:C现在分析一下常见的排序算法的稳定性,每个都给出简单的理由。 (1)冒泡排序...转载 2018-10-31 21:01:23 · 3845 阅读 · 0 评论 -
栈在表达式计算过程中的应用【转】
(转自:https://blog.youkuaiyun.com/believe_s/article/details/76473908)栈在表达式计算过程中的应用 :建立操作数栈和运算符栈。运算符有优先级。规则:自左至右扫描表达式,凡是遇到操作数一律进操作数栈。当遇到运算符时,如果它的优先级比运算符栈栈顶元素的优先级高就进栈。反之,取出栈顶运算符和操作数栈栈顶的连续两个操作数进行运算,并将...转载 2018-11-15 19:45:51 · 259 阅读 · 0 评论 -
“栈”的典型应用—表达式求值(C语言实现)【转】
(转自:https://blog.youkuaiyun.com/yuluows/article/details/7657944)我们都知道算术四则运算的运算规则是:先乘除,后加减。从左到右计算先算括号内,再算括号外表达式组成任何一个表达式都有操作数、运算符和界定符组成。操作数即可以是常量,也可以是被说明为变量或常量的标识符。运算符可以分为算术运算,关系运算和逻辑运算符。...转载 2018-11-15 20:25:07 · 1130 阅读 · 0 评论 -
使用栈实现表达式求值(C++)【转】
(转自:https://blog.youkuaiyun.com/BestFSQ/article/details/55823298)算法基本思想如下:(1)首先将操作数栈opval设为空栈,而将'#'作为运算符栈opter的栈底元素,这样的目的是判断表达式是否求值完毕。(2)依次读入表达式的每个字符,表达式须以'#'结尾,若是操作数则入栈opval,若是运算符,则将此运算符c与opter的栈顶...转载 2018-11-15 21:15:35 · 2690 阅读 · 1 评论 -
基于数组和链表两种方式实现栈(java)【转】
(转自:https://blog.youkuaiyun.com/u012922219/article/details/52624341)实现栈的两种方式,基于数组实现和基于链表实现。1.stack接口public interface StackADT { //入栈操作 public void push(Object element); //出栈操作 public Object...转载 2018-11-16 11:13:08 · 227 阅读 · 0 评论 -
数组、链表、栈、队列和STL【转】
(转自:https://www.cnblogs.com/tpys/p/3568528.html)数组数组是一种最基本的数据结构,它是内存上的一块连续存储空间。正因如此数组的随机访问很方便。但数组也有其固有的限制,大小分配后不能改变。STL中的数组STL中的Array是静态数组模板,就是我们所说的数组。使用方法如下。std::array<int, 3>...转载 2018-11-16 13:23:48 · 285 阅读 · 0 评论 -
单链表是否有环及环入口点【转】
(转自:https://www.jianshu.com/p/ef71e04241e4)1.限制与要求不允许修改链表结构。 时间复杂度O(n),空间复杂度O(1)。2.思考2.1判断是否有环如果链表有环,那么在遍历链表时则会陷入死循环,利用这个特征,我们可以设计这样的算法。使用一个slow指针,一个fast指针。 slow指针一次往后遍历以1个节点,fast指针一次往后遍历...转载 2018-10-12 22:45:29 · 96 阅读 · 0 评论 -
什么时候用堆,什么时候用栈?【转】
(转自:https://blog.youkuaiyun.com/fish43237/article/details/42749785)参考文章:《c++面试题之内存分配》一、首先,回顾一下c、c++的内存分配机制。一个C、C++程序编译时内存分为5大存储区:堆区、栈区、静态区(全局区)、文字常量区(储存字符串常量)、程序代码区(存放二进制程序)下面主要阐述前面三个。(1)静态存储...转载 2018-10-12 09:06:33 · 2232 阅读 · 0 评论 -
内存中的堆栈和数据结构堆栈区别【转】
(转自:https://www.jianshu.com/p/b42fd8293b4f)内存中的堆栈和数据结构堆栈不是一个概念,可以说内存中的堆栈是真实存在的物理区,数据结构中的堆栈是抽象的数据存储结构。1.内存中的堆栈内存空间在逻辑上分为三部分:代码区、静态数据区和动态数据区,动态数据区又分为栈区和堆区。代码区:存储方法体的二进制代码。高级调度(作业调度)、中级调度(内存调度)、低级...转载 2018-10-12 00:59:52 · 158 阅读 · 0 评论