数据结构知识点汇总(持续更新版)

2024-03-16 07:28

本文主要是介绍数据结构知识点汇总(持续更新版),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数据结构

一、绪论

检测知识:

1.1基本概念

以前的计算机

弹道计算机

现如今

主要运用于非数值的计算

  1. 基本概念和术语

    1. 数据:是信息的载体,描述客观事物属性的值,字符以及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料

    2. 数据元素:是数据的基本单位,通常作为整体进行考虑。

    3. 数据项:一个数据元素是有多个数据项组成,数据项构成数据元素的不可分割的最小的单位。
      1. 举例子

      2. 数据对象:

      3. 数据结构:数据元素之间的关系

      4. 数据类型:一个值的集合和定义再次集合上的操作的总称。

  2. 基本结构三要素

    增删改查等操作

    存储方式上

  3. 关键字:能够区分的数据项(6章)
     

    数据类型、抽象数据类型

    1. 逻辑结构

    2. 数据的运算

    3. 物理存储

  4. 抽象的数据结构就是完整的结构。

  5. 试题

    1. 什么可以定义完整的数据结构? 答案:抽象数据类型

    2. 以下数据中,( )是非线性的数据结构

  6. 解析

1.2算法和算法评价

  1. 算法

    1. 定义:求解问题的步骤

    2. 特性:

      1. 有穷性

      2. 确定性

      3. 可行性

      4. 输入

      5. 输出

      好算法的特性:

      正确:可以运行

      可读:注释

      健壮性:对非法数据进行处理

      高效率和低存储:快慢和低存储

  2. 算法效率的度量

    1. 时间复杂度

      1. 要排除与算法无关的

      2. 要实现提前预估时间

      3. 举例:

        多项相加的项只保留最高阶的项

        洛必达法则:

        直观感受

        常对幂指尖

      4. 思考

        练习:

    1. 空间复杂度

  3. 试题

  4. 答案

二、线性表

脉络图

线性表的基本操作

初始化表:InitList 初始化表 。构造一个空的线性表L,分配内存空间。

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

插入线性表:ListInsert(&L,i,e)在第i个位置插入指定元素e

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

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

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

常用其他操作

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

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

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

