数据结构的基本知识

来源:互联网 发布:刺马案真相知乎 编辑:程序博客网 时间:2024/05/01 14:38

1.      数据结构定义:数据相互之间,存在一种或多种特定关系的数据元素的集合。根据元素的不同特性,可以分为四种:集合,线性结构,树形结构,图状结构或网状结构。

数据结构在计算机中的表示称为数据的物理结构或存储结构,最小单位是二进制数的一位,称为位。若干位组合起来形成一个位串表示一个数据元素或结点。当数据元素由若干数据项组成时,位串中对应于各个数据项的子位串称为数据域。

数据元素之间的关系在计算机中逻辑结构包括顺序映像和非顺序映像两种。非顺序映像借助指针实现。

数据类型:一个值的集合和定义在这个值上一组操作的总称。包括原子类型和结构类型两种。

抽象数据类型:一个数学模型以及定义在该模型上的一组操作。

多行数据类型:其值的成分不确定的数据类型。

2.      算法:对特定问题求解步骤的一种描述,它是指令的优先序列,其中每一条指令表示一个或多个操作,具有5个特性:有穷性,确定性,可行性,输入,输出。

算法设计要求:正确性,可读性,健壮性,效率与低存储量需求

算法效率的度量:

时间复杂度:一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n),算法的时间复杂度记为:T(n)=O(f(n)). 它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,一般指最坏情况下的复杂度,冒泡排序T(n)=O(n2).

空间复杂度:算法所需存储空间的度量:S(n)=O(f(n)). 若额外空间相对于输入数据量来说是常数,称此算法为原地工作。

3.      线性表:最常用且最简单的一种数据结构。

特点有4个:存在唯一的一个被称为第一个的数据元素;存在唯一的一个被称为最后一个的数据元素;除第一个之外,集合中的每个数据元素都只有一个前驱;除第一个之外,集合中的每个数据元素都只有一个后继。

记录:一个数据元素可以由若干数据项组成,称数据元素为记录。含有大量记录的线性表又称为文件。同一线性表中的元素必须具有相同的属性,且存在序偶关系。可以对线性表进行访问,插入和删除。

(a)      线性表的顺序表示:用一组地址连续的存储单元一次存储线性表的数据元素,是一种随机存取的存储结构,长度可变,通常用数组描述数据结构中的顺序存储结构。(物理位置相邻)

插入和删除操作使得插入或删除的位置后面的 所有元素 向前或向后移动一个位置。

弱点:插入和删除操作时,需要移动大量元素

优点:可以随机存取

(b)      线性表的链式表示:用一组任意的存储单元存储线性表的数据元素,可以是不连续的。未来表示每个数据元素ai与其直接后继元素ai+1的之间的逻辑关系,ai由两部分信息组成:数据域,存储数据元素信息;指针域,存储直接后继的存储位置。这两个域共同构成ai的结点。

单链表:N个结点链结成一个线性链表,或称为单链表。整个链表的存取必须从头指针开始进行,头指针指向第一个结点的存储位置,最后一个结点的指针为NULL。

删除和插入操作要从头结点开始遍历,到指定位置之后,修改相邻结点的指针,改变其指向即可。

静态链表:用数组描述的链表,需要手动malloc和free资源

循环链表:表中最后一个结点的指针域指向头结点,整个链表形成一个环,从表中任意结点出发均可找到表中其他结点

双向链表:结点中有两个指针域,分别指向直接后继和直接前继,双向链表也可以有循环表

链表优点:合理利用空间,插入和删除时不需要移动

缺点:相对位置不确定

(c)      可以使用线性链表表示多项式

4.      栈和队列

栈和队列是两种重要的线性结构,从数据结构角度看,他们也是线性表,其特殊性在于栈和队列的基本操作是线性表操作的子集,他们是操作受限的线性表,称其为限定性的数据结构。从数据类型角度看,他们和线性表是大不相同的两类重要的对象数据类型,是多型数据结构

(a)      栈stack

定义:是限定仅在表尾进行插入和删除操作的线性表,表尾称为栈顶top,遵循后进先出LIFO(last in first out),还有栈的初始化,判空及取栈顶元素等操作。

表示:两种表示方法

顺序栈:栈的顺序存储结构是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在栈中的位置,top=0表示空栈,base表示栈底指针

栈的应用:数制转换,括号匹配的检验,迷宫求解,表达式求值,

递归的实现

定义:直接调用自己或通过一系列的调用语句间接调用自己的函数称为递归函数。很多数学函数通过递归定义,有的数据结构如二叉树,广义表等本身有递归的特征,有的问题如八皇后,Hanoi通过递归更容易实现。

(b)      队列queue

定义是一种先进先出FIFT(First in First out)的线性表,只允许在表的一端进行插入,而在表的另一端进行删除,允许插入的一端叫队尾,允许删除的一端叫队头。

操作系统的作业排队是队列

链队列:用链表表示的队列,是队列的链表表示和实现

循环队列:除了一组地址连续的存储单元依次表示存放队列头到队列尾的元素外,同时需要两个指针front和rear分别指示队列头和队列尾元素的位置。是队列的顺序表示和实现。

(c)      双端队列:限定插入和删除操作在表的两端进行,分别称为端点1和端点2,用的较少

 

 

 

 

0 0
原创粉丝点击