第九章-线性表的基本概念及运算

合集下载

线性表 知识点总结

线性表 知识点总结

线性表知识点总结线性表的特点:1. 有序性:线性表中的元素是有序排列的,每个元素都有唯一的前驱和后继。

2. 可变性:线性表的长度是可变的,可以进行插入、删除操作来改变表的元素数量。

3. 线性关系:线性表中的元素之间存在明确的前驱和后继关系。

4. 存储结构:线性表的存储结构有顺序存储和链式存储两种方式。

线性表的操作:1. 查找操作:根据元素的位置或值来查找线性表中的元素。

2. 插入操作:将一个新元素插入到线性表中的指定位置。

3. 删除操作:将线性表中的某个元素删除。

4. 更新操作:将线性表中的某个元素更新为新的值。

线性表的顺序存储结构:顺序存储结构是将线性表的元素按照其逻辑顺序依次存储在一块连续的存储空间中。

线性表的顺序存储结构通常采用数组来实现。

数组中的每个元素都可以通过下标来访问,因此可以快速的进行查找操作。

但是插入和删除操作会导致元素位置的变动,需要进行大量数据搬移,效率较低。

线性表的链式存储结构:链式存储结构是将线性表的元素通过指针相连,形成一个链式结构。

每个元素包含数据和指向下一个元素的指针。

链式存储结构不需要连续的存储空间,可以动态分配内存,适合插入和删除频繁的场景。

但是链式结构的元素访问不如顺序结构高效,需要通过指针来逐个访问元素。

线性表的应用场景:1. 线性表适用于数据元素之间存在明确的前后关系,有序排列的场景。

2. 顺序存储结构适用于元素的插入和删除操作较少,对元素的随机访问较频繁的场景。

3. 链式存储结构适用于插入和删除操作较频繁的场景,对元素的随机访问较少。

线性表的操作的时间复杂度:1. 查找操作:顺序存储结构的时间复杂度为O(1),链式存储结构的时间复杂度为O(n)。

2. 插入和删除操作:顺序存储结构的时间复杂度为O(n),链式存储结构的时间复杂度为O(1)。

线性表的实现:1. 顺序存储结构的实现:使用数组来存储元素,通过下标来访问元素。

2. 链式存储结构的实现:使用链表来实现,每个元素包含数据和指向下一个元素的指针。

线性表的类型定义、顺序表示和实现

