大话数据结构

大话数据结构

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

第一章 概述
3.数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间关系和操作等相关问题的学科。
4.数据:描述客观事物的符号,是计算机中可操作的对象,可以被计算机识别,并输入给计算机处理的符号集合。(数值类型:整型、实型,非数值类型:声音、图像、视频,数据:即符号。1—可输入到计算机中,2—能够被计算机程序处理)
数据元素:组成数据的、有一定意义的基本单位。
数据项:一个数据元素可由多个数据项组成。(数据不可分割的最小单位)
数据对象:性质相同的数据元素的集合,是数据的子集。
5.逻辑结构:数据对象中数据元素之间的相互关系。
集合结构:数据元素只是同属于一个集合,之间没有其他关系。
线性结构:数据元素之间是一对一的关系。
树形关系:数据元素之间存在一对多的层次关系。
图形关系:数据元素之间是多对多的关系。
物理结构:数据的逻辑结构在计算机中的存储形式。(将数据及其逻辑结构存储到计算机的内存中)
数据元素的存储结构:顺序存储和链式存储。
顺序存储结构:数据元素存放在地址连续的存储单元中,数据间的逻辑关系和屋里关系是一致的。
链式存储结构:数据元素存放在任意的存储单元中,存储单元连续或不连续。(数据元素的存储关系并不能反映其逻辑关系,应用一个指针来存放数据元素的地址,通过地址找到相关联的数据元素的位置)
6.数据类型:一组性质相同的值的集合及定义在此集合上的一些操作的总称。
抽象:找出事物具有的普遍性的本质。
抽象数据类型:一个数学模型及定义在这个模型上的一组操作。(体现了程序设计中问题分解、抽象和信息隐藏的特性。)

第二章 算法
算法:解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。
5.基本特征:输入、输出、有穷性、确定性、可行性
输入:零个或多个输入 输出:一个或多个输出 有穷性:在执行有限步骤之后,自动结束,在可接受的时间执行完。
确定性:每一步都有明确的含义,无二义性 可行性:每一步都可通过执行有限步完成
6.算法设计要求:正确性、可读性、健壮性、高效性
7.事前分析估算方法:在计算机程序编制前,依据统计方法对算法进行估算。
8.判断一个算法的效率时,函数中的常数和其他次要项常常可以忽略,而更应该关注主项(最高阶项)的阶数。
某个算法,随着n的增大,它会越来越优于另一个算法,或者越来越差于另一个算法。(通过计算算法时间复杂度来估算算法时间效率)
9.算法的时间复杂度:算法的时间量度T(n)=O(f(n))。(一般情况下,随着n的增长,T(n)增长最慢的算法是最优算法)
O(1)是常数阶,O(n)是线性阶,O(n2)是平方阶
推导方法:用常数1取代运行时间中所有加法常数(对于分支结构,无论是真是假 ,执行次数都是恒定的,不会随着n的变大而发生变化,所以单纯的分支结构(不包含在循环结构中),其时间复杂度是O(1))
~在修改后的运行次数函数中,只保留最高阶项。
~如果最高阶项存在且不是1,则去除与这个项相乘的常数。
~循环的时间复杂度等于循环体的复杂度乘以该循环运行的次数、

