数据结构学习一:概述

数据结构作为一门学科主要研究数据的各种逻辑结构和存储结构,以及对数据的各种操作。因此,主要有三个方面的内容:

  • 数据的逻辑结构;
  • 数据的物理存储结构;
  • 对数据的操作(或算法)。

 

一、什么是数据结构:
1、数据:

是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。数据不仅仅包括整型、实型等数值类型,还包括字符及声音、图像、视频等非数值类型。

也就是说,数据其实就是符号,而且这些符号必须具备两个前提:

  • 可以输入到计算机中。
  • 能被计算机程序处理。

对于整型、实型等数值类型,可以进行数值计算。对于字符数据类型,就需要进行非数值的处理。而声音、图像、视频等其实是可以通过编码的手段变成字符数据来处理的。

2. 数据元素

数据元素:是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录。

3. 数据项

数据项:一个数据元素可以由若干个数据项组成。

举个例子吧。比如人这样的数据元素,可以有眼、耳、鼻、嘴、手、脚这些数据项,也可以有姓名、年龄、性别、出生地址、联系电话等数据项,具体有哪些数据项,要视你做的系统来决定。

4. 数据对象

数据对象:是性质相同的数据元素的集合,是数据的子集。

数据 data
数据对象 data object
数据元素 data element数据元素数据元素数据元素
数据项 data item数据项数据项数据项数据项数据项数据项数据项
5. 数据结构

数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。

 

为编写出一个“好”的程序,必须分析待处理对象的特性及各处理对象之间存在的关系。这也就是研究数据结构的意义所在。

 

二、数据的逻辑结构

逻辑结构:是指数据对象中数据元素之间的相互关系。

逻辑结构分为以下四种:

  • 集合结构。集合中任何两个数据元素之间都没有逻辑关系,组织形式松散。
  • 线性结构。线性结构中的结点按逻辑关系依次排列形成一个“锁链”。
  • 树形结构。树形结构具有分支、层次特性,其形态有点象自然界中的树。
  • 图状结构。图状结构中的结点按逻辑关系互相缠绕,任何两个结点都可以邻接。

 

三、数据的物理结构

物理结构:是指数据的逻辑结构在计算机中的存储形式。

数据元素的存储结构形式有两种:顺序存储和链式存储。

逻辑结构是面向问题的,而物理结构就是面向计算机的,其基本的目标就是将数据及其逻辑关系存储到计算机的内存中。

 

四、数据类型

数据类型:是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。

数据类型是按照值的不同进行划分的。在高级语言中,每个变量、常量和表达式都有各自的取值范围。类型就用来说明变量或表达式的取值范围和所能进行的操作。

抽象数据类型(Abstract Data Type, ADT) 是一个数据结构以及定义在该结构上的一组操作的总称。它是对数据类型的抽象,抽象的意义在于数据类型不是高级程序语言支持的基本数据类型,而是自定义的数据类型。

 

五、数据结构的知识点

1、线性表

 

顺序存储结构:连续的存储。

 

链式存储结构:内存中随机存储的,只需要指针写出下一个结点在哪里即可。

 

  • 线性表:逻辑上不分叉就行。一个个数据元素前后相连(就是前驱、后继)。数据项平等对待。与此相对就是树、图。用途:其实就是数组啦。
  • 链表:采用链式存储方式的线性表。什么是链式存储?就是一个数据项中不仅保存数据还要告诉下一个数据在哪里。用途:数据大小不确定时用。

 

从普通链表拓展的概念:

 

  1. 循环链表:首尾相连的链表;
  2. 双链表:前后相随的链表;前<  >后

 

用途:特殊情况加快链表的操作;

2、栈和队列

这个什么东西?就是功能被限制的线性表,没有什么区别;

栈:只能从上面往下放,然后从上面去取;  就是一个坑啊,有木有!

  • 链栈:链式存储的栈;
  • 顺序栈:顺序存储的栈;

