C语言数据结构相关知识点整理

C语言数据结构相关知识点整理

数据结构概念

数据:现实生活中一切需要被处理的数据
结构:数据的逻辑结构、存储结构
数据结构:研究数据的逻辑结构、存储结构及其操作

逻辑结构

元素集合、线性关系(1:1)、树状关系(1:n)、网状关系(n:m)

储存结构

顺序存储

顺序存储:逻辑上连续的数据,在物理空间上也连续
优点:查询方便,利用率高
缺点:插入、删除元素不方便(要移动大量元素),对空间要求较高

链式存储

链式存储:逻辑上连续的数据,在物理空间上不一定连续
优点:插入和删除方便,对空间的要求较低
缺点:查询不方便,空间存储有效利用率小于1,对编译环境有要求

索引存储

索引存储:有索引表,索引表占有一定空间,插入和删除数据之后要跟新索引表,有时间开销,查询方便,插入和删除不方便。

哈希存储

哈希存储:根据所要查询的关键字,直接定位到记录本身,查询方便,插入和删除也方便,但如果哈希函数设置不合理,会降为索引存储。

线性关系

线性表、顺序表、链表三者之间的关系

  • 线性表是一种逻辑结构,表示的是一对一的线性关系,顺序表和链表是线性表在不同的存储状态下的不同表现

  • 顺序表:
    1、逻辑上相邻的元素,在物理空间上也连续
    2、查询方便,插入和删除不方便
    3、空间存储的效率最大可达到1
    4、对于静态顺序表来说,表满不能存,表空不能取
    5、顺序表对空间的要求比较高
    6、容易有空间碎片的产生

  • 链表:
    1、逻辑上相邻的元素,在物理空间上不一定相邻
    2、插入和删除方便,查询不方便
    3、空间的存储效率小于1
    4、表的长度较为灵活
    5、对空间的要求没有那么大
    6、对编译环境有要求,必须要求编译环境支持指针类型的操作
    如何选择顺序表还是链表:
    1、基于操作分析:
    如果更多的是插入和删除,优选选择链表,更多是查询操作,优选选择顺序表。
    2、基于空间要求:
    如果对空间存储密度有要求,优先选择顺序表,否则选择链表,因为链表对空间的包容性比较大,不容易出现碎片。
    3、基于编译环境要求:
    如果编译环境部支持指针类型操作,只能使用顺序表。

顺序存储

顺序表

定义
创建
插入
删除
显示
删除
查询
修改
导入
导出
销毁
扩容

链式存储

链表分类

在这里插入图片描述

带头结点单向不循环链表
带头结点单向循环链表

尾结点的判定发生了改变,尾结点的Next指向了头结点
操作依据一般是表尾

双向链表

头结点的pre 和 尾结点的 Next

双向循环链表
收限制的线性表

栈、队列、串
栈:只允许在一端执行插入和删除操作,被插入和删除的一端叫作栈顶,栈是先进后出的FILO
队列:只允许在一端执行插入操作,另外一端执行删除操作,允许被插入的一端叫队尾,允许出队的一端叫作队头,队列是先进先出的,FIFO
串:受限在存储上,只允许存储字符 子串的判断 --KMP

栈顺序存储
栈链式存储
共享栈
队列顺序存储
队列链式存储
双端队列
栈和队列的应用

树状关系

普通树转二叉树

顺序存储

链式存储

树结点的定义
创建树
插入元素(排序二叉树)
访问
先序遍历
中序遍历
后续遍历

图状关系:

顺序存储

链式存储

图的遍历

算法

算法:一堆指令的有序集合

算法的特征

  1. 唯一性:每一句话只有一种解释

  2. 有穷性:算法能描述完

  3. 可执行性

  4. 输入

  5. 输出
    算法和程序的区别:
    程序是用语言实现算法的代码
    算法是静态的,程序是动态的
    算法是有穷的,程序是无穷的

  6. 算法执行的代价
    空间复杂度:算法在执行的时候,需要内存提供给我们多少空间才能保证算法正常工作
    1、字节对齐
    2、位域
    3、减少额外空间
    4、用完即释放
    时间复杂度:算法在执行的时候,需要花费的时间
    研究时间复杂度的量级O(n)
    优化时间复杂度:
    1、减少循环的使用
    2、减少无用代码存在

常见的查找算法

线性:
  1. 顺序查找:从前往后按顺序查找
  2. 二分查找:对于有序的顺序表来说,可以使用二分查找
  3. 分块查找:块间有序,快内无序
树状:
  1. 排序二叉树:排序二叉树类似于链表的二叉分查找
哈希查找

hash表,又称散列表。哈希查找是一种基于哈希函数的查找算法,通常用于在大型数据集中快速查找目标数据的位置。在哈希查找中,首先将数据通过哈希函数映射为一个索引值,然后在该索引值对应的位置上查找目标数据。

构建哈希函数的方法

直接地址法
平方取中法
质数求余法
冲突:多个记录的关键字指向一个空间
解决冲突:开发地址法、链地址法

常见的排序算法

内部排序
交换

冒泡排序:每次运行总会将最小或最大的放到前面,如果需要交换,一直在交换
快速排序:经过一次快速排序的过程,将待排序的元素分成两部分,比较基准小的,比较基准大的,再分别对这两部分进行快速排序

插入

直接插入:重构链表
折半插入:原理同排序二叉树的插入,只是对象是一个有序的顺序表
希尔排序:曾量,逐渐减少的,直到增量为1为止

选择

简单选择:每次运行总会将最小或最大的放到最前面,如果交换,只交换一次
堆(大根堆, 小根堆)

归并

归并排序

基数

基数排序:从最低位开始排起,排到最高位位置

外部排序:

基于归并的:时间花销:数据的读和写、内部排序、选择谁最小

  • 14
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值