线性表的类型定义、顺序表示和实现
– ①ai-1 和 ai逻辑关系发生变化 – ②需移动元素:
i=n 只删 an即可 1≤i≤n -1 将ai+1 ~an前移
23
bool deleteElem(SqList& L,int pos)
typedef int ElemType;
typedef char ElemType;
等;
②同一线性表中的数据元素必须具有相同的特性,属同一类 型;
③a2,关…系, ra是i-1,一a个i, a有i+1序, …偶,对an的)集,合a,i-1即领对先于于非ai,空表的示线了性数表据(元a1,素 之间的相邻关系,称ai-1是ai的直接前驱,ai是ai-1的直接后继 ;
6
2.1.3 操作举例
例:假设利用两个线性表La和Lb分别表示两 个集合A和B,求一个新的集合A=A∪B。
算法:
– ①取得Lb中的1个元素; – ②在La中查找这个元素; – ③若不存在:插入La中;若存在,取Lb中下一个
元素,重复 ①、②、③,直到取完Lb的每个元素 。
7
void unionList(SqList &la,SqList lb)
10
线性表的顺序存储结构示意图
存储地址
loc(a1) loc(a1)+ k
内存空间状态 逻辑地址
a1
1
a2
2



loc(a1)+ (i- 1)k
ai
i



loc(a1)+ (n- 1)k
an
n 空闲
顺序存储结构可以借助于高级程序设计语言中的一维数组来表示。
11
用C++语言描述的顺序表类型如下所示: sqlist.h

《数据结构》课程教学大纲(三套)

《数据结构》课程教学大纲(三套)

数据结构课程教学大纲(三套)《数据结构》课程教学大纲(36/36 课时)一、课程的性质和任务数据结构是计算机及应用专业中一门重要的专业基础课程,在计算机软件的各个领域中均会使用到数据结构的有关知识。

当用计算机来解决实际问题时,就要涉及到数据的表示及数据的处理,而数据表示及数据处理正是数据结构课程的主要研究对象,通过这两方面内容的学习,为后续课程,特别是软件方面的课程打开厚实的基础。

因此,数据结构课程在计算机应用专业中具有举足轻重的作用。

本课程的任务是:在基础方面,要求学员掌握常用数据结构的基本概念及其不同的实现方法;在技能方面,通过系统学习能够在不同存储结构上实现不同的运算,并对算法设计的方式和技巧有所体会。

总言之,使应用者较全面的掌握各种常用的数据结构,提高运用数据结构解决实际问题的能力。

二、课程的基本要求本课程的教学基本要求如下:本课程要求理论必须与上机实践操作相结合,多做题和调试算法,实现算法。

实践项目只利用课堂时间是不够的,必须提前布置给学生。

通过本课程的学习与实践,学生应达到:1、掌握数据结构的基本概念和基本理论;2、熟练掌握顺序表、链表、队列、栈、树以及二叉树、图等基本数据结构的设计和分析;3、熟练地掌握常用算法(递归、遍历、查找、排序)的知识;4、能对所求解的问题进行分析,抽象出逻辑结构,选择合适的存储结构定义所需的运算,设计相应的算法;5、对算法进行分析和评价。

三、教学内容(一)理论教学(二)实践环节四、课时分配《数据结构》课程共4学分,课内72学时,其中理论课36学时,上机36学时。

五、大纲说明本课程必须理论与上机实践操作相结合,并要教、学、练相结合,讲清基本概念,指出知识要点、重点和难点,并通过实例分析解决算法难点;要求学生认真预习、认真听课、认真思索、认真做实验, 通过对算法的编程实现来提高学生 由于内容多、 难度大, 要特别注重精讲多练, 实践项目一定 要提前布置给学生, 调动学生的主观能动性,鼓励学生多提 问题、共同探讨和解决问题。

数据结构-教学大纲

数据结构-教学大纲

《数据结构》教学大纲一、基本信息二、教学目标及任务本课程作为计算机专业重要的主干课程,它要求学生学会分析和研究需解决的问题中的数据的特性,为其选择合适的数据结构来描述,在此数据结构的基础上写出相应的算法,并初步掌握算法的时间复杂度和空间复杂度的分析技术。

三、学时分配教学课时分配四、教学内容及教学要求第一章数据结构绪论(共4学时)基本内容:1)数据结构的概念2)数据的逻辑结构和存储结构3)算法教学要求:熟悉数据结构中各名词、术语的含义,掌握其基本概念;理解数据类型和抽象数据类型的含义;理解算法五个要素的确切含义,注意算法与程序的区别;掌握计算语句频度和估算算法时间复杂度的方法。

第二章线性表(共6学时)基本内容:1)线性表的概念及运算2)线性表的顺序存储结构—顺序表3)线性表的链式存储结构—链表教学要求:了解线性表的逻辑结构特性是数据元素之间存在着线性关系,在计算机中表示这种关系的两类不同的存储结构是顺序存储结构和链式存储结构;熟练掌握这两类存储结构的描述方法,以及线性表的各种基本操作的实现;能够从时间和空间复杂度的角度综合比较线性表两种存储结构的不同特点及其适用场合;掌握用线性表来表示一元多项式的方法及相应操作的实现。

第三章栈和队列(共4学时)基本内容:1)栈2)队列教学要求:掌握栈和队列类型的特点,并能在相应的应用问题中正确选用它们;熟练掌握栈类型的两种实现方法,特别应注意栈满和栈空的条件以及它们的描述方法;熟练掌握循环队列和链队列的基本操作实现算法,特别注意队满和队空的描述方法;理解递归算法执行过程中栈的状态变化过程。