队列:前面装入数据,后面取出数据; 用途:保障时间的顺序,比如用户事务操作;

  • 链队列:链式存储的队列;  链队列:长度没限制啊,是不是、
  • 顺序队列:顺序存储的队列; 

3、串

就是把字符放到前面的线性表中。不然怎么叫字符串呢? 所以很多语言字符串就是一个对象;

4、多维素组

素组的元素可以又是一个数组。 这个就是一个树。

5、树

有分叉的链表但是不能首尾相连;(线索二叉树除外,线索二叉树就是图了都);

  • 二叉树:最多两个分支。
  • 深林:几个树放到一起(没连接哈),就是个深林;形象啊、
  • 遍历:记住以根为标准即可,先访问根:先序;访问了左边,再访问根:中序;最后访问根:后序;
  • 最优二叉树(哈夫曼树):就是把权重的往上放。   用途:用来编码,用的多的,权重的自然放在前面了,权力大的就在上面(和金字塔的社会不是很像么?);
  • 线索二叉树:叶子节点的指针域不要浪费,指向其他,按照遍历的顺序来。其实就是一个图了。
6、图

无限个指针域,随你指向那个结点,不要重复就行。

  • 无向图:指向a 被指向a,算作一样;
  • 有向图:指向a被指向a,不同的,不一样;
  • 带权:指向这个行为还有程度值,权值。
  • 网络:带权的有向图。 路由协议中,由路由器组成的网络就是向且带权,比如速度、延迟不一样,上传、下载速度不一样;

遍历的问题有点麻烦

  • 深度优先:就是一直往下走,不回头。
  • 广度优先:一层一层剥下去。
  • 生成树:把图滤成一个树。删除循环的连接;primus算法类似深度优先的思想,克鲁斯卡尔算法类似广度优先的思想;
  • 最短路径:一个一个列出来,比较最小的;

7、排序和查找

先看排序:

  1. 冒泡排序:就像气泡一样,当前元素和下一个比,合适就这样,不合适就交换折腾 n * n次
  2. 快速:元素找到自己的排序位置,当每个人都找到了,那个顺序就定了。
  3. 选择:老实的排序法,找到最值,放在哪里,又去找最值。。。。
  4. 堆:和选择一样建一个具有堆的性质二叉树(节点永远比子节点大),堆顶就是最值,拿出来,再建一次堆。。。
  5. 插入:随便拿一个向有序的中放。问:开始没有有序的序列啊?答:开始只有找一个元素参照,一个必然是有序的,然后可以结合二分法查找,来排序,用查找的思想排序,逆天了有木有啊、
  6. 归并:几组有序的合并成一个。很简单,每人轮流拿出一个比较下,放进篮子里不就完了。

排序好了才能查找,否则就只能一个一个查找了

  1. 顺序查找:就是一个一个来;
  2. 二分法:简单,找中间,每次排除一半;
  3. 分块:建个索引,就是分割区域,这些区域对应到一个序列,例如123,然后去找,索引越细致,速度越快,但是修改了,会重建索引,把握程度即可。
  4. 二叉排序树:把数据存在一个树里,这个树的数据以中序遍历的顺序来存,这个结点的左边比右边小,就很好找了、每次排除整体的一半。
  5. B-树:用二叉排序树当做索引存普通数据,因为二叉排序树的建立、删除代价太大了。

8、主要的数据结构包括:

Arrays
Link
lists 
Queues
Stacks
Heaps
Graphs
Scene graphs
Octrees
Quad-trees
Binary trees
Minimax trees
kd trees
Sphere trees
Bounding volume hierarchies Hash tables
Portals and sectors

9、主要的算法:

Recursion
Insertions
Deletions
Merging
Various sorting algorithms 
Various searching algorithms
Transversal Various algorithms
for balancing trees
Data compression Texture compression Data encryption Texture filters

 


 

转载于:https://www.cnblogs.com/shangdahao/archive/2013/05/20/3088642.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值