![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 64
悟之思语
长亭外,古道边,芳草碧连天,晚风拂柳笛声残,夕阳山外山。天之涯,地之角,知交半零落,人生难得是欢聚
展开
-
算法导论(二)
简单来说,所谓算法(algorithm)就是定义良好的计算过程,它取一个或一组值作为输入,并产生出一个或一组值作为输出。亦即,算法就是一系列计算步骤,用来将输入数据转换成输出结果。 我们还可以将算法看作是一种工具,用来解决一个具有良好规格说明的计算问题。有关该问题的表述可以用通用的语言,来规定所需的输入/输出关系。于子对应的算法则描述了一个特定的计算过程,用于实现这一输入/输出关原创 2014-05-21 16:22:44 · 888 阅读 · 0 评论 -
关于软件研发:一个愚蠢农夫和奶牛的故事
他被认为是影响或改变了整个软件工业开发模式的几位世界级大师之一,是软件方法论的一面”旗帜”。他是组件和组件架构、用例、现代业务工程、Rational统一过程等业界主流方法或技术的创始人。Ivar Jacobson博士认为,如果采用不良的软件过程,通过CMM/CMMI的成熟度级别越高,只会使软件企业生产不合格软件的过程更加有效率,而不是使企业开发出更好的软件。软件外包是时下的一个热门转载 2014-06-13 13:32:27 · 1495 阅读 · 0 评论 -
重温数据结构与算法(1) 构建自己的时间测试类
本文总结了使用基准法测试来测试运行一个程序所使用的时间,或者说是测试程序中数据结构和算法的性能。 代码如下:namespace TimingTestDemo1{ //自定义计时类 public class Timing { //私有字段 TimeSpan duration; //构造函数,初始化字段转载 2014-06-13 13:39:56 · 638 阅读 · 0 评论 -
数据结构和算法系列7 七大排序之直接插入排序和希尔排序
这一篇要总结的是插入排序中的直接插入排序和希尔排序,主要分以下几点进行总结。1,直接插入排序及算法实现2,希尔排序及算法实现3,直接插入排序PK希尔排序1,直接插入排序及算法实现什么是直接插入排序呢?直接插入排序的基本思想是:每次从无序表中取出第一条记录插入到已经排好序的有序表中,从而得到一个新的,记录数增1的有序表。直接插入排序的图解说明。下面是直接插入排序的算法实现转载 2014-06-13 13:49:03 · 690 阅读 · 0 评论 -
数据结构和算法系列9 五大查找之顺序查找
从这一篇开始要介绍算法中的查找技术了。查找在我们生活中无处不在,比如查公交,查机票,查酒店。。。这些都是查找。首先来看一下查找技术的分类。如下图:那么这篇要总结的是顺序表中的顺序查找技术。什么是顺序查找呢?顺序查找的原理很简单,就是遍历整个列表,逐个进行记录的关键字与给定值比较,若某个记录的关键字和给定值相等,则查找成功,找到所查的记录。如果直到最后一个记录,其关键字和给定值比较都转载 2014-06-13 13:51:01 · 581 阅读 · 0 评论 -
数据结构和算法系列5 七大排序之冒泡排序和快速排序
排序是我们生活中经常会面对的问题。同学们做操时会按照从矮到高排列;老师查看上课出勤情况时,会按学生学号顺序点名;高考录取时,会按成绩总分降序依次录取等。排序是数据处理中经常使用的一种重要的运算,它在我们的程序开发中承担着非常重要的角色。排序分为以下四类共七种排序方法:交换排序:1) 冒泡排序 2) 快速排序选择排序:3) 直接选择排序 4) 堆排序插入排序:5)转载 2014-06-13 13:47:22 · 520 阅读 · 0 评论 -
数据结构和算法系列12 五大查找之二叉排序树
这一篇开始总结的是二叉排序树。构造一棵二叉排序树的目的,其实并不是为了排序,而是为了提高查找和插入删除的效率。那么什么是二叉排序树呢?二叉排序树具有以下几个特点。1,若根节点有左子树,则左子树的所有节点都比根节点小。2,若根节点有右子树,则右子树的所有节点都比根节点大。3,根节点的左,右子树也分别为二叉排序树。下面是二叉排序树的图示,通过图可以加深对二叉排序树的理解。下转载 2014-06-13 14:03:45 · 563 阅读 · 0 评论 -
java与.net比较学习系列(4) 运算符和表达式
上一篇总结了java的数据类型,得到了冰麟轻武等兄弟的支持,他们提出并补充了非常好的建议,在这里向他们表示感谢。在后面的文章中,我会尽力写得更准确和更完善的,加油!另外,因为C#是在java之后,也是在java的基础上设计出来的,所以C#语言与java有非常多相同的地方,同时,C#中也添加了一些新的功能和特性,比如LINQ和Lambda表达式等等。所以,我在比较java与.net的时候,大多数转载 2014-06-14 08:23:08 · 640 阅读 · 0 评论 -
算法精解二十三(C语言版)
使用链表的例子:页帧管理在一些支持虚拟内存的系统中有关与链表的一种应用.细腻内存是一种地址空间的映射机制,它允许进程(运行的程序)不必完全加载到物理内存(系统的实际内存)中也可以得到运行.这种方式的一个优点是进程可以使用比系统实际所允许的物理内存大得多的地址空间.另一个优点是多个进程能够共享系统的内存以并发的方式执行.运行的虚拟内存机制下的进程需要处理虚拟地址.这些地址对于进程来说就像是物原创 2015-02-28 17:17:35 · 660 阅读 · 0 评论 -
算法精解二十二(C语言版)
单链表的实现与分析 回顾一下链表元素的组成;一个数据成员和一个指向链表中下一个元素的指针。结构 体ListElmt表示链表中的单个元素(见实例5-1).如你所料,这个结构体拥有两个成员,就是前面介绍的数据成员和指针成员。结构体系List则表示链表这种数据结构(见实例5-1).这个结构体由5个成员组成;size表示链表中的元素个数;match并不有链表本身使用,而是有从链表数据结原创 2015-02-28 16:55:51 · 638 阅读 · 0 评论 -
算法精解二十四(C语言版)
双向链表介绍双向链表,如同其名字所暗示的那样,链表元素之间由两个指针链接。双向链表中的每一个元素都有3部分组成;除了数据成员和next指针外,每一个元素还包含一个指向其前驱元素的指针,称为prev指针。双向链表的组成是这样的:将一些元素链接在一起使得每一个元素的next指针都指向其后继的元素,而每个元素的prev指针都指向其前驱元素。为了表示链表的头和尾,将第一个元素的prev指针和最后一原创 2015-02-28 17:26:10 · 646 阅读 · 0 评论 -
精解算法二十一(C语言版)
单链表介绍单链表(通常简称为链表)有各个元素之间通过一个指针彼此连接起来而组成。每个元素包含两部分;数据成员和一个称为next的指针。通过采用这种二成员结构。将每个元素的next指针设置为指向其后的元素(见图5-1).最后一个元素的next指针设置为NULL,简单地表示链表的尾端。链表开始处的元素是“头”,链表末尾的元素称为“尾”。要访问链表中的某个元素,从链表头开始,通过next指针从一原创 2015-02-28 16:12:40 · 570 阅读 · 0 评论 -
算法精解二十(C语言版)
数据结构-链表链表可以数是一种最为基础的数据结构,链表有一组元素以一种特定的顺序组合或链接在一起,在维护数据的集合时很有用。这一点同我们常用到的数组很相似。然而,链表在很多情况下比数组更有优势。特别是在执行插入和删除操作时链表拥有更高的效率。链表需要动态地开辟存储空间,也就是存储空间是在程序运行时分配的,由于在很多应用中数据的大小在编译时不能确定,因此动态分配空间的特性也是链表的一个有点。原创 2015-02-28 15:44:28 · 509 阅读 · 0 评论 -
算法精解十八(C语言版)
计算的复杂度 在谈到算法的性能时,我们通常关注的是它的复杂度,复杂度与它处理数据量所需要的资源(通常是时间)的增长速率密切相关。O表示法能够描述一个算法的复杂度。使用O表示法。通过观察算法的整体结构,我们很容易就可以描述最快的情况下的算法复杂度,有些时候,我们也会借助于利用迭代公式和统计方法(见本章结尾的相关主题)。原创 2015-02-15 16:58:05 · 632 阅读 · 0 评论 -
算法精解十九(C语言版)
实例分析:插入排序本节描述插入排序法在最坏情况下对运行时间的分析。插入排序是一种简单的排序算法。它在一个有序的数据集中查找位置新元素的位置,并将新元素插入进去。在第12章完整描述了插入排序算法。插入排序的代码如示例4-1所示。首先要知道,哪行代码会受要排序的数据量影响,我们看代码中有一个嵌套循环,外层的迭代数从i到size-1,内层的迭代数从j-1到所要插入的新元素的正确位置。其他代码的运原创 2015-02-28 15:23:34 · 552 阅读 · 0 评论 -
算法精解二十六(C语言版)
双向链表的实现与分析双向链表由一个数据成员、一个指向下一个元素的next指针,以及一个指向前一个元素的prev指针组成。数据结构DListElmt代表双向链表中的元素(见示例5-4).如你所料,这个结构体拥有前文描述过的3个成员。数据结构Dist代表双向链表数据结构(见示例5-4),该结构的成员同前面介绍的单链表相似。Dlist_initdlist_init操作用来初始原创 2015-03-02 09:35:55 · 602 阅读 · 0 评论 -
算法精解二十五(C语言版)
双向链表接口的定义 描述 初始化有参数list所指定的双向链表。该函数必须在双向链表做其他任何操作之前调用。当调用dist_destroy时,这里传入的destroy参数提供了一种释放动态分配空间的方法。它的工作方式同前面叙述的list_destroy.对于双向链表,如果其中包含不需要手动释放空间的数据,destory参数应该设置为NULL. 描 述 销毁有原创 2015-03-02 09:14:41 · 664 阅读 · 0 评论 -
算法精解二十九(C语言版)
使用循环链表的例子:第二次机会页面置换法从前面的例子中我么已经摘掉了在支持虚拟内存的系统中如何使用单链表管理内存页帧的分配。但还有一个问题没有搞清楚,那就是当空闲页面链表为空时,系统如何为其分配新的页帧呢?为了解决这个问题,操作系统从物理内存中取出一个页面将其放入称为交换磁盘的磁盘空间中,一这种方式来解放页帧。操作系统采用页面置换算法来决定哪一个页帧在当提前时刻最适合释放。页面置换算法中的一个原创 2015-03-04 16:53:59 · 794 阅读 · 0 评论 -
数据结构和算法系列17 图
二分查找也属于顺序表查找范围,二分查找也称为折半查找。二分查找(有序)的时间复杂度为O(LogN)。那么什么是二分查找呢?二分查找的基本思想是, 在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若给定值小于中间记录的关键字,则在中间记录的左半区继续查找;若给定值大于中间记录的关键字,则在中间记录的右半区继续查找。不断重复上述过程,直到找到为止。从二分查找的定转载 2014-06-13 14:06:43 · 622 阅读 · 0 评论 -
数据结构和算法系列10 五大查找之二分查找
二分查找也属于顺序表查找范围,二分查找也称为折半查找。二分查找(有序)的时间复杂度为O(LogN)。那么什么是二分查找呢?二分查找的基本思想是, 在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若给定值小于中间记录的关键字,则在中间记录的左半区继续查找;若给定值大于中间记录的关键字,则在中间记录的右半区继续查找。不断重复上述过程,直到找到为止。从二分查找的定转载 2014-06-13 14:02:05 · 644 阅读 · 0 评论 -
数据结构和算法系列4 队列
上一篇讲了栈,这一篇要总结的是我们常用的队列,我想从以下几个方面进行总结。1,什么是队列? 2,队列的存储结构? 3,队列的常用操作及实现代码?1,什么是队列1,首先,队列也是一种特殊的线性表,它是一种操作受限的线性表。它只允许在表的一端进行元素插入,而在另一端进行元素删除。允许插入的一端称为队尾(rear),允许删除的一端称为队头(font)。2,对于队列,与现实生活中的转载 2014-06-13 13:45:36 · 489 阅读 · 0 评论 -
几种数据存储结构详解
影响空间规模的几种数据存储结构正文 所谓数据存储结构,就是数据的元素与元素之间在计算机中的一种表示,它的目的是为了解决空间规模问题,或者是通过空间规模问题从而间接地解决时间规模问题。我们知道,随着输入的数据量越来越大,在有限的内存里,不能把这些数据完全的存下来,这就对数据存储结构和设计存储的算法提出了更高的要求。 本文将介绍几种存储结构,分别为转载 2014-05-21 13:51:56 · 841 阅读 · 0 评论 -
数据结构和算法系列1 线性表之顺序表
十月份就要考数据结构了,为了这次考试能顺利通过。同时数据结构在开发过程中也是相当重要的,但是以前从来就没有系统地学习过。所以正好借此机会好好地学习下数据结构,一方面是为了通过考试,另一方面也把数据结构和算法这一块的基础打牢一点,真是一举两得啊。我打算把这一部分写成一个系列,分为C#和C语言两个版本,每周发布两篇。从线性表开始,这一篇主要总结线性表之顺序表的相关操作,主要分以下几个部分来总结。转载 2014-06-13 13:43:09 · 610 阅读 · 0 评论 -
Access数据库小结
1、查询Access中的表名称select name from MSysObjects where type=1 and flags=0 MSysObjects2、几个查询结果Union All时,当使用了无表查询时,提示“查询输入必须包含至少一个表或查询” 也就是说在Access里,这样的查询,并不能出想要的结果 select 'wallimn' union a原创 2014-06-06 13:18:32 · 6922 阅读 · 0 评论 -
DB2数据库基础总结
一、db2 基础 基本语法 注释:“--”(两个减号) 字符串连接:“||” 如set msg=’aaaa’||’bbbb’,则msg为’aaaabbbb’ 字符串的引用:‘’(一定用单引号),如果需要输入单引号,输入两个单引号即可。 语句结束:“;” 语法来源:PASCLE 转义字符: 如果你想查询字符串中包含‘%’或‘_’ ,就转载 2014-06-06 13:21:55 · 2703 阅读 · 0 评论 -
Java 数据结构和算法的总结
第1章综述 数据结构和算法能起到什么作用? 数据结构的概述 算法的概述 一些定义 面向对象编程 软件工程 对于C++程序员的Java Java数据结构的类库 第2章数组 Array专题Applet Java中数组的基础知识 将程序划分成类 类接口 Ordered专题applet 有序数组的Java代码 对数 存储对象 大O表示转载 2014-06-27 11:32:45 · 1018 阅读 · 0 评论 -
软件项目管理流程总结
项目管理与软件开发的质量、效率、最终成果息息相关,本文主要讲述软件项目的风险评估、成本预算、客户沟通、需要分析、开发管理、成品交付等多个流程。在现今国内的项目的管理形式十分零乱,对管理欠缺重视,以致很多项目因为失去管理而最终折腰。很多的实战形人才只重视于开发环节,而对其他的流程欠缺认识(包括本人),因而导致项目欠缺有条理的、阶段化的管理。本人是一个典型的只重视开发的管理者,在多次的教训转载 2014-05-28 14:21:47 · 1033 阅读 · 0 评论 -
hibernate4.0+版本和3.0+版本的区别总结
1.数据库方言设置org.hibernate.dialect.MySQL5Dialect在3.3版本中连接MySQL数据库只需要指明MySQLDialect即可。在4.1版本中可以指出MySQL5Dialect2.buildSessionFactory4.1版本中buildSessionFactory()已经被buildSessionFactory(ServiceRegistryS转载 2014-05-28 14:52:37 · 1030 阅读 · 0 评论 -
重温数据结构与算法(2) 编程中最常用,最通用的数据结构---数组和ArrayList
1,什么是数组? 答:数组是一组同数据类型且可索引的数据的集合。 2,数组Array和ArrayList有何区别? 答:数组是固定大小的,而ArrayList是可变大小的。一,数组的使用(适用于固定大小)namespace ArrayDemo1{ class Program { static void Main(string[]转载 2014-06-13 13:40:51 · 595 阅读 · 0 评论 -
数据结构和算法系列3 栈
上一篇总结完了线性表之链表,这一篇文章我们要总结的是栈,我想从以下几个方面来进行总结。1,什么是栈? 2,栈的存储结构? 3,栈的常见操作及代码实现?1,什么是栈首先栈是一种特殊的线性表。那它的特殊性表现在哪里呢?栈是限定在表的一端进行插入和删除运算的线性表,因此,栈也称为后进先出(LIFO)的线性表。它有很多应用场景,比如食堂中的一叠盘子,我们只能从顶端一个一个地取。转载 2014-06-13 13:44:57 · 544 阅读 · 0 评论 -
数据结构和算法系列14 二叉树
歇了几天了,没有写博客。从今天开始要总结树和二叉树了。那么什么是树呢?1,树的定义:1)有且仅有一个特定的称为根Root的结点。2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集,其中每个集合本身又是一个棵树,并称为根的子树。2,树的表示方法:最常见的是树形表示法和广义表表示法,下面是树形表示法,如图所示。上图的广义表表示法为:(A(B(D,E),C(F,G)转载 2014-06-13 14:05:00 · 648 阅读 · 0 评论 -
数据结构和算法系列15 线索二叉树
上一篇总结了二叉树,这一篇要总结的是线索二叉树,我想从以下几个方面进行总结。1,什么是线索二叉树?2,为什么要建立线索二叉树?3,如何将二叉树线索化?4,线索二叉树的常见操作及实现思路?5,算法实现代码?一,什么是线索二叉树在有n个结点的二叉链表中必定存在n+1个空指针域,因此可以利用这些空指针域存放指向结点的某种遍历次序下的前趋和后继结点的指针,这种指向前趋和后继结点转载 2014-06-13 14:05:40 · 562 阅读 · 0 评论 -
数据结构和算法系列16 哈夫曼树
这一篇要总结的是树中的最后一种,即哈夫曼树,我想从以下几点对其进行总结:1,什么是哈夫曼树?2,如何构建哈夫曼树?3,哈夫曼编码?4,算法实现?一,什么是哈夫曼树什么是哈夫曼树呢?哈夫曼树是一种带权路径长度最短的二叉树,也称为最优二叉树。下面用一幅图来说明。它们的带权路径长度分别为:图a: WPL=5*2+7*2+2*2+13*2=54图b: WPL=5转载 2014-06-13 14:06:12 · 559 阅读 · 0 评论 -
数据结构和算法系列2 线性表之链表
上一篇我们总结完了顺序表,这一篇我们要总结的是线性表的链表,我想从以下几点进行总结。1,为什么要使用链表? 2,链表的存储结构? 3,链表的常用操作代码实现?1,为什么要使用链表通过上一篇的学习,我们知道顺序表存在一些问题,主要有以下两个方面。1,顺序表的长度是固定的,如果超出分配的长度就会造成溢出,如果存放的数据太少则会造成空间浪费。 2,在插入元素和删除元素时(尤其转载 2014-06-13 13:44:06 · 523 阅读 · 0 评论 -
数据结构和算法系列6 七大排序之直接选择排序和堆排序
上一篇我们总结了交换排序的冒泡排序和快速排序。那么这一篇我们要总结的是选择排序,选择排序分为直接选择排序和堆排序,我们主要分以下几点进行总结。1,直接选择排序及算法实现2,堆排序及算法实现1,直接选择排序及算法实现直接选择排序(Straight Select Sort)是一种简单的排序方法,它的基本思想是:通过n-i次关键字之间的比较,从n-i+1个记录中选出关键字最小的记录,并和转载 2014-06-13 13:48:16 · 526 阅读 · 0 评论 -
数据结构和算法系列8 七大排序之归并排序
这一篇要总结的是归并排序算法,这也是七大排序的最后一种排序算法。首先来看一下归并排序(Merge Sort)的基本原理。它的原理是假设初始序列有n个记录,则可以看成是n个有序的子序列,每个子序列的长度为1,然后两两合并,得到n/2个长度为2或1的有序子序列;再两两归并,… … ,如此重复,直至得到一个长度为n的有序序列为止,这两排序方法就称为归并排序。下面以一张图来说明归并排序的数据交换过转载 2014-06-13 13:50:18 · 516 阅读 · 0 评论 -
数据结构和算法系列11 五大查找之索引查找
这一篇我们要总结的是索引查找,关于索引,我们很容易地联想到数据库中的索引,建立了索引,可以大大提高数据库的查询速度。索引查找又称为分块查找,是一种介于顺序查找和二分查找之间的一种查找方法,分块查找的基本思想是:首先查找索引表,可用二分查找或顺序查找,然后在确定的块中进行顺序查找。分块查找的时间复杂度为O(√n)。在实现索引查找算法前需要弄清楚以下三个术语。1,主表。即要查找的对象。转载 2014-06-13 14:02:49 · 704 阅读 · 0 评论 -
数据结构和算法系列13 五大查找之哈希查找
这一篇要总结的是五天查找的最后一篇,哈希查找,也称为散列查找(本文以哈希称呼)。提起哈希,我的第一印象就是C#中的Hashtable类,它是由一组key/value的键值对组成的集合,它就是应用了散列技术。那么,什么是哈希查找呢?在弄清楚什么是哈希查找之前,我们要弄清楚哈希技术,哈希技术是在记录的存储位置和记录的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key转载 2014-06-13 14:04:26 · 611 阅读 · 0 评论 -
算法精解二十八(C语言版)
循环链表的实现与分析同单链表一样,循环链表中的每一个元素也包含两部分;一个数据域指针和一个指向后续元素的next指针。数据结构 CListElmt代表循环链表中的单独元素(见示例5-6)。如你所料,这个结构体拥有两个成员,与前面所述的一致。数据结构Clist代表循环链表(见示例5-6).这个结构体同单链表类似,但它不包含tail成员。clist_initclist_init操作原创 2015-03-03 17:29:42 · 602 阅读 · 0 评论