第四章数组和矩阵(共4学时)基本内容:1)数组2)特殊矩阵教学要求:了解数组的两种存储表示方法,并掌握数组在以行为主的存储结构中的地址计算方法;掌握对特殊矩阵进行压缩存储时的下标变换公式;了解稀疏矩阵的三类压缩存储方法的特点和适用范围,领会以三元组表示稀疏矩阵时进行矩阵运算采用的处理方法;了解广义表的结构特点及其存储表示方法。

线性表的定义

线性表的定义
(1) 初始化:设定一个空的线性表L。
(2) 求长度:线性表L中数据元素的个数len。
(3) 取元素:取线性表L中序号为i的数据元素, 若1≤i≤len,则函数值为线性表L中第i个数据 元素,否则为NULL。
(4) 定位:给定值item,若线性表L中有数据元 素等于item,则返回该数据元素的序号,若 有多个数据元素等于item,则返回最小的序 号,若无数据元素等于item,则返回0。
两个例子都是线性表:
➢ 某班级学生的数据库课程的成绩: (72,65,83, 94,87,98,57)
➢ 某车间职工的编号:(“0108”, “0110”, “0122” ,
"0132", "0718")
在稍复杂的线性表中,一个数据元素可能是由若干 个数据项组成的。
例如在例1-1给出的“人事登记表”中,每一个职工 的信息就是一个数据元素,它是由“编号”、“姓名 ”、“性别”、“出生日期”、“婚否”和“基本工 资”六个数据项组成的。
(7) 是否是空表:线性表L为空,则返回值1,否则 返回值0。
(8) 表清空:将线性表L设置为空表,即len = 0。
对线性表的操作还有很多,像取前驱、取后继、 排序等等。
数据结构
数据结构
线性表的定义
线性表(linear-list)是最常用最简单的一种数据结构。一 个线性表是n (n≥0)个相同类型数据元素的有限序列。 记为:
L= (a1, a2 , … , an ) 其中,L是表名,a1是第一个数据元素(也简称为元 素),无前驱,有一个后继;an是最后一个数据元素 (即第n个数据元素),有一个前驱,无后继。其余的每 个数据元素ai (i=2,3, … ,n-1)都只有一个前驱,且只有一 个后继。i (i=1,2, … ,n)称为表的序号。n是数据元素的 个数,也称为表的长度,若n=0,L称作空表。

第九章-数据结构与算法基础

第九章-数据结构与算法基础

解题思路多代入法二叉树度叶子结点就是没有孩子的结点,其度为0,度为二的结点是指有两个子数的结点。

注意树的度和图的度区别叶子结点二叉排序树完全二叉树若设二叉树的深度为h,除第h 层外,其它各层(1~h-1) 的结点数都达到最大个数,第h 层所有的结点都连续集中在最左边,这就是完全二叉树。

完全二叉树——只有最下面的两层结点度小于2,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树;最优二叉树(就是哈弗曼树)平衡二叉树平衡二叉树,又称AVL树。

它或者是一棵空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的高度之差之差的绝对值不超过1.。

满二叉树满二叉树——除了叶结点外每一个结点都有左右子叶且叶结点都处在最底层的二叉树,。

除最后一层无任何子节点外,每一层上的所有结点都有两个子结点(最后一层上的无子结点的结点为叶子结点)。

也可以这样理解,除叶子结点外的所有结点均有两个子结点。

节点数达到最大值。

所有叶子结点必须在同一层上.本题主要考查一些特殊二叉树的性质。

若二叉树中最多只有最下面两层的结点度数可以小于2,并且最下面一层的叶子结点都依次排列在该层最左边的位置上,则这样的二叉树称为完全二叉树,因此在完全二叉树中,任意一个结点的左、右子树的高度之差的绝对值不超过1。

二叉排序树的递归定义如下:二叉排序树或者是一棵空树;或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于根结点的值;(3)左右子树也都是二叉排序树。

在n个结点的二叉树链式存储中存在n+1个空指针,造成了巨大的空间浪费,为了充分利用存储资源,可以将这些空链域存放指向结点在遍历过程中的直接前驱或直接后继的指针,这种空链域就称为线索,含有线索的二叉树就是线索二叉树。

最优二叉树即哈夫曼树。

