数据结构导论
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构导论复习大纲
第1章概论
一、程序设计的实质(计算机专业人员必须完成的两项基本任务):
数据表示:机外表示->逻辑结构->存储结构
数据处理:处理要求->基本运算和运算->算法
数据表示和数据处理是密切相关的,数据处理方式总是与数据的某种表示形式相联系。
二、“数据”分成三个不同的层次,即数据、数据元素和数据项。
凡能被计算机存储、加工的对象通称为数据。
数据元素是数据的基本单位,又被称为元素、结点、顶点或记录。
数据项是数据不可分割的最小单位。
三、数据的逻辑结构
数据的逻辑结构就是数据的组织形式。所谓逻辑关系是指数据元素之间的关联方式或称“邻接关系”。
通常有集合、线性结构、树形结构、图状结构。
*逻辑结构与数据元素本身的形式、内容、相对位置、结点个数无关
四、运算是指在任何逻辑结构上施加的操作,即对逻辑结构的加工。分为两种基本类型:
1. 加工型运算:插入、删除、更新
2. 引用型运算:读取、查找
五、存储实现的基本目标是建立数据的机内表示。数据的机内表示称为数据的存储结构。包括三个主要部分:
1. 存储结点。每个结点存放一个数据元素
2. 数据元素之间关联方式的表示,也就是逻辑结构的机内表示
3. 附加设施。
存储结构的主要部分是数据元素之间关联方式的表示。由于每个存储结点存放一个数据元素,数据元素之间的关联方式便由存储结点之间的关联方式间接地表达。通常有四种基本存储方式:
1. 顺序存储方式
2. 链式存储方式
3. 索引存储方式
4. 散列存储方式
六、运算实现
运算的实现是指一个完成该运算功能的程序。运算实现的核心是算法设计。
算法分为三类:
(1)运行终止的程序
(2)伪语言算法
(3)非形式算法
七、算法质量的评价:
(1)正确性:算法应能正确地实现预定的功能
(2)易读性:算法应易于阅读和理解。
(3)健壮性:当环境发生变化时,算法能适当地做出反应或进行处理
(4)高效性:达到所需要的时空性能。
算法在所有输入下的计算量的最大值称为算法的最坏情况时间复杂性或最坏情况时间复杂度
算法在所有输入下的计算量的加权平均值称为平均时间复杂性或平均时间复杂度。常见时间复杂性的量级:O(1) 数据结构的基本任务:数据结构的设计和实现。 数据结构课程的主要内容: (1)数据结构的定义 (2)数据结构的实现 (3)数据结构的评价和选择 八、典型例题分析 九、复习与习题讲解 第2章线性表 一、线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列,通常记为 (a1,a2,…….ai-1,ai,ai+1,…an) i称为ai在线性表中的序号或位置 ai是序号为i的数据元素,每个数据元素都有一个确定的位置。 ai-1是ai的直接前驱 ai+1是ai的直接后继。 除了起始结点之外,集合中的每个元素均有且仅有一个前驱 除了终端结点之外,集合中的每个数据元素均有且仅有一个后继 所含结点个数称为表长,当表长为0时为空表。 线性结构邻接关系是”一对一” 线性表中的元素可以是各种各样的,但同一线性表中的元素必定具有相同的特性。 二、顺序表:顺序存储的线性表 特点:逻辑上相邻的结点在存储结构中仍相邻 类型定义: const maxsize=顺序表的容量 typedef struct {datatype data[maxsize]; int last; }sqlist; 表长为last,last-1是终端结点在表中的位置,从last到maxsize-1为空闲区或称备用区定义sqlist L 则表长为st 终端结点为L.data[st-1] 结点表示为L.data[0]~L.data[st-1] 三、顺序表的插入、删除、定位运算算法 四、插入算法的平均时间复杂性为n/2 删除算法平均时间复杂性为(n-1)/2 三、链表 带头结点空表条件:head->next==NULL 不带头结点空表条件:head==NULL 单链表的简单操作:初始化、求表长、按序号查找等算法 基本运算在单链表上的实现算法:定位、删除、插入 循环链表:头结点、尾结点存储位置:rear->next-->next 和rear 双链表: (1)摘除操作 P->prior->next=p->next; P->next->prior=p->prior; (2)链入操作 q->prior=p; q->next=p->next; P->next->prior=q; P->next=q; 四、顺序实现与链表实现的比较(空间、时间性能) 第3章栈、队列和数组 一、栈 (1)栈的基本概念:先进后出;允许进行插入、删除的一端称为栈顶,另一端称为栈底。(2)栈的基本运算: 初始化InitStack(S),加工型运算 进栈Push(S,X),加工型运算 退栈Pop(S,X),加工型运算 读栈顶Top(S,X),引用型运算 判栈空Empty(S),引用型运算 (3)掌握以上基本运算的算法 (4)栈的链接实现 二、队列 (1)队列的基本概念:先进先出;允许插入的一端称为队尾,允许删除的一端称为队首。注意对头指针指示对头元素在数组中实际位置的前一个位置;实现递归调用属于栈的应用。(2)队列的基本运算: 队列初始化,InitQueue(Q),加工型运算 入队列EnQueue(Q,X),加工型运算 出队OutQueue(Q,X),加工型运算 判断列空EmptyQueue(Q),引用型运算 读队头GetHead(Q,x),引用型运算 (3)以上基本运算的算法 (4)队列的顺序实现 (5)队列的链接实现 三、数组 (1)数组的逻辑结构和运算 (2)数组的基本运算: 读:给定一组下标,读取相应的数据元素; 写:给定一组下标,修改相应的数据元素。 (3)矩阵的压缩存储