数据结构和算法
算法
概念
1.算法是指解题方案的完整且准确的描述,是一系列解决问题的清晰指令;算法不等于数学上的计算方法,也不等于程序。
2.常见的算法设计方法有:列举法、归纳法、递推法、递归法等
3.算法设计时,不能只考虑算法的效率,还需要考虑其他的因素
特性
可行性:每个步骤必须能够实现,且执行结构能达到预期目的
确定性:每个步骤都有其确定的含义,不存在有多个含义的情况
有穷性:必须在有限的时间内完成,因而算法必须能在执行有限个步骤之后终止
拥有足够的情报:一个有效的算法应该有足够多的、正确的输入信息或初始化信息,并且至少有一个输出结果
复杂度
1.算法复杂度主要包括:时间复杂度和空间复杂度,并且这两者没有直接的联系
2.时间复杂度:执行算法所需要的计算工作量,则算法语句执行的次数
3.空间复杂度:算法在执行过程中所需要的的计算机存储空间,包括程序本身所占的存储空间、输入数据所占的存储空间、算法执行过程中所需要的的额外空间。
4.若额外空间量相对于问题规模(输入数据所占的存储空间)来说常数即额外空间量不随问题规模的变化而变化,则称算法是原地工作的。
数据结构
1.即带有结构的数据元素的集合
2.在数据处理时,通常把数据元素之间的特殊关系称为前后件关系
数据结构的两种表示方法:
1.二元组:B=(D,R) D表示所有的数据元素 R表示它们之间的关系(注意是前后件关系)
2.图形
3.数据结构的分类
逻辑结构
1.数据的逻辑结构是值反映数据元素之间逻辑关系(前后件关系)的数据结构
2.数据的逻辑结构分为:线性结构和非线性结构
存储结构
1.数据的逻辑结构在计算机存储空间中的存放形式被称为数据的存储结构,也可以称为数据的物理结构
2.常见的存储结构有:顺序存储、链式存储、索引存储、散列存储等
线性结构
线性表概念
1.线性表是一种逻辑结构,它是最简单、最常见的一种数据结构
2.在线性表中,数据元素之间是一对一的关系
3.线性表是由n(n≥0)个相同数据类型得到数据元素组成的一个有限序列,将其表示为(a1,a2,a3....an);
4.其中a1,a2,a3....an表示n个数据元素,a1为表头元素,也叫根节点;an为表尾元素,也叫终端节点
=
线性表的特性
非空线性表的结构特征:
1.有且只有一个根节点a1,它无前件
2.有且只有一个终端节点an,它无后件
3.线性表的节点个数就是该表线性表的长度
4.当n = 0时,线性表为空表
线性表的顺序存储——顺序表
1.将线性表中的数据元素存储在一组地址连续的存储单元里,使得逻辑上相邻的两个元素在物理位置也相邻,称为线性表的顺序存储,又称为顺序表
2.在顺序表中可以进行插入、删除、修改、查询数据元素等操作,常用的操作是插入和删除
顺序表的插入操作
1.在顺序表中插入元素时,首先需要找到插入元素的位置。如果该位置上没有元素,则直接插入新元素;若该位置上有元素,就需要将该位置上的元素及其后面的元素向后移动,空出需要插入元素的位置,最后将新元素插入到指定的位置上
2.当线性表的存储空间已满时,不能在继续插入新元素,若继续插入,则会产生“上溢”错误
顺序表的删除操作
1.在线性中删除已有的元素,然后将删除元素之后的所有元素依次向前移动相应个位置,并减少线性表的结点数
2.若线性表为空时,不能再进行数据元素的删除,若继续删除,则会产生“下溢”错误
线性表的链式存储——线性链表
1.线性表的链式存储结构称为线性链表,用一组地址任意的存储单元存放线性表中的各个元素,不要求逻辑上相邻的两个元素在物理位置也相邻
2.链式存储结构中的结点通常由两部分组成,用于存放数据的部分称为 数据域 ,用于存放指针的部分称为 指针域3.线性链表又分为:单向链表、双向链表、循环链表
单向链表
1.单向链表是链表的一种,它的指向是单向的,对链表的访问是从头部开始顺序读取元素,其每个结点都有指针成员变量指向列表的下一个结点。
2.单向链表的head指针指向第一个成为表头结点,而终止于最后一个指向NULL的指针
双向链表
1.双向链表有连个指针域,一个指向前件结点,一个指向后件结点
2.指向前件结点的指针称为左指针,指向后件结点的指针称为右指针
循环链表
1.循环链表是将表中最后一个结点的指针域指向头结点,使整个链表形成一个环
2.在循环链表中,只要知道任一结点的位置,都可以从该结点位置出发,访问表中所有的结点
3.循环链表插入和删除元素比单向链表更简单,表头结点是循环链表中固有的结点,即使表中没有数据,表中至少都还有一个表头结点,这样就实现了空表和非空表运算的统一
线性链表的插入操作
线性链表常用的基本运算操作有插入、删除、查找
线性链表的查找操作
1.如果要在线性链表中查找指定元素,就需要从对头指针出发,逐个向后搜索,直到找到指定元素或链表尾部为止。
2.当搜索到指定元素时,需要返回该元素的所在位置;若链表中没有找到指定元素,则返回空