第三章 线性表
线性表:零个或多个数据元素的有限序列。
4.线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。
线性表的长度是线性表中数据元素的个数,随着线性表插入和删除操作的进行这个量是变化的。(任意时刻,线性表的长度小于等于数组长度)
用数组存储顺序表意味着要分配固定长度的数组空间,由于线性表中可以进行插入和删除操作,因此分配的数组空间要大于等于当前线性表的长度。
6.链式存储结构特点:用一组任意的存储单元存储线性表的数据元素,存储单元可以连续也可不连续。(数据元素存在于内存未被占用的任意位置)
数据域(存储数据元素信息的域)+指针域(存储直接后继位置的域) 指针域中存储的信息成为指针或域 结点:这两部分信息组成数据元素ai的存储映像
单链表:n个结点链结成一个链表,即为线性表的链式存储结构,因为此链表的每个结点中只包含一个指针域(单链表正是通过每个结点的指针域将线性表的数据元素按其逻辑次序链接在一起)
头结点:在单链表的第一个结点前设一个结点(数据域可以不存储任何信息)
若线性表为空表,则头结点的指针域为“空”
结点由存放数据元素的数据域存放后继结点地址的指针域组成。
8.单链表的插入标准语句:s->next=p->next ;p->next=s;(在结点p后插入结点s)
C语言的malloc标准函数,作用是生成一个新的结点,类型和Node是一样的,实质是在内存中找一块空地,准备用来存放e数据s结点。
单链表的删除(将结点q进行删除):q=p->next;(类似于进行q的定义)p->next=q->next 或者说:p->next=p->next->next
C语言的标准函数free,其作用是让系统回收一个Node结点,释放内存。
对于插入或删除数据越频繁的操作,单链表的效率优势就越明显。
9.头插法:始终让新结点在第一的位置。 尾插法:把每次新结点都插在终端结点的后面。
11.宜采用顺序存储结构:若线性表需要频繁查找,很少进行插入和删除操作时。 宜采用单链表结构:若需要进行频繁插入和删除操作。
12.静态链表:用数组描述的链表。(通常会将数组建立的大一些,以便有一些空闲可以便于插入时不至于溢出。)
在动态链表中,结点的申请和释放分别借用malloc()和free()两个函数进行实现。
在静态链表中,操作的是数组,不存在像动态链表的结点申请和释放问题,因此要进行实现这两个函数,才可以做插入和删除操作。
14.双向链表:在每个单链表的每个结点中,一个指向直接前驱,另一个指向直接后继。

第四章 栈和队列(操作受限的线性表)
栈:限定在表尾进行插入和删除操作(栈顶)的线性表。
队列:只允许在一端进行插入操作(队尾)、在另一端进行删除操作(队头)的线性表。
2.栈是一个线性表,具有线性关系(前驱后继关系),在栈顶进行插入和删除操作。(栈底固定,最先进栈的只能在栈底)
栈的插入操作:进栈、压栈、入栈 栈的删除操作:出栈、弹栈
栈对线性表的插入和删除的位置进行了限制,并没有对元素进出的时间进行限制。(在不是所有元素都进栈的情况下,事先进去的元素也可以出栈,只要保证是栈顶元素出栈就可)
1、2、3依次进栈,则出栈次序有:123、321、213、132、231
4.当栈存在一个元素时,top等于0,。通常将空栈的判定条件定为top=-1
进栈时:要进行判断是否栈满 出栈时:要进行判断是否栈空
5.栈的顺序存储结构的缺陷是,必须事先确定数组存储空间大小。
对于两个相同类型的栈,可以最大限度的利用其事先开辟的存储空间来进行操作。
在两个相同类型的栈共享一块数组存储空间时,两个栈见面时,也就是两个指针之间相差1时,即为top1+1=top2,此时栈满。
8.迭代使用的是循环结构,递归使用的是选择结构。
10.队列:只允许在一段进行插入和删除操作,进行插入的一端是队尾,删除的一端是队头
12.入队列操作,就是在队尾追加一个元素,不需要移动任何元素,因此时间复杂度是O(1)
出队列操作:就是在队头进行删除元素,因此要将后面的元素全部进行前移,以保证队列的队头,也就是下标为0的位置不为空,此时时间复杂度为0(n)
为了避免当只有一个元素时,队头和队尾重合使处理变得麻烦,所以引入两个指针。front指针指向队头元素,rear指针指向队尾元素的下一个元素,这样当front==rear时,此队列不是还剩一个元素,而是空队列。
解决假溢出的方法就是在后面满了的情况下,从头开始,也就是头尾相接的循环。循环队列:按头尾相接的顺序进行存储的存储结构的队列。
队列的链式存储结构:就是线性表的单链表,只不过是只能队尾进行插入队头进行删除而已,简称为链队列。(将队头指针指向链表的头结点,将队尾指针指向终端结点。)
空队列时,front和rear都指向头结点。

第五章 串
串是由零个或多个字符组成的有限序列,又可称为字符串。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值