一、基本概念和术语
大纲要求:(一)
数据元素、数据结构、抽象数据类型等概念
1、数据元素
(1)数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。
(2) 一个数据元素可由若干个数据项组成,但是数据项是构成数据元素的不可分割的最小单位。
例如:学生记录就是一个数据元素,它由学号、姓名、性别等数据项组成。
2、数据对象
数据对象是具有相同性质的数据元素的集合,是数据的一个子集。
例如:整数数据对象是集合 N = {0,1,-1……}
3、数据结构
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
逻辑结构
描述的是数据之间的逻辑关系, 与数据如何存储在计算机内部无关。
常见的逻辑结构包含: 线性结构以及非线性结构
线性结构主要指一般线性表、受限线性表(还有栈和队列、串) 以及线性表的推广(数组)
非线性结构包括:集合、树、图
存储结构
指在计算机内部存储的结构, 又称为物理结构。
常见的存储结构:
顺序存储,、链式存储,、索引存储、散列存储(又称哈希存储)
数据的运算
包括运算的定义和实现。
运算的定义是针对逻辑结构的,指出运算的功能;
运算的实现是针对存储结构的,指出运算的具体操作步骤。
4、数据类型
(1)原子类型 其值不可再分的数据类型(如int、double等)
(2)结构类型 其值可以再分解成若干类型
(3)抽象数据类型(ADT) 抽象数据组织以及相关的操作。
注:ADT是一种数据结构
大纲要求(二)
算法设计的基本要求
1、算法重要特性
有穷性:有穷时间内能执行完的
确定性:相同输入只会产生相同的结果
可行性:可以用已有的基本操作实现算法
输入:丢给算法处理的数据
输出:算法处理的结果
注:可以有零个输入但是至少一个输出
2、算法设计的基本要求
正确性:能正确解决问题
可读性:对算法的描述要让其他人也看得懂
健壮性:算法能处理一些异常信息
高效率与低存储需求: (1)即算法执行既省时、又省内存; (2)时间复杂度低、空间复杂度低
大纲要求(三)
语句的频度和估算时间复杂度
1、时间复杂度
常见的渐近时间复杂度(常对幂指阶)
2、空间复杂度
算法原地工作是指算法所需的辅助空间为常量 O(1)
易错点
1、在存储数据的时候,不仅要存储数据元素的值,而且要存储数据元素之间的关系。
2、链式存储设计时,各个不同结点的存储空间可以不连续,但结点内的存储单元地址必须连续。
3、数据的逻辑结构是从面向实际问题的角度出发的,只采用抽象表达方式,独立于存储结构,与数据的存储无关,是独立于计算机的。而数据的存储结构是逻辑结构在计算机上的映射, 它不能独立于逻辑结构。
二、线性表
大纲要求(一)
线性表的定义和基本操作
线性表
定义:是具有相同数据类型的n个数据元素的有限序列
注意:线性表是一种逻辑结构,表示元素之间一对一的相邻关系。顺序表和链表是指存储结构
基本操作:初始化, 求表长, 按值查找, 按位查找, 插入, 删除, 输出, 判空, 销毁
大纲要求(二 )
线性表的实现:①顺序存储结构 ②链式存储结构 ③线性表的应用
线性表的实现
1.顺序存储结构
线性表的顺序存储又称为顺序表,特点是表中元素的逻辑顺序与其物理顺序相同
线性表的顺序存储结构是一种随机存储的结构,存储密度大,且顺序表中元素的位序是从1开始的,而数组中元素的下标是从0开始。
顺序表的各种操作算法复杂度如下:
插入: 时间复杂度O(n)
删除:时间复杂度O(n)
按值查找:时间复杂度:O(n)
2.链式存储结构
线性表的链式存储又称单链表。由于单链表的元素离散地分布在存储空间中, 所以单链表是非随机的存储结构,即不能直接找到表中某个特定元素。 单链表设置头节点是为了统一插入删除, 方便运算。
单链表的各种操作算法复杂度如下:
建立链表: 头插法和尾插法 时间复杂度都是O(n)
按序号查找:O(n)
插入节点: 最低O(1)最高O(n)
删除节点: 最低O(1)最高O(n)
求表长:O(n)
3.线性表的应用
双链表:为了克服单链表每次都从头节点依次顺序地向后遍历而引入的。
插入删除操作时间复杂度O(1)
注意插入和删除指针的变化过程
循环链表
注意表空时,尾结点不是指向NULL,而是指向头结点。
静态链表
借助数组来描述线性表的链式存储结构
和顺序表一样,需要预先分配一块连续的内存空间
插入删除和动态链表相同, 只需要修改指针, 不需要移动元素
指针指的是结点的相对地址(数组下标), 也称游标
易错点
1、 区分随机存储和顺序存储