寒假关于学习数据结构周笔记(一)

第一章
数据对象:是性质相同的数据元素的集合,是数据的子集。
不同数据元素之间不是独立的,而是存在特定的关系,我们将这些关系称为结构。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
数据结构分为物理结构和逻辑结构。
逻辑结构:是指数据对象中数据元素之间的相互关系。逻辑结构有四种;1,集合结构:集合结构中的数据元素除了同属于一个集合外,他们之间没有其他的关系。 2,线性结构:线性结构中的数据元素之间是一对一的关系。 3,树形结构:树形结构中的数据元素之间存在一种一对多的层次关系。 4,图形结构:图形结构中的数据元素是多对多的关系。
物理结构:是指数据的逻辑结构在计算机中的储存形式。
数据元素的储存结构形式有两种:顺序储存和链式储存。1,顺序储存:是把数据元素储存在地址连续的储存单元里,其数据间的逻辑关系和物理关系是一致的。2,链式储存结构:是把数据元素储存在任意的储存单元里,这组储存单元可以是连续的,也可以是不连续的。
数据类型:是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。
数据类型有两类:1,原子类型:是不可以分解的基本类型,包括整型实型字符型等。 2,结构类型:由若干个类型组合而成,是可以再分解的。例如,整型数组是由若干个整型数据组成的。
抽象是指抽取出事物具有的普遍性的本质。它是抽出问题的特征而忽略非本质的细节,是对具体事物的一个概括。
抽象数据类型:是指一个数学模型及定义在该模型上的一组操作。抽象数据类型的定义仅取决于它的一组逻辑性,而与其在计算机内部如何表示和实现无关。
抽象的意义在于数据类型的数学抽象特性。抽象数据类型体现了程序设计中问题分解,抽象和信息隐藏的特性。
第二章
算法:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。
算法具有五个基本特征:输入、输出、有穷性、确定性、和可能性。
输入和输出:算法具有零个或多个输入。算法至少有一个或多个输出。
有穷性:指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成。
确定性:算法的每一步骤都具有确定的含义,不会出现二义性。
可行性:算法的每一步都必须是可行的,也就是说,每一步都能够通过执行有限次数完成。正确性:算法的正确性是指算法至少应该具有输入、输出和加工处理无歧义,能正确反映问题的需求,能够得到问题的正确答案。
算法的正确性在用法上有很大的差别,大体分为四个层次:1,算法程序没有语法错误。 2,算法程序对于合法的输入数据能够产生满足要求的输出结果。 3,算法程序对于非法的输入数据能够得到满足规格说明的结果。 4,算法程序对于精心选择的,甚至刁难的测试数据都有满足要求的输出结果。 一般情况下层次3作为一个算法是否正确的标准。
可读性:算法设计的另一目的是为了便于理解、阅读和交流。 可读性是算法(也包括实现它的代码)好坏很重要的标志。
健壮性:当输入数据不合法时,算法也能做出相关处理,而不是产生异常或莫名其妙的结果。设计算法应该尽量满足时间效率高和储存量低的需求。( 时间效率指的是算法的执行时间。)(储存量需求指的是算法在执行过程中需要的最大储存空间,主要指算法程序运行时所占用的内存或外部硬盘储存空间)
好的算法应该具有正确性、可读性、健壮性、高效率和低储存的特征。
事后统计法:这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低。但这种方法有着很多的缺陷,所以不予采纳。
事前分析估算法:在计算机程序编制前,依据统计方法对算法进行估算。
一个高级程序语言编写的程序在计算机上运行时所消耗的时间取决于四点:1、算法采用的策略、方法。 2、编译产生的代码质量。 3、问题的输入规模。 4、机器执行指令的速度。(第一条是算法好坏的根本,第二条要有软件来支持,第四条要看硬件性能)
一个程序的运行时间,依赖于算法的好坏和问题的输入规模。问题输入规模是指输入量的多少。在分析程序的运行时间时,最重要的是把程序看出独立于程序设计语言的算法或一系列步骤。
函数的渐近增长:给定两个函数f(n)和g(n),如果存在一个整数N,使得对于所有的n>N,f(n)总是比g(n)大,那么,我们说f(n)的增长渐近快于g(n)。
函数渐近增长可以忽略加法常数,与最高次项相乘的常数关系不大,最高次项的指数大的,函数随着n的增长,结果也会变得增长特别快。
判断一个算法的效率时,函数中的常数和其他次要项常常可以忽略,而更应该关注主项(最高项阶)的阶数。
某个算法,随着n的增大,它会越来越优于另一算法,或者越来越差于另一算法。(这就是事前估算方法的理论依据,通过算法时间复杂度来估算算法时间效率。)
在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。
算法的时间复杂度,也就是算法的时间度量,记作:T(n)=O(f(n))。它表示随问题规模n的增大,算法执行时间·的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数。这样用大写O()来体现算法时间复杂度的记法,我们称为大O记法。分析算法的复杂度,关键就是要分析循环结构的运行情况。
推导大O阶:1、用常数1取代运行时间中的所有加法常数。 2、在修改后的运行次数函数中,只保留最高项阶。 3、如果最高阶项存在且不是1,则去除与这个项相乘的常数。 得到的结果就是大O阶。
算法的空间复杂度通过计算算法所需的储存空间实现,算法空间复杂度的计算公式记作:S(n)=O(f(n)),其中,为问题的规模,f(n)为语句关于n所占储存空间的函数。
第三章
线性表(List):零个或多个数据的有限序列。线性表元素的个数n(n>=0)定义为线性表的长度,当n=0时,称为空表。在较复杂的线性表中,一个数据元素可以由若干个数据项组成。线性表的操作如下:1)MakeEmpty(L) 这是一个将L变为空表的方法2)Length(L) 返回表L的长度,即表中元素个数3)Get(L,i) 这是一个函数,函数值为L中位置i处的元素(1≤i≤n)4)Prior(L,i) 取i的前驱元素5)Next(L,i) 取i的后继元素6)Locate(L,x) 这是一个函数,函数值为元素x在L中的位置7)Insert(L,i,x)在表L的位置i处插入元素x,将原占据位置i的元素及后面的元素都向后推一个位置8)Delete(L,p) 从表L中删除位置p处的元素9)IsEmpty(L) 如果表L为空表(长度为0)则返回true,否则返回false10)Clear(L)清除所有元素11)Init(L)同第一个,初始化线性表为空12)Traverse(L)遍历输出所有元素13)Find(L,x)查找并返回元素14)Update(L,x)修改元素15)Sort(L)对所有元素重新按给定的条件排序16) strstr(string1,string2)用于字符数组的求string1中出现string2的首地址线性表的两种物理结构:顺序储存结构 链式储存结构
线性表的顺序储存结构,指的是用一段地址连续的储存单元依次储存线性表的数据结构。(用一维数组来实现顺序储存结构)
描述顺序结构需要三个属性:1、储存空间的起始位置:数组data,它的储存位置就是储存空间的储存位置。 2、线性表的最大储存容量:数组长度MaxSize. 3、线性表的当前长度:length.数组的长度是存放线性表的储存空间的长度,储存分配后这个量一般是不变的。
线性表的长度是线性表中数据元素的个数,随着线性表插入和删除操作的进行,这个量是变化的。
在任意时刻,线性表的长度应该小于等于数组的长度。储存器中的每个储存单元都有自己的编号,这个编号称为地址。
顺序储存结构插入算法的思路:1、如果插入位置不合理,抛出异常。2、如果线性表的长度大于等于数组长度,则抛出异常或动态增加容量。3、从最后一个元素开始向前遍历到第i个位置,分别将它们都向后移动一个位置。4、将要插入元素填入位置I处。5、表长加一。
顺序储存结构删除算法的思路:1、如果删除位置不合理,抛出异常。2、取出删除元素。3、从删除元素位置开始遍历到最后一个元素位置,分别将它们都向前移动一个位置。4、表长减一。
线性表顺序储存结构的优点:1、无须为表示表中元素之间的逻辑关系而增加额外的储存空间。2、可以快速地存取表中任一位置的元素。
线性表顺序储存结构的缺点:1、插入和删除操作需要移动大量元素。2、当线性表长度变化较大时,难以确定储存空间的容量。3、造成储存空间的”碎片“。
在线性表的链接存储中,为了方便在表头插入和删除结点的操作,经常在表头结点(存储第一个元素的结点)的前面增加一个结点,称之为头结点或表头附加结点。这样原来的表头指针由指向第一个元素的结点改为指向头结点,头结点的数据域为空,头结点的指针域指向第一个元素的结点。链表中第一个结点的储存位置叫做头指针。
为了更加方便地对链表进行操作,会在单链表的第一个结点前附设一个结点,称为头结点,头结点的数据域可以不储存任何信息。
头指针:1、头指针是指链表指向第一个结点的指针,若链表有头结点,则是指向头结点的指针。2、头指针具有标识作用,所以常用头指针冠以链表的名字。3、无论链表是否为空,头指针均不为空。头指针是链表的必要元素。
头结点:1、头结点是为了操作的统一和方便而设立的,放在第一元素的结点之前,其数据域一般无意义(也可存放链表的长度)。2、有了头结点,对在第一元素结点前插入结点和删除第一结点,其操作与其它结点的操作就统一了。3、头结点不一定是链表必须要素。
结点由存放数据元素的数据域和存放后继结点地址的指针域组成。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值