首页 百科知识 数据结构与算法

数据结构与算法

时间:2022-09-17 百科知识 版权反馈
【摘要】:数据结构指相互有关联的数据元素的集合,即数据的组织形式。其中逻辑结构反映数据元素之间逻辑关系;存储结构为数据的逻辑结构在计算机存储空间中的存放形式,有顺序存储、链式存储、索引存储和散列存储4种方式。二叉树的链式存储结构也称二叉链表,对满二叉树和完全二叉树可按层次进行顺序存储。二叉树的遍历是指不重复地访问二叉树中所有节点,主要指非空二叉树,对于空二叉树则结束返回。

一、算法

(一)算法的基本概念

1概念算法是指一系列解决问题的清晰指令

24个基本特征可行性确定性有穷性拥有足够的情报

3两种基本要素对数据对象的运算和操作算法的控制结构运算和操作时间的顺序)

4设计的基本方法列举法归纳法递推法递归法减半递推技术和回溯法

 

(二)算法的复杂度

1算法的时间复杂度执行算法所需要的计算工作量

2算法的空间复杂度执行算法所需的内存空间

 

二、数据结构的基本概念

数据结构指相互有关联的数据元素的集合,即数据的组织形式。其中逻辑结构反映数据元素之间逻辑关系;存储结构为数据的逻辑结构在计算机存储空间中的存放形式,有顺序存储、链式存储、索引存储和散列存储4种方式。

 

数据结构按各元素之间前后件关系的复杂度可划分为:

1、线性结构:有且只有一个根节点,且每个节点最多有一个直接前驱和一个直接后继的非空数据结构

2、非线性结构:不满足线性结构的数据结构

 

三、线性表及其顺序存储结构

(一)线性表的基本概念

线性结构又称线性表线性表是最简单也是最常用的一种数据结构。

 

(二)线性表的顺序存储结构

●元素所占的存储空间必须连续

●元素在存储空间的位置是按逻辑顺序存放的

 

(三)线性表的插入运算

在第i个元素之前插入一个新元素的步骤如下

步骤一把原来第n个节点至第i个节点依次往后移一个元素位置

步骤二把新节点放在第i个位置上

步骤三修正线性表的节点个数

在最坏情况下即插入元素在第一个位置线性表中所有元素均需要移动

 

(四)线性表的删除运算

删除第i个位置的元素的步骤如下

步骤一把第i个元素之后不包括第i个元素的n-i个元素依次前移一个位置

步骤二修正线性表的结点个数

 

四、栈和队列

 

(一)栈及其基本运算

1基本概念栈是一种特殊的线性表其插入运算与删除运算都只在线性表的一端进行也被称为先进后出”表或后进先出

●栈顶允许插入与删除的一端

●栈底栈顶的另一端

●空栈栈中没有元素的栈

2特点

●栈顶元素是最后被插入和最早被删除的元素

●栈底元素是最早被插入和最后被删除的元素

●栈有记忆作用

●在顺序存储结构下栈的插入和删除运算不需移动表中其他数据元素

●栈顶指针top动态反映了栈中元素的变化情况

3、顺序存储和运算:入栈运算、退栈运算和读栈顶运算

 

(二)队列及其基本运算

1、基本概念:队列是指允许在一端进行插入,在另一端进行删除的线性表,又称“先进先出”的线性表

●队尾:允许插入的一端,用尾指针指向队尾元素

●排头:允许删除的一端,用头指针指向头元素的前一位置

2、循环队列及其运算

所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间。

入队运算是指在循环队列的队尾加入一个新元素当循环队列非空(s=1)且队尾指针等于队头指针时,说明循环队列已满,不能进行入队运算,这种情况称为“上溢”。

退队运算是指在循环队列的队头位置退出一个元素并赋给指定的变量首先将队头指针进一,然后将排头指针指向的元素赋给指定的变量当循环队列为空(s=0)时,不能进行退队运算,这种情况称为“下溢”。

 

五、线性链表

在定义的链表中,若只含有一个指针域来存放下一个元素地址,称这样的链表为单链表或线性链表。

在链式存储方式中,要求每个结点由两部分组成:一部分用于存放数据元素值,称为数据域;另一部分用于存放指针,称为指针域。其中指针用于指向该结点的前一个或后一个结点(即前件或后件)

 

六、树和二叉树

(一)树的基本概念

树是简单的非线性结构,树中有且仅有一个没有前驱的节点称为“根”,其余节点分成m个互不相交的有限集合T1,T2,...Tm,每个集合又是一棵树,称T1,T2,...Tm为根结点的子树

●父节点:每一个节点只有一个前件,无前件的节点只有一个,称为树的根结点(简称树的根)。

●子节点:每一个节点可以后多个后件,无后件的节点称为叶子节点。

●树的度:所有节点最大的度

●树的深度树的最大层次。

 

(二)二叉树的定义及其基本性质

1二叉树的定义二叉树是一种非线性结构是有限的节点集合该集合为空空二叉树或由一个根节点及两棵互不相交的左右二叉子树组成可分为满二叉树和完全二叉树其中满二叉树一定是完全二叉树但完全二叉树不一定是满二叉树二叉树具有如下两个特点

●二叉树可为空空的二叉树无节点非空二叉树有且只有一个根结点

