大话数据结构学习day01

数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等相关的问题的学科。

数据:符号,可以输入到计算机中;能被计算机程序处理。

数据元素:是组成数据的,有一定意义的基本单位,在计算机中通常作为整体处理,也被称为记录。

数据项:一个数据元素可以由若干个数据项组成。数据项是数据不可分割的最小单位

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

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

逻辑结构:数据对象数据元素之间的相互关系。(集合结构、线性结构、树形结构、图形结构)

物理结构:数据的逻辑结构在计算机的存储形式。(顺序存储结构、链式存储结构)

顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据见的逻辑关系和物理关系是一致的。

链式存储结构:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。

数据类型:是指一组性质相同的值的集合以及定义在此几何上的一些操作的总称。

原子类型:是不可以再分解的基本类型,包括整型,实型,字符型等。

结构类型:由若干个类型组合而成,是可以再分解的。例如,整型数组是由若干整型数据组成的。

抽象数据类型:是指一个数学模型及定义在该模型上的一组操作。

算法的五个基本特征:输入,输出,有穷性,确定性,可行性。

我们要分析算法的复杂度,关键就是要分析循环结构的运行情况

在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n) = O(f(n)). 它表示随着问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称为时间复杂度。其中f(n)是问题规模n得到某个函数。

一般情况下,随着n的增大,T(n)增长最慢的算法为最有优算法。

推导大O阶方法: 1. 用常数1取代运行时间中的所有加法常数。 2. 在修改后的运行次数函数中,只保留最高阶项。 3. 如果最高阶项存在且不是1,则去除与这个项相乘的常数,得到的结果就是大O阶。

对于分支结构而言,无论是真,还是假,执行的次数都是恒定的,不会随着n的变大而发生变化,所以单纯的分支结构(不包括在循环结构中),其时间复杂度也是O(1)。

循环的时间复杂度等于循环体的复杂度乘以该循环运行的次数。

线性表:零个或多个数据元素的有限序列。
若将线性表记为(a1, ai-1,ai-2,ai+1,….,an),则表中Ai-1领先于ai,ai领先于ai+1, 称为ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素。当i=1,2…., n-1时,ai有且仅有一个直接后继,当i=2,3,。。。n时,ai有且仅有一个直接前驱。

所有线性表元素的个数n(n>=)定义为线性表的长度,当n=0时,称为空表。

在较复杂的线性表中,一个数据元素可以由若干个数据项组成。

ClearList(*L): 将线性表清空。

GetElem(L,I,*e): 将线性表L中的第i个位置元素值返回给e。

LocateElem(L,e):在线性表L中查找与给定值e相等的元素,如果查找成功,返回该元素在表中序号表示成功;否则,返回0表示失败。

ListInsert(*L,i,e):在线性表L中的第i个位置插入元素e。

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

ListLength(L):返回线性表L的元素个数。

线性表的顺序存储结构,指的是用一段地址连续的存储单元一次存储线性表的数据元素。

一维数组可以实现顺序存储结构,即把第一个数据元素存到数组下标为0的位置中,接着把线性表相邻的元素存储在数组中相邻的位置。

用数组存储顺序表意味着要分配固定长度的数组空间,由于线性表中可以进行插入和删除操作,因此分配的数组空间要大于等于当前线性表的长度。存储器中的每个存储单元都有自己的编号,这个编号称为地址。

对于线性表得到顺序存储结构来说,如果我们要实现GetElem操作,即将线性表L中的第i个位置元素值返回,只要i的数值在数组下标范围内,就是把数组第i-1下标的值返回即可。

插入算法的思路:1. 如果插入位置不合理,抛出异常;2. 如果线性表长度大于等于数组长度,则抛出异常或动态增加容量; 3.从最后一个元素开始向前历遍到第i个位置,分别将他们都往后移动一个位置; 4.将要插入元素填入位置i处; 5. 表长加1。

删除算法的思路:如果删除位置不合理,抛出异常;取出删除元素; 从删除元素位置开始遍历到最后一个元素位置,分别将他们都往前移动一个位置; 表长减1.

线性表的顺序存储结构的优缺点:优点:无需为表中元素之间得到逻辑关系而增加额外的存储空间; 可以快速的存取表中任何一个位置的元素; 缺点:插入和删除操作需要移动大量元素; 当线性表长度变化较大时,难以确定存储空间的容量;曹诚存储空间的“碎片”。

为了表示每个数据元素ai与其直接后继数据元素ai+1之间的逻辑关系,对数据元素ai来说,除了存储其本身的信息外,还需存储一个指示其直接后继的信息。我们把存储数据元素的域称为数据域,把存储直接后继位置称为指针域,指针域中存储的信息称为指针或者链。这两部分信息组成数据元素ai的存储映像,称为结点

N个结点(ai的存储映像)链结成一个链表,即为线性表(a1,a2,a3……,an)的链式存储结构,因为此链表的每个节点中只包含一个指针域,所以叫做单链表

链表中第一个结点的存储位置叫做头指针。线性链表中的最后一个结点指针称为“空”。

为了更加方便的对链表进行操作,会在单链表的第一个结点钱辐射一个结点,称为头结点。头节点的数据域可以不存储任何信息。

头指针:是指链表指向第一个结点的指针,若链表由头节点,则是指向头结点的指针;头指针具有标识作用,所以常用头指针冠以链表的名字;无论链表是否为空,头指针均不为空,头指针是链表的必要元素。

头节点:是为了操作的同意和方便而设立的,放在第一元素的结点之前,其数据域一般无意义;有了头节点,对在第一元素结点前插入结点和删除第一节点,其操作与其他结点的操作就统一了;头节点不一定是链表的必须要素。

结点由存放数据元素的数据域存放后继结点指针地址的指针域组成。

获得链表第i个数据的算法思路: 1. 声明一个结点p指向链表第一个结点,初始化j从1开始; 当j<I 时,就遍历链表,让p的指针向后移动,不断指向下一结点,j累加1; 若到链表末尾p为空,返回结点p的数据。

由于单链表的结构中没有定义表长,所以不能事先知道要循环多少次,因此也就不方便使用for来控制循环。其重要核心思想就是“工作指针后移”。

 

全部内容整理摘抄自《大话数据结构》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值