排序各种排序的大致思路?各种排序适用于什么情况?各种排序的时间,空间复杂度?快速排序1.快速排序(Quicksort)是对冒泡排序法的一种改进,它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列;在对一个基本有序的数组进行排序时适合采用快速排序法。

第9章 数据结构

第9章 数据结构

数据项:数据项是数据的不可分割的最小标识单位。数据元素是由若
干个数据项组成的。 如:书名、书号、作者名称为数据元素的数据项
数据结构
数据结构概述: 数据结构概述:
数据结构是由一个逻辑结构S,一个定义在S上的基本运算 集△和一个存储实现D所构成的整体(S,△,D)。 数据结构包括逻辑结构 基本运算 逻辑结构和基本运算 逻辑结构 基本运算两部分: •逻辑结构是用来完成数据表示的 •基本运算是用来完成数据处理的。
M
栈顶 top→ 入栈 退栈 ↓ ↑ an a2 栈底 bottom→ a1
队列的基本概念
队列(queue) 队列(queue)是指允许在一端进行插入而在另一端进行删除 的线性表。 允许插入的一端称为队尾 允许删除的一端称为排头(也称为队头) 显然,在队列这种数据结构中,最先插入的元素将最先能够 被删除,最后插入的元素将最后被删除。因此,队列又称为 “先进先出”(First In First Out,FIFO)或“后进后出” 先进先出” Out,FIFO)或“后进后出” (Last In Last Out,LILO)的线性表。 Out,LILO)的线性表。
数据的逻辑结构基本概念
数据的逻辑结构有两个要素: 数据的逻辑结构有两个要素: 逻辑结构有两个要素 一是数据元素的集合,通常记为D 一是数据元素的集合,通常记为D; 二是据元素之间的前后件关 通常记为R 系,通常记为R。
逻辑结构—线性结构和非线性结构
第9章 数据结构
教学目的
•了解数据结构的基本概念 •了解数据的逻辑结构和存储结构 •了解栈、队列及线性链表的概念及运算 了解栈、
数据结构的基本概念
数据、 数据、数据元素和数据项 数据结构 数据的逻辑结构
数据结构类型

线性表

线性表

