c++按顺序查找一个字符串是否含有某个字符_数据结构基础 (代码效率优化, 线性表, 栈, 队列, 数组,字符串,树和二叉树,哈希表)...

本文探讨了数据结构的基础知识,重点讲解了c++中如何按顺序查找字符串中的字符。文章介绍了线性表、栈、队列、数组、字符串、树和二叉树以及哈希表的概念和操作。线性表中的栈和队列通过限制操作提升了效率,而数组和字符串提供了不同的存储方式。哈希表通过哈希函数实现快速查找,解决冲突的方法包括开放定址法和链地址法。此外,文章还提供了相关操作的时间复杂度分析。
摘要由CSDN通过智能技术生成

69347384e5ac953ca809c5f074df2566.png

作者:张人大


代码效率优化

复杂度 -- 一个关于输入数据量n的函数

  • 时间复杂度 -- 昂贵
    • 与代码的结构设计有着紧密关系
    • 一个顺序结构的代码,时间复杂度是O(1), 即任务与算例个数 n 无关
  • 空间复杂度 -- 廉价
    • 与数据结构设计有关

数据结构 -- 考虑如何去组织计算机中一定量的数据。

数据结构连接时空,用空间换取时间。

数据处理 -- 了解问题,明确数据操作方法,设计出更加高效的数据结构类型

  • 找到需要处理的数据,计算结果,再把结果保存下来
    • 把结果存到新的内存空间中
    • 把结果存到已使用的内存空间中
  • 基本操作只有三个:增,删,查
    • 增和删可以细分为数据结构的中间以及最后的增和删
    • 查找可以细分为按照位置条件查找和数据数值特征查找
    • 所有数据处理都是这些基本操着的组合和叠加
  • 只有字典类型数据结构能在 O(1) 的时间复杂度内完成查找动作
  • 回归问题本源,明确数据被处理的动作,来解决数据结构的问题
想了解更多,欢迎关注我的微信公众号:Renda_Zhang

线性表

n 个具有相同特性的元素的有限序列,Linear List

数据元素之间的关系是一对一的关系

  • 即除了头尾元素外,其它数据元素都是首尾相接的
    • 这句话只适用大部分线性表,而不是全部
    • 比如,循环链表尾的指针指向首位结点

实现方式

  • 最常用的是链式表达,也叫线性链表或链表
    • 每个结点包括具体的数据值和指向下一个结点的指针
    • 单向链表,循环链表,双向链表,双向循环链表
    • 新增和删除为 O(1) 时间复杂度,而查找为 O(n)
    • 适合数据元素个数不确定,且经常进行新增和删除
    • 链表的翻转,快慢指针的方法,是必须掌握的内容
  • 使用数组实现,也叫顺序存储,顺序表

类别

  • 一般线性表,可以自由的删除和添加结点
  • 受限线性表,主要包含栈和队列

栈和队列是特殊的线性表,本质上他们都可以被看作是一类基本结构

线性表案例

  • 链表的翻转
  • 快慢指针
    • 查找奇数个数的链表的中间位置结点的数值
    • 判断链表是否有环

后进先出的(限制后的)线性表,Last In First Out, Stack.

新增和删除操作只能在这个线性表的表尾进行,即在线性表基础上加了限制

  • 新增: 压栈 push, which adds an element to the collection
  • 删除: 出栈 pop, which removes the most recently added element

功能上,数组或者链表可以代替栈,但它们灵活性过高,数据量大时有风险

栈顶和栈底是用来表示这个栈的两个指针

  • 栈顶 (top) 是表尾,用来输入数据
  • 栈底 (bottom) 是表头

栈有顺序表示和链式表示,分别称作顺序栈和链栈

  • 顺序栈
    • 可以借助数组来实现
      • 数组的首元素存在栈底,尾元素放在栈顶
      • 定义指针 top 来指示栈顶元素在数组的位置
    • 栈中只有一个元素,则 top = 0
    • 以 top 是否为
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值