算法总结(2)数据结构

数据结构(Data Structure)

是指相互之间具有(存在)一定联系(关系)的数据元素的集合。元素之间相互关系称为逻辑结构。

数据之间的逻辑结构有四种基本类型

集合:结构中的数据元素除了“同属于一个集合”外,没有其它关系。

线性结构:结构中的数据元素之间存在一对一的关系。

树形结构:结构中的数据元素之间存在一对多的关系。

图状结构或网状结构:结构中的数据元素之间存在多对多的关系。

数据结构的存储方式

数据结构在计算机内存中的存储包括数据元素的存储和元素之间的关系的表示。

元素之间的关系在计算机中有两种不同的表示方法:顺序表示和非顺序表示。由此得出两种不同的存储结构:顺序存储结构和链式存储结构。

---顺序存储结构:用数据元素在存储器中的相对位置来表示数据元素之间的逻辑结构(关系)。

链式存储结构:在每个数据元素中增加一个存放另一个元素地址的指针(pointer).用该指针来表示数据元素之间的逻辑结构(关系)。

逻辑结构和物理结构

数据结构的运算

数据结构的主要运算包括:

(1)建立(Create)一个数据结构

(2)消除(Destroy)一个数据结构

(3)从一个数据结构中删除(Delete)一个数据元素;

(4)把一个数据元素插入(Insert)到一个数据结构中

(5)对一个数据结构进行访问(Access)

(6)对一个数据结构(中的数据元素)进行修改(Modify)

(7)对一个数据结构进行排序(Sort)

(8)对一个数据结构进行查找(Search).

线性表

线性表的顺序存储

线性表的链式存储

双向链表

双向链表的结点及其类型定义

栈和队列

栈的基本概念

栈的顺序存储表示

栈的链式存储表示

栈的应用

队列

循环队列

队列的链式表示和实现

树与二叉树

树的定义

树的基本术语(1)

树的基本术语(2)

。。。。。

算法总结(2)数据结构

时间: 2024-10-09 03:30:18

算法总结(2)数据结构的相关文章

Weka算法Classifier-tree-J48源码分析(一)算法和基本数据结构