举例:
La=(34,89,765,12,90,-34,22) 数据元素类型为int。 Ls=(Hello,World, China, Welcome) 数据元素类型为 string。 Lb=(book1,book2,...,book100) 数据元素类型为下列所示的结 构类型: struct bookinfo { int No; //图书编号 char *name; //图书名称 char *auther; //作者名称 ...; };
素的方法被称为随机存取法,使用这种存取方法的存储结构被
称为随机存储结构。
在C语言中,实现线性表的顺序存储结构的类型定义
typedef int ElemType; //定义顺序表中元素的类型 #define INITSIZE 100 //顺序表存储空间初始分配量 #define LISTINCREMENT 10 //线性表存储空间的分配增量 typedef struct { ElemType *data; int length; //存储空间的基地址 //线性表的当前长度
说明:
1. 某数据结构上的基本运算,不是它的全部运算,而是一些 常用的基本的运算,而每一个基本运算在实现时也可能根据不 同的存储结构派生出一系列相关的运算来, 没有必要全部定义 出它的运算集。掌握了某一数据结构上的基本运算后,其它的 运算可以通过基本运算来实现,也可以直接去实现。 2. 在上面各操作中定义的线性表L仅仅是一个抽象在逻辑结 构层次的线性表,尚未涉及到它的存储结构,因此每个操作在 逻辑结构层次上尚不能用具体的某种程序语言写出具体的算法, 而算法的实现只有在存储结构确立之后。
4. 求顺序表的长度 int getlen(sqlist L) { return (L.length); } 5. 判断顺序表是否为空 int listempty(sqlist L) { if (L.length==0) return 1; else return 0; }
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
储 址 内 状 元 序 存 地 存 态 素 号
是用一组地址连续的存储单元 依次存储线性表的元素。 依次存储线性表的元素。 线性表的第i个元素 线性表的第 个元素ai的存储位 个元素 置为 Loc(ai)=Loc(a1)+(i−1)∗c − ∗ 1≤i≤ ≤i≤n ≤i≤ 起始位置或基地址: 起始位置或基地址:Loc(a1) 线性表的这种机内表示称做线性 表的顺序存储结构 顺序映象。 顺序存储结构或 表的顺序存储结构或顺序映象。
软件技术基础
机电工程学院
单 链 表
数据域 指针域 M 200 M 135 170 M NULL 130 110 M 205 160
下图是线性表( 图是线性表( zhao, qian, sun, li, zhou, wu, zheng, wang)的单链表示 ) 意图。 意图。
头指针 head 165
软件技术基础
机电工程学院
删除运算的实现
int DELETE(sequenlist ∗L,int i) {int j; if ((i<1)||(i>L->last)) { print (“error”);return 0;} else if (L->last<0) { print (“empty list”);return 0;} else { for(j=i;j<=L->last; j++) L->data(j−1)=L->data[j]; − L->last−− } −−; −− return (1); }
软件技术基础
机电工程学院
线性表的实例 线性表的实例
PURGE(Linear_list ∗L) { int i=1,j,x,y; while (i<LENGTH(L)) { x=GET(L,i); j=i+1; while (j<=LENGTH(L)) { y = GET(L,j); if (x==y) DELETE(L,j); else j++;} i++;} }/* PUREG */
软件技术基础
机电工程学院
线性表的逻辑Βιβλιοθήκη 征 线性表的逻辑特征对于非空的线性表,有且仅有一个开始结点 对于非空的线性表,有且仅有一个开始结点 a1,有且仅有一个终端结点 n。 终端结点a ,有且仅有一个终端结点 有且仅有一个直接后继 当i=1,2,…,n−1时,ai有且仅有一个直接后继 − 时 ai+1;当i=2,3,…,n时,ai有且仅有一个直接 有且仅有一个直接 ; 时 有且仅有一个 前趋a 。 前趋 i−1。 线性表中结点之间的逻辑关系即是上述的 线性表中结点之间的逻辑关系即是上述的 逻辑关系 邻接关系; 邻接关系; 线性表是一个线性结构。 线性表是一个线性结构。 线性结构
软件技术基础
机电工程学院
建立单链表建立单链表-尾插法建表
linklist ∗CREATLISTR() {char ch; linklist ∗head,∗s,∗r; ∗ ∗ head=NULL; r=head; while ((ch= getchar())!=‘$’) {s=(linklist∗)malloc(sizeof(linklist)) ∗ s→data=ch; s→next=NULL; if (r==NULL) head=s; else r→next=s; r=s; } return head; }
插入运算
先移动后插入
移 动 后 a1 a2 M a i− 1 ai M a n−1 an 插 入 后 a1 a2 M a i− 1 x ai M a n−1 an
插 入 前 0 a1 1 a2 M a i− 1 ai a i+ 1 M an
i− 2 插 入 x i
la s t n − 1
la s t
∑ p (n - i +1)
i i =1
线性表中删除一个元素所需移动元素次数的期望 平均次数) 值(平均次数)为 n EDE=
∑ q (n - i)
i i =1
机电工程学院
软件技术基础
插入、删除算法分析 插入、删除算法分析
假设在线性表的任何位置上插入或删除元素的 概率相等,则pi=1/n+1 , qi=1/n , 故 概率相等,
软件技术基础
机电工程学院
线性表的链式存储结构
将链接方式存储的线性表称为链表 链表分类: 链表分类: 分类 实现方式 o 动态链表 o 静态链表 链接方式 o 单链表 o 循环链表 o 双链表
软件技术基础
机电工程学院
单 链 表
链表是用一组任意的存储单元来存放线性表的 元素,这组存储单元既可以是连续的, 元素,这组存储单元既可以是连续的,也可以 是不连续的。 是不连续的。 存储数据元素信息的域称作数据域;存储后继 存储数据元素信息的域称作数据域; 数据域 元素存储位置的域称作指针域 指针域, 元素存储位置的域称作指针域,指针域中存储 的信息称指针 指针或 的信息称指针或链。 链表的每个结点中只包含一个指针域,故将这 链表的每个结点中只包含一个指针域, 种链表称为单链表 单链表。 种链表称为单链表。
/* 将新结点 插入顺序表 将新结点x插入顺序表 L的第 个位置上 */ 的第i个位置上 的第 /* 表空间溢出 */ /* 非法位置 */
/* 结点后移 */ /*插入 ,存在(∗L).data[i−1] 插入x, ∗ − 中终端结点下标加1 中终端结点下标加 */
软件技术基础
机电工程学院
删除运算
1 EIS== n ∑ n +1(n - i +1) 2 i=1
n+1
1 n -1 EDE= ∑ (n - i) = 2 i =1 n
n
软件技术基础
机电工程学院
顺序表的优缺点
顺序表的优点: 顺序表的优点: 逻辑相邻的物理位置相邻 随机存取表中任意元素; 随机存取表中任意元素; 顺序表的缺点: 顺序表的缺点: 在做插入或删除运算时,需移动大量元素; 在做插入或删除运算时,需移动大量元素; 线性表按最大空间预先分配; 线性表按最大空间预先分配; 表的容量难以扩充。 表的容量难以扩充。
机电工程学院
线性表的实例 线性表的实例
UNION(Linear_list ∗LA, Linear_list ∗LB) { int i=1,N=LENGHTU(LA); while (i<LENGTH(LB)) { x=GET(LB,i); K=SEARCH(LA,x); if(K==-1) { INSERT(LA,X,N+1); N=N+1: } i=i+1; } }
删除运算 删除运算
直接移动数据元素
删 除 a1 a2 M a i− 1 a i+ 1 M a n -1 an 删 除 后 (移 动 ) a1 a2 M a i− 1 a i+ 1 a i+ 2 M an la s t
删 除 前 0 a1 1 a2 M i− 2 a i− 1 i− 1 ai i a i+ 1 M a n -1 la s t an
机电工程学院
软件技术基础
插入运算的实现
int INSERT(sequenlist ∗L,int x,int i) { int j; if ((L->last)>=maxsize−1) − { print (“overflow”);return 0;} else if ((i<1)||(i>(L->last)+2) { print (“error”);return NULL;} else if (i=1&& L->last<0) {L->data[i−1]=x; − L->last=L->last+1; } else { for (j=L->last; j>=i−1;j−− −−) − −− L->data[j+1]= L->data[j]; L->data[i−1]=x; − L->last=L->last+1; } retum(1);}
p:linklist ∗ p:node
结点存储单元分配 p=malloc(sizeof(linklist)); ;
结点存储单元释放 free(p)
∗ (∗ p).next ∗ L ∧
(∗ p).data ∗
软件技术基础
(∗ p).next ∗
机电工程学院
两种建立单链表方法图示
头插法建表图示
c ④ ③ ① s d ② b a ∧
第九章 线 性 表
本章主要内容
线性表的基本概念 线性表的顺序存储结构及其运算 线性表的链式存储结构及其运算
软件技术基础
机电工程学院
线性表的基本概念
线性表的逻辑结构定义
线性表是由n( ≥ )个数据元素a 线性表是由 (n≥0)个数据元素 1,a2,…,an构 成的有限序列。其中,数据元素的个数n定义 成的有限序列。其中,数据元素的个数 定义 为表的长度。 时称为空表, 为表的长度。当n=0时称为空表,通常将非空 时称为空表 的线性表( :(a 的线性表(n>0)记作:( 1,a2,…,an)。 )记作:( 数据元素a 的具体含义, 数据元素 i的具体含义,在不同的情况下可以 不同。 不同。 同一线性表中的元素必定具有相同的特性。 同一线性表中的元素必定具有相同的特性。
软件技术基础
/* 删除线性表L中重复 删除线性表L 出现的多余结点 */ /*每次循环使当前第 结 每次循环使当前第i结 每次循环使当前第 点是无重复值的结点*/ 点是无重复值的结点 /* 取当前第 个结点 */ 取当前第i个结点 /* 取当前第 个结点 */ 取当前第j个结点 /* 删除当前第 个结点 */ 删除当前第j个结点
相关文档
最新文档