Tips:

  1. 对数据的操作,无非就是----创建销毁、增删改查

  2. 函数的定义----<返回值类型>函数名(<参数1类型><参数2类型><参数3类型>)

  3. 开发需求,定义其他基本操作

  4. 函数名和参数形式命名方式

  5. 为什么要用到引用“&”----对参数的修改结果需要“带回来”,举例

     void test(int x){x=1024;printf("test函数内部 x = %d\n",x);}int main(){int x = 1;printf("在调用test函数之前x = %d",x);test(x);printf("在调用test函数之后x = %d\n",x);//不能把结果带回来}

    运行结果:

    引用“&”之后

     void test(int &x){x=1024;printf("test函数内部 x = %d\n",x);}int main(){int x = 1;printf("在调用test函数之前x = %d",x);test(x);printf("在调用test函数之后x = %d\n",x);}

    关键的地方

  6. 为什么需要实现对数据的操作

    1. 团队合作,封装

    2. 避免重复工作

    3. 想明白为什么

回顾:

1.单链表的定义

  1. 什么是单链表

    逻辑结构

    基本运算和操作

    顺序表L

    定义:用顺序存储的方式实现线性表的顺序存储。把逻辑上相邻的元素存储在物理上也相邻的存储单元中,元素之间的关系又存储单元的临接关系来体现。

    每个元素所占的空间是一样大的,n大于等于元素的有限序列。

    优点:可随机存取,存储密度高

    缺点:要求大片连续空间,改变容量不方便。

    问题:怎么知道数据元素的大小:sizeof

     typedef struct{int num;int people;}Customer;​sizeof(int) = 4Bsizeof(Customer) =8B一个汉字是2个字节:2B一个字符是1一个字节=1B 8bit

    顺序表的实现,静态分配

     #define MaxSize 10   //定义最大长度typedef struct{ElemType data[MaxSize];  //用静态的数组存放数据元素 一旦确定就不可以改变int length;//顺序表当前的长度 已经存了多少个元素}Sqllist;​​要给每个数据元素分配连续的存储空间,大小为:MaxSize*sizeof(ElmType)

    具体的代码----顺序表的初步实现

     #include <stdio.h>#define Maxsize 10​​//建结构体typedef struct{int data[MaxSize];int length;}SqList;//定义了一个SqList结构体,这个结构体最大长度为10,和存储了当前顺序表的长度​​//对结构体进行操作,初始化顺序表void InitList(SqList &L){for(int i =0;i<Maxsize;i++){L.data[i] = 0;//覆盖去除掉不干净的数据,让数组里面的原本的数据给替换掉,内存里面会有脏数据}L.length = 0;}​//函数使用int main(){SqList L;//声明一个名为L的自定义数组InitList(L);//初始化表//尝试打印SqList中的数据元素,全部为0for(int i = 0;i <MaxSize;i++){printf("data[%d] = %d",i,data[i]);}system("pause");return 0;}​

    会出现问题:数据满了怎么办?

    回答:放弃治疗,顺序表的长度在刚开始的时候就确定了就无法更改了

    问题:数据申明了很大的空间呢,存在什么问题

    回答:浪费了太多空间了

    单链表

    优点:不要求大片连续空间,改变容量方便

    缺点:不可随机存取,要消耗一定的空间存放指针。

    顺序表的动态分配----指针

    结构体指针

     #define InitSize 10typedef struct{ElemType *data; int MaxSize;int length;}SqList;​

    key:动态申请和释放空间 malloc、free函数 malloc会申请一整片的连续的存储空间 L.data = (ElemType) malloc(sizeof(ElemType)InitSize);

    动态分配

     #define InitSize 10 //默认最大长度typedef struct{int *data;int MaxSize;int length;}SqList;​//初始化表void InitList(SqList &L){//用malloc函数申请一片连续的存储空间L.data = (int *)malloc(InitSize*sizeof(int));L.length = 0;L.MaxSize = InitSize;}​//增加动态数组的长度void IncreaseSize(SqList &L ,int len){int *p = L.data;L.data = (int*)malloc(sizeof(int)*(L.Maxsize+len));for(int i = 0;i<L.length;i++){L.data[i] = p[i];}L.MaxSize = L.MaxSize + len;free(p);}​int main(){SqList L;InitList(L);//对L表进行操作IncreaseSize(L,5);return 0;}

  2. 用代码定义单链表

     //节点struct LNode{ElemType data;struct Lnode *next;}

  3. 实现

    1. 带头结点

    2. 不带头结点

三、栈、队列和数组

四、串

五、数和二叉树

六、图

七、查找

八、排序

这篇关于数据结构知识点汇总(持续更新版)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/814735

相关文章

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,

Java 枚举的常用技巧汇总

《Java枚举的常用技巧汇总》在Java中,枚举类型是一种特殊的数据类型,允许定义一组固定的常量,默认情况下,toString方法返回枚举常量的名称,本文提供了一个完整的代码示例,展示了如何在Jav... 目录一、枚举的基本概念1. 什么是枚举?2. 基本枚举示例3. 枚举的优势二、枚举的高级用法1. 枚举

基本知识点

1、c++的输入加上ios::sync_with_stdio(false);  等价于 c的输入,读取速度会加快(但是在字符串的题里面和容易出现问题) 2、lower_bound()和upper_bound() iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。 iterator upper_bou

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

《数据结构(C语言版)第二版》第八章-排序(8.3-交换排序、8.4-选择排序)

8.3 交换排序 8.3.1 冒泡排序 【算法特点】 (1) 稳定排序。 (2) 可用于链式存储结构。 (3) 移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时, 此算法不宜采用。 #include <stdio.h>#include <stdlib.h>#define MAXSIZE 26typedef int KeyType;typedef char In

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

STL经典案例(四)——实验室预约综合管理系统(项目涉及知识点很全面,内容有点多,耐心看完会有收获的!)

项目干货满满,内容有点过多,看起来可能会有点卡。系统提示读完超过俩小时,建议分多篇发布,我觉得分篇就不完整了,失去了这个项目的灵魂 一、需求分析 高校实验室预约管理系统包括三种不同身份:管理员、实验室教师、学生 管理员:给学生和实验室教师创建账号并分发 实验室教师:审核学生的预约申请 学生:申请使用实验室 高校实验室包括:超景深实验室(可容纳10人)、大数据实验室(可容纳20人)、物联网实验

C++语法知识点合集:11.模板

文章目录 一、非类型模板参数1.非类型模板参数的基本形式2.指针作为非类型模板参数3.引用作为非类型模板参数4.非类型模板参数的限制和陷阱:5.几个问题 二、模板的特化1.概念2.函数模板特化3.类模板特化(1)全特化(2)偏特化(3)类模板特化应用示例 三、模板分离编译1.概念2.模板的分离编译 模版总结 一、非类型模板参数 模板参数分类类型形参与非类型形参 非类型模板

枚举相关知识点

1.是用户定义的数据类型,为一组相关的常量赋予有意义的名字。 2.enum常量本身带有类型信息,即Weekday.SUN类型是Weekday,编译器会自动检查出类型错误,在编译期间可检查错误。 3.enum定义的枚举类有什么特点。         a.定义的enum类型总是继承自java.lang.Enum,且不能被继承,因为enum被编译器编译为final修饰的类。         b.只能定义