E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
数据结构与算法学习
数据结构与算法学习
之路:迷宫问题——回溯思想找出所有路径
今天小伙伴和我说之前写的那个迷宫问题有些问题,我就改了改,感觉之前写的东西思路也不清晰,也比较乱,就重新写了一篇……别在意哈~一、迷宫问题描述:给定一个迷宫,以及起点和终点,通过设计算法,找到一条可以到达终点的路径。解决以后,想办法找到最短路径和所有路径。二、解决方法:1、找到一条可达的路径并不难,只要设定方向,然后每个点都去找一个可以走的方向一直向可行方向走就是了。2、找到最短路径。要找到最短路
u012403246
·
2014-12-01 12:00
数据结构与算法学习
之路:背包问题的贪心算法和动态规划算法
一、背包问题描述:有N种物品和一个重量为M的背包,第i种物品的重量是w[i],价值是p[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包重量,且价值总和最大。二、解决方法:1、贪心算法:贪心算法基于的思想是每一次选择都作当前最好的选择,这样最后的结果虽然不一定是最优解,但是也不会比最优解差很多。举个例子说明可能好懂一些:一帮基友去聚餐,菜是一份一份上的,我每一次夹菜都只夹牛肉/海鲜吃,
u012403246
·
2014-11-30 08:00
数据结构与算法学习
之路:LIS——最长递增序列的动态规划算法和二分思想算法
一、最长递增序列的问题描述:求一个整数序列的最长递增子序列,子序列不要求是连续的。例如:Input:4,6,9,6,7,6,3,8,10;Output:5二、解决方法:1、用动态规划的方法解决。从问题我们可以知道,我们最终得到的最长递增子序列,其任意一段子序列也是对应序列中的最长子序列。这样说可能不好理解,就以上面的例子来说:最长子序列为:4,6,7,8,10。在这段子序列的子序列里选一个,例如:
u012403246
·
2014-11-27 14:00
数据结构与算法学习
之路:二分插入排序
一、什么是二分插入排序?设在数据表中有一个元素序列v[0],v[1],v[2]......v[n].其中v[0],v[1],v[2]......v[i-1]是已经排好序的元素。在插入v[i]。利用折半搜索寻找v[i]的插入位置。同时,二分插入排序是一种稳定的排序。当n较大时,总排序码比较次数比直接插入排序的最差情况好得多,但比最好情况要差,所元素初始序列已经按排序码接近有序时,直接插入排序比二分插
u012403246
·
2014-11-21 09:00
数据结构与算法学习
之路:直接插入排序
一、什么是直接插入排序:第一趟比较前两个数,然后把第二个数按大小插入到有序表中;第二趟把第三个数据与前两个数从前向后扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。简单来说,就是把待排序的数组,分为有序组和无序组。假设数组有n个元素,初始有序组只有一个元素,无序组有n-1个元素。然后不断拿无序组的第一个元素与有序组的元素进行对比,将这个元素插入到
u012403246
·
2014-11-20 17:00
数据结构与算法学习
之路:Prim算法和Kruskal算法
一、Prim算法和Kruskal算法是什么?Prim算法:首先把图中所有顶点看作未被访问的点的点集——>随意挑选其中一个点,并把该点放入已被访问过的点的点集——>不断的寻找与被访问点集中的点距离最短的,并且未被访问过的点,加入被访问点集——>当所有点都进入被访问点集,则获得图的最小生成树。Prim算法查找过程:Kruskal算法:获得图中所有具有权值的边,从中挑选权值最小的边,若边会与已挑选边形成
u012403246
·
2014-11-12 20:00
数据结构与算法学习
之路:优化的冒泡排序
冒泡排序:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。冒泡排序由于简洁、易懂,一般是初学者的入门算法。但事实上,冒泡排序在效率并不高,特别是在所得数组基本有序的情况下。但冒泡排序
u012403246
·
2014-11-12 20:00
数据结构与算法学习
之路:检查表达式的括号是否匹配——栈
一、什么是栈?栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。简单来说,栈的特点就是:后进先出。二、栈的基本操作:1、出栈;2、入栈;3、检查栈是否为空;4、检查栈是否已满;三、括号
u012403246
·
2014-11-11 21:00
数据结构与算法学习
之路:简单的哈希表实现(链地址法解决冲突)
一、哈希表是什么? 散列表(Hashtable,也叫哈希表),是根据关键码值(Key-Value)而直接进行访问的数据结构。 也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表
u012403246
·
2014-11-11 21:00
数据结构与算法学习
之路:二分查找的非递归和递归算法
一、何为二分查找?二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。二分查找的基本思想是:在有序序列中,通过与序列段中间的数作比较,减少多余的比较(例如key #include #defineSUCESS1 #defineFALSE0 #defineMAXSIZE10 intBi
u012403246
·
2014-11-11 20:00
数据结构与算法学习
之路:简单的电话簿实现——单向链表
作为正在学数据结构的小菜鸟,想在这分享一些数据结构学习的历程……代码都是自己写的,没有太多的参考网上和书上的代码(自己实现以后会去看网上和书上的代码,看看自己哪里可以写的更好)大部分都是平常的作业和实验,自己花时间写的……大牛们别嘲讽哈~下面进入正题:链表:关于链表的基本概念如下(并不需要背下来,但是要能用自己的语言把它表达出来):链表(Linkedlist)是一种常见的基础数据结构,是一种线性表
u012403246
·
2014-10-18 10:00
zy19982004--
数据结构与算法学习
七:归并排序
一. 排序方法归并排序(MergeSort)是利用"归并"技术来进行排序。归并是指将若干个已排序的子文件合并成一个有序的文件。给定数组data[0...n],若data[0...m]和data[m+1...n]两个子数组均已经有序。可以先将两个子数组合并到一个临时数组tmpAr[0...n]里面。然后将tmpAr复制到原data数组里面。合并过程合并过程中,设置i,j和p三个指针,其初值分别指向这
这些年
·
2014-06-12 22:00
数据结构与算法学习
之路:迷宫问题
迷宫问题在游戏里非常常见,例如仙剑系列就有各种虐人的迷宫…………刚好有个老师布置了迷宫问题给舍友,出于兴趣我就自己查阅一些知识把他简单的实现了。废话不多说,下面进入正文:一、阅读需要的预备知识:栈以及栈的操作(入栈、出栈)、C语言基础、BFS(广度优先搜索算法)和DFS(深度优先搜索算法)以及邻接矩阵的概念二、实现思路:1、既然要解决迷宫问题,那么我们肯定需要用一种方式把迷宫给存储起来。在这里采用
u012403246
·
2014-06-11 21:00
数据结构与算法学习
--- 1
TableADTvectordoublelinkedlistStackADT(LIFO,lastinfirstout)QueueADT(FIFO,firstinfirstout)
Amos_Xia
·
2014-03-24 21:00
数据结构与算法学习
笔记——链表部分实现(数组形式)
/****************************************************************************************************** *Copyright(C); *Filename: *Author: *Version: *Date: *Description: ******************************
copica
·
2013-10-15 23:00
数据结构与算法学习
笔记——堆排序
/********************************************************************** *Copyright(C): *Filename:heapsort.c *Author: *Version: *Date: *Description: ****************************************************
copica
·
2013-10-08 12:00
数据结构与算法学习
笔记——队列
/******************************************************** *Copyright(C): *Filename:queue.c *Author: *Version: *Date: *Description: ********************************************************/ #include #
copica
·
2013-10-03 20:00
数据结构与算法学习
--链表
链表分为单链,双链和循环链表,链表C语言实现://单链 typedefstructNodeType { charelem; NodeType*next; }Node; //双链 typedefstructDuobleNodeType { charelem; NodeType*next; NodeType*prev; }DoubleNode; 1.单链表反转。以微软的一
·
2012-11-12 15:00
数据结构
算法
数据结构与算法学习
七:归并排序
一. 排序方法 归并排序(Merge Sort)是利用"归并"技术来进行排序。归并是指将若干个已排序的子文件合并成一个有序的文件。 给定数组data[0...n],若data[0...m]和data[m+1...n]两个子数组均已经有序。 可以先将两个子数组合并到一个临时数组tmpAr[0...n]里面。 然后将tmpAr复制到
zy19982004
·
2012-11-08 22:00
数据结构与算法
数据结构与算法学习
六:堆排序
一. 定义 任何关键字data[0...n]都可以组成一个完全二叉树。堆就是一种特殊的二叉树:树中任一非叶结点的关键字均大于等于(或小于等于)其左右孩子(若存在)结点的关键字。大于等于称为大根堆;小于等于称为小根堆。 二.排序方法(以大根堆为例)先将初始文件data[1..n]建成一个大根堆,此堆为初始的无序区。将关键字最大的记录data[0](即堆顶)和无序区的最后一个记录data[n]交换,
zy19982004
·
2012-11-07 22:00
数据结构与算法
数据结构与算法学习
五:快速排序
一. 排序方法 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。 分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。原排序数组data[0...n]。 分解:在data[l
zy19982004
·
2012-11-07 11:00
数据结构与算法
数据结构与算法学习
四:希尔排序
一.排序方法 先取一个小于n的整数increment作为第一个增量,把文件的全部记录分成increment个组。所有距离为increment的倍数的记录放在同一个组中。先在各组内进行直接插人排序。 取第二个增量increment(小于1中的increment)重复上述的分组和排序,直至所取的增量increment=1,即所有记录放在同一组中进行直接插入排序为止。 希尔排序实质上是
zy19982004
·
2012-11-06 17:00
数据结构与算法
数据结构与算法学习
三:直接插入排序
一.排序方法 基本思想:被排列的数组data[0...n]。初始时,data[0]自成1个有序区,无序区为data[1..n];从i=1起直至i=n为止,依次将data[i]插入当前的有序区data[0..i-1]中,生成含n个记录的有序区。 将待插入元素data[i]从右向左依次与有序区中记录data[j](j=i-1,i-2,…,0
zy19982004
·
2012-11-06 16:00
数据结构与算法
数据结构与算法学习
二:直接选择排序
一.排序方法 被排列的数组data[0...n],选定当前位置i=0作为最小值下标position;在data[i+1...n]区间每个元素与data[position]比较,记录新position,最后交换data[i]和data[position]。这样最小的元素就到了当前位置了。 当前位置i+1,重复1... 二.动画演示 &nbs
zy19982004
·
2012-11-04 17:00
数据结构与算法
数据结构与算法学习
一:冒泡排序
一.排序方法 将被排列的数组data[0...n]垂直排列,每个元素data[i]看作是一个气泡,气泡的重量就是data[i]的值。 从最下面一个气泡data[n]开始扫描,比较其与上一个气泡data[n-1]的重量,data[n] < data[n-1]则交换;然后比较data[n-1]与data[n-1-1]...一轮下来,最轻的气泡跑到了最上面data[0]的位置。 重
zy19982004
·
2012-11-04 11:00
数据结构与算法
数据结构与算法学习
心得
数据结构与算法的内容还有很多。但是由于时间的关系,我并没有深入下去,尤其是查找时用到的平衡二叉树、B_和B+树,还有红黑树等等。希望以后有时间可以继续看。首先,简要回顾一下学习的内容。简单的说,是“3+2”:3中数据结构:线性结构、树、图;2种算法:查找、排序。其中线性结构又可以分为顺序表、链表、队列、栈,它们在平时有着更加广泛的应用。而树、图则在解决一些特定的算法时更加管用。其次,数据结构并不是
thefutureisour
·
2012-09-04 09:21
书评
视频评价
由《数据结构与算法分析-C语言描述》开始的
数据结构与算法学习
之旅
本人是电信出身,爱编程,但由于专业原因,没有经历系统的计算机相关课程的学习,包括数据结构。最近闲暇之余,看到《数据结构与算法分析-C语言描述》一书,顿生好感,把以前零零碎碎的数据结构、算法知识一一展现,系统而全面,相当不错的一本书。
wwang196988
·
2011-07-19 15:00
数据结构与算法学习
之查找技术
查找是对数据、文件处理时常使用的一种操作。查找算法主要分为两类,静态查找和动态查找。静态查找是指查找过程中标的结构始终不会发生变化,而动态查找表会发生变化,通常伴随着插入和删除操作。一般衡量查找算法的优越性主要看平均查找长度和最大查找长度。一、静态查找表1.顺序查找算法思想:从表的一端开始顺序扫描线性表,依次将扫描到的结点关键字与给定值K比较,若当前扫描到的结点关键字与k相等则查找成功;若扫描结束
guiyinzhou
·
2011-04-25 14:00
数据结构
算法
存储
磁盘
数据结构与算法学习
之二叉树的遍历:已知先序、中序、后序序列三者中的两种求另外一种遍历的算法
初学数据结构,已经掌握了先序、中序和后序遍历的算法。但是看到有的笔试题有这样一种问题“已知先序、中序、后序序列三者中的两种求另外一种遍历”,挺有意思的,现在来总结一下:三种遍历序列,已知两种,求第三种,我们下面分类讨论一下:1)已知先序和中序,求后序我们来举个简单的例子,先序序列为:ABDECF,中序序列为:DBEAFC。算法思想:先序遍历树的规则为中左右,可以看到先序遍历序列的第一个元素必为树的
guiyinzhou
·
2011-04-24 20:00
数据结构与算法学习
之二叉排序树及二叉排序树的相关操作
二叉排序树是数表动态查找中的一种重要应用。二叉排序树具备以下特点:1)若它的左子树不为空,则左子树上的各结点的值均小于它的根结点的值;2)若它的右子树不为空,则其右子树上的各结点的值均大于等于它的根节点的值;3)它的左子树和右子树分别又是一个二叉排序树。二叉排序树中的一些操作应该掌握,如如何建立一个二叉排序树,它的插入和删除操作,以及查找某个元素值的操作。下面是本人在学习时联系写的一些代码:#in
guiyinzhou
·
2011-04-24 15:00
数据结构与算法学习
之二叉树及二叉树的相关操作
树中有一些概念需要我们了解,节点的度是指该节点子树的个数,树的度是指树中节点度得最大值,一个树的深度是指树中节点最大层次值。二叉树是数据结构中一种重要的结构,它有很多重要的性质:1)二叉树第i层上最多有2i-1个节点;2)深度为k的二叉树各层节点总数最多为2k-1;3)在任意的二叉树中,如果叶子节点个数为n0,度为1的节点个数为n1,度为2的节点的个数为n2,则n2=n0+1;4)具有n个节点的完
guiyinzhou
·
2011-04-23 14:00
数据结构与算法学习
之队列及队列的相关操作
队列也是一张表,它是一种插入操作在一端删除操作在另一端进行的表。队列的操作主要要抓住两个核心位置队头front和队尾rear。队列的主要操作就是入队与出队了。同样,队列也可以使用数组和链表两种方式实现。下面是本人在学习队列操作时利用链表方式实现的代码:/*************************************************************************
guiyinzhou
·
2011-04-23 13:00
数据结构与算法学习
之栈及栈的相关操作
栈是一种将插入和删除操作限制在一端的表,有时也成为LIFO表;栈的操作核心是使用一个栈顶指针top指向栈顶元素。栈中有两个总要的操作就是Push和pop,进栈和出栈操作。栈也可以使用两种方式建立,数组方法和链表方法。当然数组实现是连续存储的,但是使用起来需要预先估计数组的大小。链表实现是非连续存储的,使用相对灵活。下面是本人在学习的时候将栈以数组和链表两种方法进行实现的代码。链表实现code:/*
guiyinzhou
·
2011-04-23 10:00
数据结构
算法
null
存储
Class
数据结构与算法学习
之链表
抽象数据类型ADT中的表可以用简单的数组实现。但是用数组实现有两个弊端:1)首先要对表的大小的最大值进行估计,以便于创建相应长度的数组,如果过大,会浪费很多空间。2)插入和删除操作在数组中的代价是昂贵的。因为插入一个元素或者删除一个元素会使得其他元素的位置需要相应的变化。为了克服上面的困难,我们需要使得表的存储不连续,避免整体或者大规模的数据移动。链表的思想由此而生:链表是由一系列不必在内存中相连
guiyinzhou
·
2011-04-20 10:00
java
数据结构与算法学习
笔记(2)——数组及ArrayList
从概念上可知,数组属于线性表(逻辑上一一对应关系),数组在物理内存上采用顺序存储结构。当创建一个数组的时候,就必须确定它的大小,系统会在内存中开辟一块连续的空间,用来保存数组。 优点:可根据索引快速的查找元素。 缺点:大小不可变。(确切应该讲,不能往一个放满元素的数组里再添加新的元素) ArrayList正是保留了数组可以快速查找的优势,同时,又弥补了数组在创
蛋呢823
·
2011-03-15 01:00
java
jdk
数据结构
算法
百度
java
数据结构与算法学习
笔记(1)——概念
今天复习了数据结构,才发现很多概念都不懂,或是没有分清楚。晚上跟MZD讨论的时候,发现我们都对数据结构的某些地方都存在着误解。因此深感弄清概念的重要,至少弄清概念可以应付二级、三级。 数据结构 数据结构是计算机存储、组织数据的方式。 数据元素相互之间的关系称为结构。 有四类基本结构:集合、线性结构、树形结构、网状结构。 集合结构中的数据元
蛋呢823
·
2011-03-14 02:00
java
数据结构
算法
百度
如何学好数据结构与算法的若干疑问解答(2)
最近一段时间以来,给我留言咨询“
数据结构与算法学习
”方面问题的读者很多,大家都从各自不同的角度提出了自己在学习过程中的困惑,也问到了一些具有突出共性的实际问题。今天我就简单的来汇总一下。
baimafujinji
·
2009-09-07 00:00
java
数据结构
编程
算法
语言
linux内核
如何学好数据结构与算法的若干疑问解答(1)
最近一段时间以来,给我留言咨询“
数据结构与算法学习
”方面问题的读者很多,大家都从各自不同的角度提出了自己在学习过程中的困惑,也问到了一些具有突出共性的实际问题。今天我就简单的来汇总一下。
baimafujinji
·
2009-09-06 23:00
数据结构
编程
c
算法
语言
出版
数据结构与算法学习
记录:快速排序
数据结构与算法学习
记录:快速排序快速排序的基本思想:分治法,即,分解,求解,组合.分解:在无序区R[low..high]中任选一个记录作为基准(通常选第一个记录,并记为Pivot,其下标为pivotpos
逆水行舟
·
2008-05-28 16:00
数据结构与算法学习
之字符串模式匹配KMP算法
数据结构与算法学习
之字符串模式匹配KMP算法 设有主串s和子串t,子串t定位是指在主串s中找到一个与子串t相等的子串。通常把主串s称为目标串,把子串t称为模式串,因此定位也称作模式匹配。
边城愚人
·
2007-06-17 22:00
数据结构与算法学习
记录:快速排序
快速排序的基本思想:分治法,即,分解,求解,组合.分解:在无序区R[low..high]中任选一个记录作为基准(通常选第一个记录,并记为Pivot,其下标为pivotpos),以此为基准划分成两个较小的子区间R[low,pivotpos-1]和R[pivotpos+1,high],并使左边子区间的所有记录均小于等于基准记录,右边子区间的所有记录均大于等于基准记录,基准记录无需参加后续的排序。而划分
kwklover
·
2007-02-15 14:00
上一页
2
3
4
5
6
7
8
9
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他