![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
【数据结构】
文章平均质量分 89
xiazdong
ECNU-SEI
展开
-
后缀表达式总结
一、后缀表达式介绍后缀表达式的特点就是计算机运算非常方便,需要用到栈;计算机处理过程只需要顺序读入,如果遇到数字,则放入栈中,如果是运算符,则将两个栈中数字取出进行运算;比如1+2的后缀表达式为12+;而栈可以把一般的中缀表达式变成后缀表达式,并且计算后缀表达式得出结果,因此此应用在计算器中非常常用;二、中缀表达式转换成后缀表达式此方法需要遵循几个规则:原创 2012-02-19 17:06:28 · 12359 阅读 · 0 评论 -
算法导论2.4 合并排序求逆序数
2-4 逆序对 设A[1...n]是一个包含n个不同数的数组。如果在iA[j],则(i,j)就称为A中的一个逆序对。 (1)列出数组{2,3,8,6,1}的五个逆序。 (2)如果数组的元素取自{1,2...,n},那么,怎样的数组含有最多的逆序对? (3)插入排序的时间与输入数组中逆序对的数量之间有怎样的关系? (4)给出一个算法,能用Θ(n㏒n)原创 2010-12-03 22:05:00 · 4443 阅读 · 0 评论 -
数据结构复习之【排序】
排序:对一序列对象根据某个关键字进行排序;稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面; 内排序:所有排序操作都在内存中完成;外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行; 排序耗时的操作:比较、移动;排序分类:(1)交换类:冒泡原创 2012-02-28 23:46:56 · 13005 阅读 · 11 评论 -
递归解决全排列生成算法
排列:从n个元素中任取m个元素,并按照一定的顺序进行排列,称为排列;全排列:当n==m时,称为全排列;比如:集合{ 1,2,3}的全排列为:{ 1 2 3} { 1 3 2 }{ 2 1 3 }{ 2 3 1 }{ 3 2 1 }{ 3 1 2 }方法一:我们可以将这个排列问题画成图形表示,即排列枚举树,比如下图为{1,2,3原创 2012-09-16 23:49:07 · 48248 阅读 · 7 评论 -
24点破解的Java实现
一、基本思想要想计算24点游戏的结果,则必须要采用基于搜索的算法(即穷举法)对每种情况进行遍历,我们怎么样才能遍历所有的情况呢?其实我们只要总结一下,还是有规律可以找的。输入a、b、c、d,组成a Op1 bOp2 c Op3 d的表达式,其中先算哪个子表达式未知,一共有5种计算方式,如下图所示: 此时如果要实现该程序,需要存储5棵树,为了能够原创 2012-06-26 23:22:24 · 6757 阅读 · 1 评论 -
数据结构复习之【图】
一、基本术语图:由有穷、非空点集和边集合组成,简写成G(V,E);Vertex:图中的顶点;无向图:图中每条边都没有方向;有向图:图中每条边都有方向;无向边:边是没有方向的,写为(a,b)有向边:边是有方向的,写为有向边也成为弧;开始顶点称为弧尾,结束顶点称为弧头;简单图:不存在指向自己的边、不存在两条重复的边的图;无原创 2012-03-15 08:17:34 · 23403 阅读 · 4 评论 -
KMP算法总结
一、KMP算法介绍 KMP(Knuth、Morris、Pratt三人设计的算法);KMP算法主要用于模式匹配,简单地说就是字符串的匹配,比如A="abc",B="b",问:B是否是A的子串,此时就需要用到KMP算法;因为普通的算法效率太低;而KMP可以做到O(m+n)的线性时间; 二、普通模式匹配算法 模式匹配算法简单地说就是给定两个字符串A、B,看是否B是A的子串原创 2012-02-25 12:14:52 · 1781 阅读 · 1 评论 -
数据结构复习之【树】
名词解释 树这个数据结构用到了递归的概念:树的子树还是树;度:节点的子树个数;树的度:树中任意节点的度的最大值;兄弟:两节点的parent相同;层:根在第一层,以此类推;高度:叶子节点的高度为1,根节点高度最高;有序树:树中各个节点是有次序的;森林:多个树组成; 树的表示法 1.双亲表示法:每个节点存储:数据、parent在数组中的下标原创 2012-02-26 20:36:54 · 28141 阅读 · 5 评论 -
数据结构复习之【队列】
队列是先进先出的线性表;队列由于是线性表,因此也有顺序存储和链式存储两种实现方式;一、顺序存储实现由于队列的特性是:从队尾添加,从对头删除,因此如果让数组的尾部用作队尾,数组的头部用作队头,则删除元素时,时间复杂度为O(n);因此我们需要用循环数组实现,并且维护两个属性 front、rear,front用来记录队头的位置,rear记录队尾的下一个位置;比如:原创 2012-03-04 22:58:58 · 1557 阅读 · 0 评论 -
数据结构复习之【栈】
栈:先进后出的线性表;栈也可以通过顺序存储和链式存储的方式实现;一、顺序存储实现 数组的尾端作为栈顶;代码实现:package org.xiazdong.list;public class MyArrayStack { private static final int DEFAULT_LENGTH = 10; private T[]t; priva原创 2012-03-04 20:57:51 · 1297 阅读 · 0 评论 -
数据结构复习之【线性表】
一、线性表简介 线性表简单地说就是数据元素的序列,即一对一关系; 二、ArrayList简单实现 读取:O(1)插入、删除:O(n)代码实现: package org.xiazdong.list;public class MyArrayList { private static final int DEFAULT_LENGTH = 10; priv原创 2012-03-04 16:45:00 · 1535 阅读 · 0 评论 -
数据结构复习之【数据结构和算法概念】
一、概念 数据结构就像是一个催化剂,如果没有原料是无用的,单是有了算法就能帮算法更快的实现任务;数据结构:是指相互之间存在一种或多种特定关系的数据元素的集合,简单地说是数据之间的各种关系的集合。程序设计=数据结构+算法;解释:如果要写一个程序,需要选择一个良好的数据结构,加上良好的解决问题的算法; 二、名词解释 数据是一个最广泛的概念,数据中可以有多个数据原创 2012-03-04 09:13:21 · 3571 阅读 · 0 评论 -
学习算法之路
第一阶段:练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码, 因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打 出来. 1.最短路(Floyd、Dijstra,BellmanFord) 2.最小生成树(先写个prim,kruscal要用并查集,不好写) 3.大数(高精度)加减乘除 4.二分查找.转载 2012-03-03 17:02:57 · 2318 阅读 · 0 评论 -
分治法寻找最邻近的点对
问题描述:在二维平面内给定n个点,寻找这些点中举例最近的两个点;思路:我们发现如果要将全部的点两两比较,则最起码需要O(n^2),因此我们的思路是如果要求与某个点A距离最近的点,则需要缩小范围,不用每个点都比较;我们需要使用分治法来求解;首先我们需要定义一些变量:Px:对于点按照x坐标排序;Py:对于点按照y坐标排序;Qx:对于左部分原创 2012-09-25 15:56:48 · 9618 阅读 · 0 评论