计题02组专业01号数据结构知识点复习408

Posted SYF

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计题02组专业01号数据结构知识点复习408相关的知识,希望对你有一定的参考价值。

写在前面:博客推行版本更新,成果积累制度,已经写过的博客还会再次更新,不断地琢磨,高质量高数量都是要追求的,工匠精神是学习必不可少的精神。因此,大家有何建议欢迎在评论区踊跃发言,你们的支持是我最大的动力,你们敢投,我就敢肝

绪论

数据结构的基本概念

数据:数据是信息的载体,计算机程序加工的原料

数据元素:数据的基本单位,若干数据项组成,数据项是数据元素的不可分割的最小单位

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

 

数据类型

原子类型:其值不可再分的数据类型

结构类型:可以再分解为若干成分的数据类型

抽象数据类型:抽象数据组织及与之相关的操作

 

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

 

数据结构三要素

【1】数据的逻辑结构:数据之间的逻辑关系,分为线性结构和非线性结构

【2】数据的存储结构

顺序存储

逻辑上相邻的元素存储在物理位置上也相邻的存储单元中

优点:实现随机存取,每个元素占用最少的存储空间

缺点:只能使用相邻的一整块存储单元,可能产生较多的外部碎片

链式存储

借助指示元素存储地址的指针来表示元素之间的逻辑关系

优点:不会出现碎片现象,充分利用所有存储单元

缺点:占用额外的存储空间,且只能实现顺序存储

索引存储

存储信息的同时,建立附加的索引表,索引表中的每项称为索引项

优点:检索速度快

缺点:索引表占用了额外的存储空间,增加删除数据要修改索引表,花费较多的时间

散列存储

根据元素的关键字直接计算元素存储地址

优点:检索、增加删除节点操作快

缺点:散列函数要求较高,容易出现存储单元冲突

 

【3】数据的运算:施加在数据上的运算包括运算的定义和实现

算法和算法评价

算法的基本概念

概念

对特定问题求解步骤的一种描述

特性

有穷性:一个算法必须总在执行有穷步之后结束,且每一 步 都可在有穷时间内完成

确定性:算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出。

可行性:算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现。

输入:一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合。

输出:一个算法有一个或多个输出,这些输出是与输入有着某种特定关系的量。

评价标准

正确性。算法应能够正确地解决求解问题。

可读性。算法应具有良好的可读性,以帮助人们理解。

健壮性。输入非法数据时,算法能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。

效率与低存储量需求。效率是指算法执行的时间,存储量需求是指算法执行过程中所需要的最大存储空间,这两者都与问题的规模有关。

 

算法效率的度量

时间复杂度

一个语句的频度是指该语句在算法中被重复执行的次数

所有语句的频度只和记为T(n)

 

算法中基本运算【最深层循坏内的语句】的频度与T(n)同数量级

 

算法中基本运算的频度f(n)来分析算法的时间复杂度

 

算法的时间复杂度不仅依赖于问题的规模,也取决于待输入数据的性质

 

最坏时间复杂度是指在最坏情况下,算法的时间复杂度。

平均时间复杂度是指所有可能输入实例在等概率出现的情况下,算法的期望运行时间。

最好时间复杂度是指在最好情况下,算法的时间复杂度。

一般总是考虑在最坏情况下的时间复杂度,以保证算法的运行时间不会比它更长。

 

空间复杂度

S(n)算法所耗费的存储空间

一个程序在执行时除需要存储空间来存放本身所用的指令、常数、变量和输入数据外

还需要一些对数据进行操作的工作单元和数据一些为实现计算所需信息的辅助空间

线性表

线性表的定义和基本操作

定义

具有相同数据类型的n个数据元素的有限序列

特点

表示元素的个数有限

表中元素具有逻辑上的顺序性,表中元素有其先后次序。

表中元素都是数据元素,每个元素都是单个元素。

表中元素的数据类型都相同,这意味着每个元素占有相同大小的存储空间。

表中元素具有抽象性,即仅讨论元素间的逻辑关系,而不考虑元素究竟表示什么内容。

基本操作

InitList(&L):初始化表。构造-一个空的线性表。

Length(L):求表长。返回线性表L的长度,即L中数据元素的个数。

LocateElem(L,e):按值查找操作。在表L中查找具有给定关键字值的元素。

GetElem(L,i):按位查找操作。获取表L中第i个位置的元素的值。

ListInsert(&L,i,e):插入操作。在表L中的第i个位置上插入指定元素e.

ListDelete(&L,i,&e):删除操作。删除表L中第i个位置的元素,并用e返回删除元素的值。

PrintList (L):输出操作。按前后顺序输出线性表L的所有元素值。

Empty(L):判空操作。若L为空表,则返回true,否则返回false。

DestroyList(&L):销毁操作。销毁线性表,并释放线性表L所占用的内存空间。

线性表的顺序表示

定义

一组地址连续的存储单元依次存储线性表中的数据元素,从而使得逻辑上相邻的两个元素在物理位置上也相邻

特点

逻辑顺序与其物理顺序相同

线性表L存储的起始位置为LOC(A),sizeof(ElemType)是每个数据元素所占用存储空间的大小,则表L所对应的顺序存储

线性表的顺序存储结构是一种随即存取的存储结构

