余腊中,数据结构c++版,第3章-1线性表与数组4
2021年数据结构C++版第3章.pptx

// 向前声明
class ListNode {
friend class List; // 使List的成员能够访问ListNode的私有成员
private:
int data;
ListNode *link;
};
JYP
8
class List { public:
// 表处理操作 … private: ListNode *first; };
(2)List<Type>的操作太多,导致类的定义很不紧 凑,难以理解,影响软件质量。
(3)即使可由用户将新的成员函数加入类中,用户 还需要掌握链表结构,而掌握复杂的结构将增加用户 的负担。
JYP
20
这启发我们将遍历(traversal)移到List<Type>定 义之外。
进一步观察,以上操作都不改动链表内容,但需 要访问List<Type>和ListNode<Type>的私有数据成员。 为 此 , 我 们 不 是 将 这 些 操 作 都 声 明 为 List<Type> 和 ListNode<Type> 的 友 元 , 而 是 定 义 第 三 个 类 ListIterator<Type>。
List( ) { first = 0;}; // 构造函数,将first初始化为0 // 表处理操作 … private: ListNode<Type> *first; };
JYP
17
注意,List<Type>是ListNode<Type>的友元,这 意味着ListNode<int>的成员可以被List<int>的成员 访问,但不能被List<float>的成员访问。
数据结构(C语言版)(第2版)课后习题答案

数据结构(C语言版)(第2版)课后习题答案数据结构(C语言版)(第2版)课后习题答案目录第1章绪论1 第2章线性表5 第3章栈和队列13 第4章串、数组和广义表26 第5章树和二叉树33 第6章图43 第7章查找54 第8章排序65 第1章绪论1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。
答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。
如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。
数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。
在有些情况下,数据元素也称为元素、结点、记录等。
数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。
数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。
例如,学生基本信息表中的学号、姓名、性别等都是数据项。
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
例如:整数数据对象是集合N={0,±1,±2,。
},字母字符数据对象是集合C={‘A’,‘B’,。
,‘Z’,‘a’,‘b’,。
,‘z’},学生基本信息表也可是一个数据对象。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。
逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。
因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。
存储结构:数据对象在计算机中的存储表示,也称为物理结构。
抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。
具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。
2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。
数据结构(C++版)第3章 特殊线性表

特殊线性表——栈
3.1.3 栈的链接存储结构及实现
链栈:栈的链接存储结构 first
a1
a2
ai
an ∧
将哪一端作为栈顶? 将链头作为栈顶,方便操作。 链栈需要加头结点吗? 链栈不需要附设头结点。
特殊线性表——栈
栈的链接存储结构及实现
链栈:栈的链接存储结构 first top an
栈顶
a1
a2 a1 ∧
Pop( );
an
an-1
a1 ∧
特殊线性表——栈
顺序栈和链栈的比较
时间性能:相同,都是常数时间O(1)。
空间性能: 顺序栈:有元素个数的限制和空间浪费的问题。 链栈:没有栈满的问题,只有当内存没有可用空间时才会 出现栈满,但是每个元素都需要一个指针域,从而产生了 结构性开销。 结论:当栈的使用过程中元素个数变化较大时,用链栈是适 宜的,反之,应该采用顺序栈。
两栈共享空间
两栈共享空间
0 1 2 ……
S-1
a 1 a2 … ai
栈1底
bj … … b2 b 1
top2
栈2底
top1
栈1的底固定在下标为0的一端; 栈2的底固定在下标为StackSize-1的一端。 top1和top2分别为栈1和栈2的栈顶指针; Stack_Size为整个数组空间的大小(图中用S表示);
an
an-1
p
a1 ∧ top++可以吗?
特殊线性表——栈
链栈的实现——链栈的析构(链栈的销毁)
template <class T> LinkStack<T>::~LinkStack( ) {
Node<T> *p;
数据结构c语言版学习笔记-线性表

线性表线性结构最常用最简单的数据结构,而线性表是一种典型的线性结构,基本特点是,线性表中的数据元素是有序且有限的。
在这种结构中:1.存在一个唯一的被称为“第一个”的数据元素2.存在一个唯一的被称为“最后一个”的数据元素3.除第一个元素外,每个元素均有唯一一个直接前驱4.除最后一个元素外,每个元素均有唯一一个直接后继线性表定义:是由n(n>=0)个数据元素(节点),a1,a2…an组成的有限序列。
该序列中所有的数据节点具有相同的数据类型,其中数据元素的个数n称之为线性表的长度。
线性表的抽象数据类型定义ADT List{数据对象:D={ | ∈ ElemSet, i=1,2,...,n, n≥0 }数据关系:R1={ <ai-1 ,ai >| ,∈D, i=2,...,n }数据操作:InitList(*L):初始化操作,建立一个空的线性表ListEmpty(L):若线性表为空,返回True,否则返回FalseClearList(*L):将线性表清空。
GetElem(L,i,e):将线性表L中的第i个位置元素赋值给e LocateElem(L,e):在线性表L中查找与给定值e相等的元素,如果查找成功返回该元素在表中序号表示成功,否则,返回0表示失败ListInsert(*L,i,e):在线性表L中的i个位置插入新元素e ListDelete(*L,i,*e):删除线性表L中地i个位置元素,并用e返回其值ListLength(L):返回线性表L的元素个数}线性表的顺序存储结构顺序存储:把线性表的节点按逻辑顺序依次存放在一组地址连续的存储单元里。
用这种方法存储的线性表简称顺序表。
特点:线性表的物理顺序与逻辑顺序一致;数据元素之间的关系是以元素在计算机内“物理位置相邻”来体现的。
注:在高级语言环境下,数组具有随机存取的特性,因此借助数组来表示顺序表typedef struct SeqList{ElemType array[MAXSIZE];int count;//保存线性表中的元素个数}SeqList线性表的链式存储结构链式存储:用一组任意的存储单元存储线性表中的数据元素,用这种方式存储的线性表简称为线性链表。
《数据结构》课件第3章

图3.1 栈结构示意图 (a) 非空栈;(b) 空栈
假设有一个栈S=(a1, a2 ,…, ai-1, ai, ai+1, …, an),如果a1 先进栈,则an最后进栈。因为进栈和出栈元素都只能在栈 顶一端进行,所以每次出栈的元素总是当前栈中栈顶的元 素,它是最后进栈的元素,而最先进栈的元素要到最后才 能出栈。在日常生活中,有许多类似栈的例子。例如将洗 净的盘子放入消毒桶时,总是一个接一个地往上摞(相当于 进栈);取出盘子时,则是从最上面一个接一个地往外拿 (相当于出栈),最后取出的是最先放进去的那个盘子。因 此,栈又被称为后进先出(Last In First Out,LIFO)的线性表。
top是栈顶指针,它是指针类型变量,top唯一地确定一 个链栈。对于不带头结点的链栈,栈顶元素为top,当 top = NULL时,该链栈为空栈;带头结点的链栈的栈顶元 素为top->next,栈为空的条件是top->next = NULL,如图3.3 所示。
图3.3 带头结点的链栈示意
下面讨论在带头结点的链栈上实现进栈和出栈操作 的算法。
{ /* 将栈S的栈顶元素弹出,其值复制到x所指的存储空
间中 */
if(S->top==-1)
/*栈为空*/
return(0);
else
{
*x=S->data[S->top];
S->top--;
/*修改栈顶指针*/
return(1);
}
}
(6) 取栈顶元素。
int gettop(SeqStack S, Elemtype *x) { /* 将栈S的栈顶元素值复制到x所指的存储空间中,但
1. 递归的定义 递归就是一个事件或对象部分地由自己组成,或 者由它自己定义。例如,求阶乘就是递归的一个典型 的例子:
数据结构(C++版)(第二版) 第03章

3.1.3 栈的抽象数据类型描述 栈的抽象数据类型可描述为:
ADT Stack is Data: 含有n个元素a1,a2,a3,…,an,按LIFO规则存放,每个元素的类型都为elemtype。 operation: void inistack(&s ) //将栈s置为一个空栈(不含任何元素) void push(&s,x) //将元素x插入到栈s中,也称为 “入栈”、“插入”、“压入” void pop(&s ) //删除栈s中的栈顶元素,也称为“退栈”、“删除”、“弹出” elemtype gettop(s ) //取栈s中的栈顶元素 int empty(s) //判断栈s是否为空,若为空,返回值为true或1,否则返回值为 false或0 End stack
2019年3月9日 5
2.栈的五种运算
栈的五种运算实现过程如下:(规定栈中空间为1~maxsize-1,浪费存储位置0, 是为了与线性表数组存储对应)。 (1)初始化栈 void seqstack::inistack(seqstack &s ) { s.top=0; } (2)进栈 void seqstack::push(seqstack &s, elemtype x) { if (s.top==maxsize-1) cout<<"overflow"; else { s.top++; s.stack[s.top]=x; } }
第3章 栈和队列
本章学习内容
3.1 栈
3.2 队列
2019年3月9日
1
3.1 栈
3.1.1 栈的定义
栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特 殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为 固定的一端,称为栈底(Bottom)。
第3章数据结构基本类型3.1线性表-高中教学同步《信息技术-数据与数据结构》(教案)
布置预习任务,要求学生提前阅读线性表的基础知识和概念。
发放预习材料,如PPT、视频教程或预习习题。
课堂讨论引导:
准备引导性问题,鼓励学生积极参与课堂讨论。
设计小组活动,促进学生之间的合作与交流。
课后反馈:
设计课后习题和作业,以检验学生的学习效果。
准备课后答疑和辅导,为学生提供必要的帮助和支持。
确保教学环境中网络连接稳定,以便在需要时展示在线资源或示例。
教学媒体
教学媒体
PPT演示文稿:
线性表的基本概念、定义、特点和示例的幻灯片。
顺序存储和链式存储的对比图示。
线性表基本操作(如初始化、查找、插入、删除)的动画或图解。
代码编辑器/IDE:
演示顺序表和链表的实现代码(如Python)。
允许学生直接看到、理解和操作代码。
情感、态度与价值观:
激发学生的学习兴趣和创造力,培养学生的探索精神和创新精神。
引导学生认识到数据结构在解决实际问题中的重要性,形成合理的计算机思维观念。
学习重难点
教学重点
线性表的基本概念:理解线性表是什么,它如何表示具有相同பைடு நூலகம்型数据元素的有限序列,并理解其特点,包括唯一的首尾元素以及除首尾外每个元素有且仅有一个前驱和后继。
准备用于课堂讨论的实例和问题,如通信录的设计和实现。
准备教学用计算机和相关编程环境(如Python环境),以便现场演示代码和执行结果。
教学流程设计:
设计教学流程,从线性表的基础概念引入,逐步深入到线性表的存储方式和操作。
设计课堂互动环节,如提问、小组讨论等,鼓励学生积极参与和表达。
安排编程实践环节,让学生亲自编写线性表相关操作的代码,加深理解。
线性表的应用场景:通过通信录的实例,了解线性表在实际问题中的应用,并理解如何根据需求选择合适的数据结构和存储方式。
数据结构(C语言版)第三版__清华大学出版社_习题参考答案
数据结构(C语言版)第三版__清华大学出版社_习题参考答案数据结构(C语言版)第三版__清华大学出版社_习题参考答案引言:数据结构是计算机科学的基础,对于学习和理解数据结构的相关概念和算法非常重要。
本文将对清华大学出版社出版的《数据结构(C语言版)第三版》中的习题进行参考答案的提供。
通过正确的理解和掌握这些习题的解答,读者可以加深对数据结构的认识,并提高自己的编程能力。
第一章:绪论1.1 数据结构的定义与作用数据结构是指数据对象以及数据对象之间的关系、运算和存储结构的总称。
数据结构的作用是在计算机中高效地组织和存储数据,同时支持常见的数据操作和算法。
1.2 算法的定义与特性算法是解决特定问题的一系列步骤和规则。
算法具有确定性、有穷性、可行性和输入输出性等特点。
第二章:线性表2.1 线性表的定义和基本操作线性表是同类型数据元素的一个有限序列。
线性表的基本操作包括初始化、查找、插入、删除和遍历等。
2.2 顺序存储结构顺序存储结构是将线性表中的元素按顺序存放在一块连续的存储空间中。
顺序存储结构的特点是随机存取、插入和删除操作需要移动大量元素。
2.3 链式存储结构链式存储结构通过结点之间的指针链表来表示线性表。
链式存储结构的特点是插入和删除操作方便,但查找操作需要遍历整个链表。
第三章:栈和队列3.1 栈的定义和基本操作栈是只能在一端进行插入和删除操作的线性表。
栈的基本操作包括初始化、入栈、出栈和获取栈顶元素等。
3.2 队列的定义和基本操作队列是只能在一端插入操作,在另一端进行删除操作的线性表。
队列的基本操作包括初始化、入队、出队和获取队头元素等。
第四章:串4.1 串的定义和基本操作串是由零个或多个字符组成的有限序列。
串的基本操作包括初始化、串的赋值、串的连接和串的比较等。
第五章:树5.1 树的基本概念和术语树是n(n>=0)个结点的有限集。
树的基本概念包括根结点、子树、深度和高度等。
5.2 二叉树二叉树是每个结点最多有两个子树的树结构。
数据结构与算法C版课件第三章栈和队列
不改变栈的状态。
4.栈的存储 (1)采用顺序方式存储的栈称为顺序栈(sequential stack) (2) 采用链接方式存储的栈称为链栈(linked stack)
3.1.2 顺序栈及运算的算法实现
用栈来实现括号匹配检查的原则是,对表达式从左到右扫描。 (1)当遇到左括号时,左括号入栈; (2)当遇到右括号时,首先检查栈是否空,若栈空,则表明该“右括弧”多余;否则比 较栈顶左括号是否与当前右括号匹配,若匹配,将栈顶左括号出栈,继续操作;否则,表明 不匹配,停止操作。 (3)当表达式全部扫描完毕,若栈为空,说明括号匹配,否则表明“左括弧”有多余的。
出队
a1 a2 a3 a4 a5
入队
队列图示
4.队列的应用
5. 在队列上进行的基本运算
(1)队列初始化initQueue(q):构造一个空队列。 (2)判队空emptyQueue(q):若q为空队则返回为1,否
则返回为0。
(3)入队enQueue(q,x):对已存在的队列q,插入一个元素x
到队尾,队发生变化。
队列中元素个数的计算公式。
(4)出队deQueue(q,x):删除队头元素,并通过x返回其值,
队发生变化。
(5)读队头元素frontQueue(q):读队头元素,并返回其值,
队不变。
3.2.2 顺序队列及运算的实现
采用顺序方法存储的队列称为顺序队列(sequential queue)
顺序队列的存储结构用c语言定义如下:
#define MAXSIZE 1024
运算受限的线性 表
表两端插删
C数据结构学习笔记一线性表课件总结
件总结CONTENTS •线性表基本概念与操作•顺序存储结构下线性表实现•链式存储结构下线性表实现•线性表应用举例与问题分析•线性表性能分析与优化策略•总结回顾与拓展延伸线性表基本概念与操作01每个元素必须是同一类型的数据。
01020304线性表是由n(n≥0)个具有相同类型的数据元素(结点)a1,a2,…,an组成的有序序列。
元素之间具有一对一的前驱和后继关系,即除首尾元素外,每个元素都有一个前驱和一个后继。
线性表的长度可变,即可以插入或删除元素。
线性表定义有序性同一性可变性线性表定义及特点创建一个空的线性表。
线性表基本操作初始化操作在线性表的指定位置插入一个元素。
插入操作删除线性表中指定位置的元素。
删除操作在线性表中查找指定元素,并返回其位置。
查找操作依次访问线性表中的每个元素。
遍历操作释放线性表所占用的内存空间。
销毁操作线性表存储结构顺序存储结构用一段连续的存储空间来存储线性表中的数据元素,逻辑上相邻的元素在物理位置上也相邻。
顺序存储结构具有随机存取的特点,即通过下标可以直接访问任意元素。
链式存储结构用一组任意的存储空间来存储线性表中的数据元素,这组存储空间可以是连续的,也可以是不连续的。
链式存储结构通过指针来表示元素之间的逻辑关系,每个结点包含数据域和指针域两部分。
链式存储结构具有插入和删除操作灵活的特点,但需要额外的空间来存储指针信息。
顺序存储结构下线性表实现02顺序存储结构定义与特点定义用一段地址连续的存储单元依次存储线性表的数据元素。
特点逻辑上相邻的元素,物理位置也相邻;可随机存取任一元素。
遍历操作依次访问线性表中的每个元素。
通过元素值查找其在线性表中的位置。
删除操作删除指定位置的元素,需移动删除位置后的所有元素。
初始化操作分配一段连续的存储空间,并设置线性表的初始状态。
插入操作在指定位置插入一个元素,需移动插入位置后的所有元素。
顺序存储结构下基本操作实现顺序存储结构优缺点分析优点存储密度大,空间利用率高。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
线性表的顺序存储结构及实现
顺序表——线性表的顺序存储结构 例:(34, 23, 67, 43) 34 23 67 43 4
用什么属性来描述顺序表?
存储空间的起始位置 顺序表的容量(最大长度)
2014-8-22
顺序表的当前长度 中南大学@余腊生
18
数据结构与算法(C++版)
线性表的顺序存储结构及实现
数据元素之间的关系是什么?
2014-8-22 中南大学@余腊生 3
数据结构与算法(C++版)
线性表的逻辑结构
线性表的定义
线性表:简称表,是n(n≥0)个具有相同类型的数据 元素的有限序列。
线性表的长度:线性表中数据元素的个数。 空表:长度等于零的线性表,记为:L=( )。 非空表记为:L=(a1, a2 , …, ai-1, ai , …, an)
数据结构与算法(C++版)
2.2 线性表的顺序存储结构及实现
存储结构和存取结构
存储结构是数据及其逻辑结构在计算机中的表示; 存取结构是在一个数据结构上对查找操作的时间性 能的一种描述。
“顺序表是一种随机存取的存储结构”的含义为: 在顺序表这种存储结构上进行的查找操作,其时间 性能为O(1)。
2014-8-22 中南大学@余腊生 22
// 将所有在Lb中但不在La中的元素插入到La中 La_len = La.Length(); Lb_len =Lb.Length(); // 求线性表的长度 for (i = 1; i <= Lb_len; i++) { Lb.Find( i, e); // 取Lb中第i个数据元素赋给e if(!La.Search( e)) La.Insert( ++La_len, e); // La中不存在和 e 相同的数据元素, // 则插入到La中 } } // union 2014-8-22 中南大学@余腊生 12
2014-8-22 中南大学@余腊生 7
数据结构与算法(C++版)
线性表的逻辑结构
线性表的抽象数据类型定义
DestroyList 前置条件:表已存在 输入:无 功能:销毁表 输出:无 后置条件:释放表所占用的存储空间 Length 前置条件:表已存在 输入:无 功能:求表的长度 输出:表中数据元素的个数 后置条件:表不变
2014-8-22 中南大学@余腊生 11
数据结构与算法(C++版)
线性表的逻辑结构
线性表的抽象运算
• 利用两个线性表LA和LB分别表示集合A和B,求一个新的集合A=A∪B。 算法思路:集合中的元素间是松散的关系,只需将在线性表LB中而不在 LA中的数据元素追加到LA的尾部即可。
void union(LinearList &La, LinearList Lb) {
2014-8-22 中南大学@余腊生 16
数据结构与算法(C++版)
线性表的顺序存储结构及实现
顺序表——线性表的顺序存储结构 例:(34, 23, 67, 43) 34 23 67 43 4
存储要点
用一段地址连续的存储单元 依次存储线性表中的数据元素
2014-8-22
中南大学@余腊生
17
数据结构与算法(C++版)
a1
2014-8-22
a2
a3
a4
an
6
中南大学@余腊生
数据结构与算法(C++版)
线性表的逻辑结构
线性表的抽象数据类型定义
ADT List Data 线性表中的数据元素具有相同类型, 相邻元素具有前驱和后继关系 Operation InitList 前置条件:表不存在 输入:无 功能:表的初始化 输出: 无 后置条件:建一个空表
其中,ai(1≤i≤n)称为数据元素; 下角标 i 表示该元素在线性表中的位置或序号 。
2014-8-22 中南大学@余腊生 4
数据结构与算法(C++版)
线性表的逻辑结构
线性表的图形表示
线性表(a1, a2 , …, ai-1, ai , …, an)的图形表示如下:
a1 a2 a3 a4 an
2014-8-22
while (i <= La_len) { La.Find( i, ai); Lc.Insert( ++k, ai); } while (j <= Lb_len) { Lb.Find( j, bj); Lc.Insert( ++k, bj); } } // merge_list
讨论:若La和Lb均是单调递增,并且要求Lc也是单调递增,算法 怎样修改?若La和Lb也不一定是单调递增呢?
数据结构与算法(C++版)
线性表的逻辑结构
线性表的抽象运算
归并两个“其元素按值非递减有序排列的”线性表La和Lb,求得 的线性表Lc也具有同样特性。 算法思路:设 La = (a1, …, ai, …, an) ,Lb = (b1, …, bj, …, bm),Lc = (c1, …, ck, …, cm+n) 分别用i,j指示La和Lb中的首元素ai和bj(即i=j=1); 若ai≤bj,则将ai插入到Lc中,i++,否则将bj插入到Lc中,j++; 重复2)直至其中一个表中所有元素已经插入到Lc中; 将另一个表中的剩余元素插入到Lc。
数据结构与算法(C++版)
第三章 线性表与数组
本章的基本内容是:
线性表的逻辑结构 线性表的顺序存储及实现 线性表的链接存储及实现 顺序表和单链表的比较 数组 稀疏矩阵
数据结构与算法(C++版)
线性表的逻辑结构
学生成绩登记表
学号 0101 0102 0103 0104 0105 姓 名 丁一 李二 张三 孙红 王冬 数据结构 78 90 86 81 74 英语 96 87 67 69 87 高数 87 78 86 96 66
0 … i-2 i-1 … n-1
一般情况下,(a1,a2,…, ai-1,ai , …, an)的顺序存储:
Max-1
a1
Loc(a1)
…
ai-1
ai
…
an
c
空闲
长度
Loc(ai)
Loc(ai)=Loc(a1) + (i -1)×c 随机存取:在O(1)时间内存取数据元素
2014-8-22 中南大学@余腊生 21
2014-8-22
中南大学@余腊生
13
数据结构与算法(C++版)
线性表的逻辑结构
线性表的抽象运算
//剔除集合的重复元素 void purge(LinearList &La, LinearList Lb) { // 已知线性表Lb中的元素依值非递减有序排列,现构造线性表La, // 使La中只包含Lb中所有值不相同的元素 La.Create(); // 初始化La为空表 La_len = La.Length(); Lb_len =Lb.Length(); // 求线性表的长度 for (i = 1; i <= Lb_len; i++) { Lb.Find( i, e); // 取Lb中第i个元素赋给e if( La.IstEmpty() || !equal(en,e) ) La.Insert( ++La_len, e); // La中不存在和 e 相同的元素, // 则插入之 en = e; } // for } // purge 2014-8-22 中南大学@余腊生 14
中南大学@余腊生 10
2014-8-22
数据结构与算法(C++版)
线性表的逻辑结构
线性表的抽象数据类型定义
Empty 前置条件:表已存在 输入:无 功能:判断表是否为空 输出:若是空表,返回1,否则返回0 后置条件:表不变 ADT
进一步说明: (1)线性表的基本操作根据实际应用是而定; (2)复杂的操作可以通过基本操作的组合来实现; (3)对不同的应用,操作的接口可能不同。
2014-8-22
中南大学@余腊生
15
数据结构与算法(C++版)
线性表的逻辑结构
线性表的抽象运算
//两个有序表的归并运算 void MergeList(LinearList La, LinearList Lb, LinearList &Lc) { // 已知线性表La和Lb中的元素按值非递减排列, //归并La和Lb得到新的线性表Lc, // Lc的元素也按值非递减排列。 Lc.Create(); i = j = 1; k = 0; La_len = La.Length(); Lb_len = Lb.Length(); while ((i <= La_len) && (j <= Lb_len)) { // La和Lb均非空 La.Find( i, ai); Lb.Find( j, bj); if (ai <= bj) { Lc.Insert( ++k, ai); ++i; } else { Lc.Insert( ++k, bj); ++j; } }
顺序表——线性表的顺序存储结构 例:(34, 23, 67, 43) 34 23 67 43 4
如何实现顺序表的内存分配?
顺序表
顺序表
2014-8-22
一维数组
指针
中南大学@余腊生 19
数据结构与算法(C++版)
线性表的顺序存储结构及实现
顺序表——线性表的顺序存储结构
0 … i-2 i-1 … n-1
一般情况下,(a1,a2,…, ai-1,ai , …, an)的顺序存储:
Max-1
a1
Loc(a1)
…
ai-1
ai
…
an