大概一年没打理博客了,重新拿起笔不知道该从哪里写起,想来想去就从最近手头用的Weka写起吧. Weka为一个Java基础上的机器学习工具,上手简单,并提供图形化界面,提供如分类.聚类.频繁项挖掘等工具,本篇文章主要写一下分类器算法中的J48算法及其实现. 一.算法 J48是基于C4.5实现的决策树算法,对于C4.5算法相关资料太多了,笔者在这里转载一部分(来源:http://blog.csdn.net/zjd950131/article/details/8027081) C4.5是一系列用在机器

树结构的自定义及基本算法(Java数据结构学习笔记)

数据结构可以归类两大类型:线性结构与非线性结构,本文的内容关于非线性结构:树的基本定义及相关算法.关于树的一些基本概念定义可参考:维基百科 树的ADT模型: 根据树的定义,每个节点的后代均构成一棵树树,称为子树.因此从数据类型来讲,树.子树.树节点是等同地位,可将其看作为一个节点,用通类:Tree表示.如下图所示: 图:Tree ADT模型示意图 可采用"父亲-儿子-兄弟"模型来表示树的ADT.如图所示,除数据项外,分别用三个引用表示指向该节点的父亲,儿子,兄弟. 图:"父亲

算法解读:数据结构

什么是数据结构? 大量数据的有效管理机制.描述计算机算法的时候使用的数据结构有很多种: 数组:连续排列数据的数据结构,数据以线性无间隙地排列 链表:数据按照顺序排列的数据结构,链表可以管理线性排列的数据,也可以远距离存放 栈:类似于桌子上堆书一样来管理数据的数据结构,栈是一种与数据输入顺序相反,逆序输出的数据管理方式 队列:如同在超市收银台结账一样,先来的顾客先付款,队列是数据输出顺序与输入顺序一致的数据管理方式 树:如同树枝可以分出两个.三个甚至多个树枝,而每个分出来的树枝还可以再分出两个.三

【算法笔记】数据结构(一)

数据结构是数据的组织形式,可以用来表征特定的对象数据.在计算机程序设计中,操作的对象是各式各样的数据,这些数据往往拥有不同的数据结构,例如数组.接口.类等.而算法和数据结构具有千丝万缕的联系,计算机科学家尼克劳斯·沃思(Nikiklaus Wirth)提出"数据结构+算法=程序"的著名公式.这是因为不同的数据结构所采用的处理方法不同,计算的复杂程度也不同,因此算法往往是依赖于某种数据结构的,即数据结构是算法实现的基础. 数据结构是计算机中对数据的一种存储和组织方式,同时也泛指相互之间存

c++分块算法(暴力数据结构)

快要noip了,该写些题解攒攒rp了(逃) 看到题解里那么多线段树啊,树状数组啊,本蒟蒻表示:这都是什么鬼东西? 在所有高级数据结构中,树状数组是码量最小的,跑的也基本是最快的,但理解很难,并且支持的操作很少:线段树的码量,相信写过线段树题的童鞋都亲身体验过这种恐怖(那些3min写完splay的巨佬不要d我),理解虽然简单,但一题调一辈子啊! 所以说到这里,本蒟蒻想表达什么呢? 分块大法吼啊! 有人会说:分块不是n√n的复杂度吗?怎么能跟nlogn的数据结构相提并论呢?或者说,分块在联赛中,有什

算法入门《数据结构与算法图解》+《我的第一本算法书》+《学习JavaScript数据结构与算法第3版》

最近几年学前端的人会越来越多,再加上前端的范围越来越广,从前端发展为全栈,数据结构和算法的功底要求势必将越来越高. <数据结构与算法图解>电子书及代码是数据结构与算法的入门指南,不局限于某种特定语言,略过复杂的数学公式,用通俗易懂的方式针对编程初学者介绍数据结构与算法的基本概念,培养编程逻辑.主要内容包括:为什么要了解数据结构与算法,大O表示法及其代码优化利用,栈.队列等的合理使用,等等. <算法图解>电子书非常的体贴,看起来也很快,用图来解释算法是非常好的想法,可作为学习数据结构

【uva 1471】Defense Lines(算法效率--使用数据结构)

题意:给一个长度为N(N≤200000)的序列,要删除一个连续子序列,使得剩下的序列中有一个长度最大的连续递增子序列,输出其长度. 解法:(参考自紫书)1.X 暴力枚举删除的区间 [l,r],O(n^2),再数需要O(n).总共O(n^3). 2.X 前者+O(n)预处理 f[i] 和 g[i] 表示前缀和后缀的长度最大的连续递增子序列长度.总共O(n^2). 3.√ 前者O(n)预处理+ 只枚举 r(部分枚举),快速找最优的 l.而最优的就是 Ai 尽量小而f[i]尽量大,就可以排除掉 Ai≤

[ACM训练] 算法初级 之 数据结构 之 栈stack+队列queue (基础+进阶+POJ 2442+1442)

再次面对像栈和队列这样的相当基础的数据结构的学习,应该从多个方面,多维度去学习. 首先,这两个数据结构都是比较常用的,在标准库中都有对应的结构能够直接使用,所以第一个阶段应该是先学习直接来使用,下一个阶段再去探究具体的实现,以及对基本结构的改造! C++标准库中 这里记录一个经典的关于栈和队列的面试题目: 题目:实现一个栈,带有出栈(pop),入栈(push),取最小元素(getMin)三个方法.要保证这三个方法的时间复杂度都是O(1). 思路:重点是getMin()函数的设计,普通思路是设计一

排序算法及其比较--数据结构课设

 排序算法及其比较 课程设计报告 一. 设计内容 编程实现希尔.快速.堆排序.归并排序算法,并利用程序统计每种算法的执行时间.要求随机产生10000(或50000. 100000. 200000,由用户选择)个数据存入数据文件,然后读数据文件,分别采用不同排序方法进行排序,将结果存入另一个文件中. 二. 设计思想描述 1.  总思想 本程序采用模块化设计思想,分为产生随机数模块,计时模块,写入磁盘模块,读出磁盘模块,希尔排序模块,快速排序模块,堆排序模块,归并排序模块,计时模块.对常见的4 种经

程序与算法(图解数据结构-使用java[第一章])

一.区别: 程序中可以允许无限循环的存在,如一般操作系统中的作业调度器(Job Schduler),在启动后,除非关机或产生例外情况,不然会一直处于执行等待循环.但算法必须是有限的,这是两者之间最大的不同. 二.评判程序设计语言好坏的四项原则: 可读性高 平均成本低 (编码.执行.编译.维护.学习.调试以及更新等成本) 可靠性高(代码稳定性高) 可编写性高 三.面向对象程序设计的三种特性: 封装:将静态属性数值与动态行为方法包裹于此对象所"引用"到的类中 继承:主要指父类子类(重写(o