通常用高级程序设计语言中的数组来描述线性表的顺序存储结构

查看代码
#define MaxSize 50            //定义线性表的最大长度
typedef struct
    ElemType data[MaxSize];   //顺序表的元素
    int length;               //顺序表的当前长度
SqList;                      //顺序表的类型定义

一维数组可以静态分配,也可以是动态分配

静态分配时,由于数组的大小和空间事先已经固定,一旦空间占满,再加入新的数据就会产生溢出,进而导致程序崩溃

动态分配时,存储数组的空间是在程序执行过程中通过动态存储分配语句分配的,一旦数据空间占满,就另外开辟一块更大的存储空间,用以替换原来的存储空间,从而达到扩充存储数组空间的目的,而不需要为线性表一次性地划分所有空间。

动态分配并不是链式存储,它同样属于顺序存储结构,物理结构没有变化,依然是随机存取方式,只是分配的空间大小可以在运行时动态决定。

#define InitSize 100          //表长度的初始定义
typedef struct
    ElemType *data;           //指示动态分配数组的指针
    int MaxSize,length;       //数组的最大容量和当前个数
SqList;                      //动态分配数组顺序表的类型定义

C的初试动态分配语句为

L.data=(ElemType*)malloc(sizeof(ElemType)*InitSize);

C++的初始动态分配语句为

L.data=new ElemType[InitSize];

顺序表最主要的特点是随机访问,即通过首地址和元素序号可在时间0(1)内找到指定的元素。

顺序表的存储密度高,每个结点只存储数据元素。

顺序表逻辑上相邻的元素物理上也相邻,所以插入和删除操作需要移动大量元素。

插入操作

在顺序表L的第i (1<=i<=L. 1ength+1)个位置插入新元素e。

bool ListInsert(SqList &L,int i,ElemType e)
    if(i<1||i>L.length+1)
        return false;
    if(L.length>=MaxSize)
        return false;
    for(int j=L.length;j>=i;j--)
        L.data[j]=L.data[j-1];
    L.data[i-1]=e;
    L.length++;
    return true;

最好情况:在表尾插入(即i=n+ 1),元素后移语句将不执行,时间复杂度为0(1)。

最坏情况:在表头插入(即i= 1),元素后移语句将执行n次,时间复杂度为0(n)。

平均情况:假设pi (pr= 1/(n+ 1)是在第i个位置上插入- -个结点的概率,则在长度为n的线性表中插入-个结点时,所需移动结点的平均次数为n/2

删除操作

删除顺序表L中第i (1<=i<=L. length)个位置的元素,用引用变量e返回。

bool ListDelete(SqList &L,int i,Elemtype &e)
    if(i<1||i>L.length)
        return false;
    e=L.data[i-1];
    for(int j=i,j<L.length;j++)
        L.data[j-1]=L.data[j];
    L.length--;
    return true;

最好情况:删除表尾元素(即i=n),无须移动元素,时间复杂度为0(1)。

最坏情况:删除表头元素(即i= 1),需移动除表头元素外的所有元素,时间复杂度为O(n)。

平均情况:假设pi (p= 1/n)是删除第i个位置上结点的概率,则在长度为n的线性表中删除一个结点时,所需移动结点的平均次数为n-1/2

按值查找【顺序查找】

在顺序表L中查找第一个元素值等于e的元素,并返回其位序

int LocateElem(SqList L,ElemType e)
    int i;
    for(i=0;i<L.length;i++)
        if(L.data[i]==e)
            return i+1;    //下标为i的元素值等于e,返回其位序1+1
        return 0;          //退出循环,说明查找失败

最好情况:查找的元素就在表头,仅需比较一-次, 时间复杂度为0(1)。

最坏情况:查找的元素在表尾(或不存在)时,需要比较n次,时间复杂度为O(n)。

平均情况:假设p; (p;= 1/n)是查找的元素在第i (1<=i<=L. length)个位置上的概率,则在长度为n的线性表中查找值为e的元素所需比较的平均次数为n+1/2

线性表的链式表示

栈和队列

队列

栈和队列的应用

特殊矩阵的压缩存储

串的定义的实现

串的模式匹配

树与二叉树

树的基本概念

二叉树的概念

二叉树的遍历和线索二叉树

树、森林

树与二叉树的应用

图的基本概念

图的存储及基本操作

图的遍历

图的应用

查找

查找的基本概念

顺序查找和折半查找

B树和B+树

散列表

排序

排序的基本概念

插入排序

交换排序

选择排序

归并排序和基数排序

各种内部排序算法的比较及

外部排序

在黑夜里梦想着光,心中覆盖悲伤,在悲伤里忍受孤独,空守一丝温暖。 我的泪水是无底深海,对你的爱已无言,相信无尽的力量,那是真爱永在。 我的信仰是无底深海,澎湃着心中火焰,燃烧无尽的力量,那是忠诚永在

以上是关于计题02组专业01号数据结构知识点复习408的主要内容,如果未能解决你的问题,请参考以下文章

计题01组001号LeetCode刷题笔记001

22考生这些院校计算机专业改考408

22考生这些院校计算机专业改考408

408计算机统考科目知识整理

2017年408真题复习遗忘掌握不佳知识点

理论计算机网络知识点复习408统考