●每个节点最多可有两棵子树称为左子树和右子树。

2二叉树的基本性质

性质1在二叉树的第k层上至多有2k-1个结点(k≥1)。

性质2深度为m的二叉树至多有2m-1个结点。

性质3对任何一棵二叉树度为0的结点即叶子结点总是比度为2的结点多一个.

性质4具有n个结点的完全二叉树的深度至少为[log2n]+1其中[log2n]表示log2n的整数部分。

 

(三)满二叉树与完全二叉树

1满二叉树满二叉树是指这样的一种二叉树除最后一层外每一层上的所有结点都有两个子结点满二叉树在其第 i 层上有2i-1个结点。

从上面满二叉树定义可知二叉树的每一层上的结点数必须都达到最大否则就不是满二叉树深度为m的满二叉树有2m-1个结点。

2完全二叉树完全二叉树是指这样的二叉树除最后一层外每一层上的结点数均达到最大值'在最后一层上只缺少右边的若干结点。

如果一棵具有n个结点的深度为k的二叉树它的每一个结点都与深度为k的满二叉树中编号为1~n 的结点一一对应

 

(四)二叉树的存储结构

二叉树通常采用链式存储结构存储节点由数据域和指针域左指针域和右指针域组成二叉树的链式存储结构也称二叉链表对满二叉树和完全二叉树可按层次进行顺序存储。

 

(五)二叉树的遍历

二叉树的遍历是指不重复地访问二叉树中所有节点主要指非空二叉树对于空二叉树则结束返回二叉树的遍历包括前序遍历中序遍历和后序遍历

 

1、前序遍历

前序遍历是指在访问根结点遍历左子树与遍历右子树这三者中首先访问根结点然后遍历左子树最后遍历右子树'并且在遍历左右子树时仍然先访问根结点然后遍历左子树最后遍历右子树前序遍历描述为若二叉树为空则执行空操作否则访问根结点;②前序遍历左子树;③前序遍历右子树。

 

2中序遍历

序遍历是指在访问根结点、遍历左子树与遍历右子树这三者中首先遍历左子树然后访问根结点最后遍历右子树'并且在遍历左右子树时仍然先遍历左子树然后访问根结点最后遍历右子树中序遍历描述为若二叉树为空则执行空操作否则中序遍历左子树②访问根结点③中序遍历右子树。

 

3后序遍历

后序遍历是指在访问根结点遍历左子树与遍历右子树这三者中首先遍历左子树然后遍历右子树最后访问根结点并且在遍历左右子树时仍然先遍历左子树然后遍历右子树最后访问根结点后序遍历描述为若二叉树为空则执行空操作否则后序遍历左子树②后序遍历右子树③访问根结点

 

七、查找技术

1顺序查找在线性表中查找指定的元素最坏情况下最后一个元素才是要找的元素则需要与线性表中所有元素比较比较次数为n

2二分查找二分查找也称折半查找它是一种高效率的查找方法但二分查找有条件限制它要求表必须用顺序存储结构且表中元素必须按关键字有序升序或降序均可排列对长度为n的有序线性表在最坏情况下二分查找法只需比较log2n次。

 

八、排序技术

1交换类排序法

冒泡排序通过对待排序序列从后向前或从前向后依次比较相邻元素的排序码若发现逆序则交换使较大的元素逐渐从前部移向后部或较小的元素逐渐从后部移向前部直到所有元素有序为止。

在最坏情况下对长度为n的线性表排序冒泡排序需要比较的次数为n(n-1)/2

快速排序是迄今为止所有内排序算法中速度最快的一种它的基本思想是任取待排序序列中的某个元素作为基准一般取第一个元素),通过一趟排序将待排元素分为左右两个子序列左子序列元素的排序码均小于或等于基准元素的排序码右子序列的排序码则大于基准元素的排序码然后分别对两个子序列继续进行排序直至整个序列有序最坏情况下即每次划分只得到一个序列时间效率为O(n2)"

 

2插入类排序法

简单插入排序法n个待排序的元素看成为一个有序表和一个无序表开始时有序表中只包含一个元素无序表中包含有n-1个元素排序过程中每次从无序表中取出第一个元素把它的排序码依次与有序表元素的排序码进行比较它插入到有序表中的适当位置,使之成为新的有序表在最坏情况下即初始排序序列是逆序的情况下比较次数为n(n-1)/2移动次数为n(n-1)/2

希尔排序法先将整个待排元素序列分割成若干个子序列由相隔某个( 增量) 的元素组成的"分别进行直接插入排序待整个序列中的元素基本有序增量足够小再对全体元素进行一次直接插入排序。

3选择类排序法

简单选择排序法扫描整个线性表从中选出最小的元素将它交换到表的最前面'然后对剩下的子表采用同样的方法直到子表空为止最坏情况下需要比较n(n-1)/2次。

堆排序的方法首先将一个无序序列建成堆然后将堆顶元素序列中的最大项与堆中最后一个元素交换最大项应该在序列的最后)不考虑已经换到最后的那个元素,只考虑前n-1个元素构成的子序列,将该子序列调整为堆。反复做步骤,直到剩下的子序列空为止。在最坏情况下,堆排序法需要比较的次数为Onlog2n)。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