第八讲 线性表3
数据结构线性表总结
数据结构线性表总结线性表是一种经典的数据结构,它是由n个数据元素组成的有序序列。
线性表的实现方法有很多种,比较常见的有顺序表和链表。
本文将详细介绍线性表的定义、基本操作、顺序表和链表的实现以及一些常用的线性表算法。
一、线性表的定义线性表是由n个数据元素组成的有序序列,其中每个元素只有一个直接前驱元素和一个直接后继元素。
二、线性表的基本操作1-初始化线性表:创建一个空的线性表,初始化其相关属性。
2-插入元素:向线性表的指定位置插入一个元素。
3-删除元素:从线性表中删除指定位置的元素。
4-查找元素:在线性表中查找指定值的元素,并返回其位置。
5-获取元素:获取线性表中指定位置的元素值。
6-修改元素:修改线性表中指定位置的元素值。
7-遍历线性表:按照线性表的顺序,依次访问每个元素。
三、顺序表的实现顺序表是用一段连续的存储空间存储线性表的元素,并通过下标来定位元素的位置。
顺序表的实现包括以下步骤:1-定义顺序表的结构体:包含线性表的长度和存储元素的数组。
2-初始化顺序表:给顺序表的长度和数组的每个元素赋初值。
3-插入元素:在指定位置之后的所有元素后移一位,并将要插入的元素放入该位置。
4-删除元素:将指定位置之后的所有元素前移一位,覆盖需要删除的元素。
5-查找元素:从第一个元素开始遍历,逐一比较元素的值,直到找到指定值的元素或遍历结束。
6-获取元素:根据给定的位置直接定位元素的值。
7-修改元素:根据给定的位置直接修改元素的值。
8-遍历线性表:按照数组的下标顺序,依次访问每个元素。
四、链表的实现链表是通过指针将线性表的元素连接起来的数据结构。
链表的实现包括以下步骤:1-定义链表的节点结构体:包含元素的值和指向下一个节点的指针。
2-初始化链表:创建一个空的链表,初始化头节点的指针为NULL。
3-插入元素:创建一个新的节点,将其插入到指定位置的节点之后。
4-删除元素:找到要删除节点的前驱节点,将前驱节点的指针指向要删除节点的后继节点,释放要删除节点的空间。
数据结构线性表
数据结构线性表一、引言数据结构是计算机存储、组织数据的方式,它决定了数据访问的效率和灵活性。
在数据结构中,线性表是一种最基本、最常用的数据结构。
线性表是由零个或多个数据元素组成的有限序列,其中数据元素之间的关系是一对一的关系。
本文将对线性表的概念、分类、基本操作及其应用进行详细阐述。
二、线性表的概念1.数据元素之间具有一对一的关系,即除了第一个和一个数据元素外,其他数据元素都是首尾相连的。
2.线性表具有唯一的第一个元素和一个元素,分别称为表头和表尾。
3.线性表的长度是指表中数据元素的个数,长度为零的线性表称为空表。
三、线性表的分类根据线性表的存储方式,可以将线性表分为顺序存储结构和链式存储结构两大类。
1.顺序存储结构:顺序存储结构是将线性表中的数据元素按照逻辑顺序依次存放在一组地质连续的存储单元中。
顺序存储结构具有随机访问的特点,可以通过下标快速访问表中的任意一个元素。
顺序存储结构的线性表又可以分为静态顺序表和动态顺序表两种。
2.链式存储结构:链式存储结构是通过指针将线性表中的数据元素连接起来,形成一个链表。
链表中的每个节点包含一个数据元素和一个或多个指针,指向下一个或前一个节点。
链式存储结构具有动态性,可以根据需要动态地分配和释放节点空间。
链式存储结构的线性表又可以分为单向链表、双向链表和循环链表等。
四、线性表的基本操作线性表作为一种数据结构,具有一系列基本操作,包括:1.初始化:创建一个空的线性表。
2.插入:在线性表的指定位置插入一个数据元素。
3.删除:删除线性表中指定位置的数据元素。
4.查找:在线性表中查找具有给定关键字的数据元素。
5.更新:更新线性表中指定位置的数据元素。
6.销毁:释放线性表所占用的空间。
7.遍历:遍历线性表中的所有数据元素,进行相应的操作。
8.排序:对线性表中的数据元素进行排序。
9.合并:将两个线性表合并为一个线性表。
五、线性表的应用1.程序语言中的数组:数组是一种典型的顺序存储结构的线性表,常用于存储具有相同类型的数据元素。
线性表_精品文档
线性表什么是线性表?线性表是一种常见的数据结构,它由一系列具有相同数据类型的元素组成。
线性表中的元素之间存在着一对一的线性关系,即每个元素都有唯一的直接前驱和直接后继(除了第一个元素没有直接前驱和最后一个元素没有直接后继)。
线性表可以用来存储一组有序的数据,例如整数、浮点数、字符等等。
它可以通过下标来访问元素,支持插入、删除和查找操作。
线性表的分类线性表可以分为两种基本形式:顺序表和链表。
顺序表顺序表是将线性表的元素按照顺序依次存储在一块连续的存储空间中。
在顺序表中,按照元素插入顺序分为静态顺序表和动态顺序表。
静态顺序表静态顺序表是指事先申请好固定大小的存储空间,用于存储线性表的元素。
静态顺序表的大小在编译时确定,无法动态调整。
当静态顺序表已满时,如果需要插入新的元素,就无法继续插入,需要进行额外的处理。
动态顺序表动态顺序表是指不事先申请固定大小的存储空间,而在需要时进行动态扩容和缩容的顺序表。
动态顺序表的大小可以根据需要动态调整,使得线性表可以动态增长或减少。
链表链表是一种通过指针将线性表的元素链接在一起的数据结构。
链表中的每个元素都包含一个指针,指向下一个元素。
链表的存储空间可以是连续的,也可以是不连续的。
单链表单链表是链表的基本形式。
每个节点包含数据域和指针域,数据域用于存储元素的值,指针域用于指向下一个元素。
链表的头节点没有前驱节点,尾节点没有后继节点。
双链表双链表是在单链表的基础上进行扩展的。
每个节点除了有指向下一个元素的指针,还有指向前一个元素的指针。
双链表可以支持双向遍历和双向操作,但相应地增加了额外的指针域,占用更多的存储空间。
线性表的操作线性表的常用操作包括插入、删除、查找、遍历等。
插入插入操作可以在线性表的指定位置插入一个新的元素。
插入元素时,需要移动后续元素的位置来腾出空间,并调整相应的指针。
插入操作的时间复杂度为O(n)。
删除删除操作可以删除线性表中指定位置的元素。
删除元素时,需要调整前后元素的指针,使得元素之间重新链接。
3线性表
线性表
线性结构特点: 线性结构特点 头 尾 线性 O O O O O 1 2 3 4 5
唯一头元素 唯一尾元素 除头元素外,均有一个直接前驱 除头元素外, 除尾元素外,均有一个直接后继 除尾元素外,
4/48
线性表的定义
1. 线性表的语言定义 线性表是n个数据元素的有限序列。 线性表是 个数据元素的有限序列。 个数据元素的有限序列
pa = La->next ; pb = Lb->next ;//分别指向第一个结点 分别指向第一个结点 Lc = pc = La ; while ( pa && pb ) { if ( pa->data <= pb->data ) { pc->next = pa ;pc = pa ;pa = pa->next ;} else { pc->next = pb ;pc = pb ;pb = pb->next ;} } pc->next = pa ? pa : pb ;//处理剩余部分 处理剩余部分 free (Lb) ; }
11/48
假设p 假设 i是在第 i 个元素之前插入一个新元素的概率 则长度为 n 的线性表中插入一个元素所需移动元 期望值为 素次数的期望值 素次数的期望值为: Eis = ∑ pi (n – i + 1)
i=1 n+1
1 设在任何位置插入元素等概率 等概率, 设在任何位置插入元素等概率, pi = n+1 1 Eis = ∑ (n – i + 1) = n n+1 i=1 2
15/48
假设q 假设 i是删除第 i 个元素的概率 则长度为 n 的线性表中删除一个元素所需移动元 素次数的期望值为 素次数的期望值为: Edl = ∑ qi (n – i) 期望值
数据结构(线性表)总结课件-2024鲜版
链表的查找
从头结点开始遍历链表,比较每个结点的 数据域与查找值,直到找到目标结点或遍 历完整个链表。
链表的遍历
从头结点开始,顺着指针依次访问每个结 点,直到尾结点。
链表的删除
删除指定位置的结点,需要修改相邻结点 的指针链接关系,并释放被删除结点的存 储空间。 2024/3/28
链表的插入
在指定位置插入一个新结点,需要修改相 邻结点的指针链接关系。
使用线性表来存储学生成绩信息,每个元素代表一个学生的成绩记录,
包含学号、姓名、各科成绩等属性。可以方便地进行学生成绩的录入、
查询、排序等操作。
20
05
线性表性能评价与改进策略
2024/3/28
21
时间复杂度分析
插入操作
在已知位置插入一个元素,需要移动插入位置 及之后的元素,时间复杂度为O(n)。
2
链表由一系列结点(每一个结点包含数据域和指 针域)组成,结点可以在运行时动态生成。
3
链表的特点是插入和删除操作灵活,不需要移动 大量元素,但查找操作相对较慢,需要从头结点 开始遍历。
2024/3/28
14
单链表、双向链表和循环链表
01
02
03
单链表
每个结点只包含一个指向 后继结点的指针,从头结 点开始,顺着指针可以遍 历整个链表。
02
数组的大小在创建时就已经确定,无法动态扩展。
不利于数据的动态变化
03
对于经常进行插入和删除操作的数据,使用数组作为存储结构
可能不是最优选择。
12
03
链式存储结构——链表
2024/3/28
13
链表定义及特点
1
链表是一种物理存储单元上非连续、非顺序的存 储结构,数据元素的逻辑顺序是通过链表中的指 针链接次序实现的。
数据结构线性表
数据结构线性表简介在计算机科学中,线性表是一种常见的数据结构。
线性表由一组元素组成,这些元素按照线性的顺序排列。
线性表可以通过索引访问,并且可以在任意位置进行插入或删除操作。
本文档将介绍线性表的基本概念、操作以及常见的实现方式。
1.线性表的定义线性表是由n(n≥0)个元素组成的有序序列,元素之间存在一对一的关系,除第一个和最后一个元素外,每个元素都有且仅有一个直接前驱和一个直接后继。
1.1 顺序表顺序表是一种使用连续的存储空间来存储线性表元素的实现方式。
在顺序表中,元素按照其在线性表中的顺序依次存储,可以通过索引快速访问。
1.2 链表链表是一种使用非连续的存储空间来存储线性表元素的实现方式。
在链表中,每个元素都包含一个指向下一个元素的指针,从而形成一个链式结构。
2.基本操作2.1 初始化初始化线性表,创建一个空的线性表对象。
2.2 插入在线性表的指定位置插入一个元素。
2.3 删除从线性表中删除指定位置的元素。
2.4 查找在线性表中查找指定元素,并返回其位置。
2.5 遍历遍历线性表中的所有元素,按照指定顺序进行处理。
3.常见实现方式3.1 数组使用数组作为底层存储结构实现线性表。
数组的长度固定,插入和删除操作可能需要移动其他元素。
3.2 链表使用链表作为底层存储结构实现线性表。
链表的长度可变,插入和删除操作只需改变元素之间的指针。
附件本文档没有涉及附件。
法律名词及注释无。
线性表_数据结构
线性表_数据结构在计算机科学领域,数据结构是一门极其重要的基础知识,它就像是我们日常生活中整理物品的方式,不同的整理方式对应着不同的数据结构,能够帮助我们更高效地处理和操作数据。
而线性表,作为数据结构中的一个基础且重要的数据结构,有着广泛的应用和重要的地位。
那么,什么是线性表呢?简单来说,线性表是一种有限的、有序的数据元素序列。
这些数据元素一个接一个地排列,就像排成一列的士兵,每个元素都有其特定的位置。
线性表有两种常见的实现方式,分别是顺序存储结构和链式存储结构。
顺序存储结构就像是把一排书整齐地摆放在书架上。
我们为这排书分配了一块连续的存储空间,每个元素占据其中固定大小的位置。
通过这种方式,我们可以很容易地通过元素的位置来访问和操作它们。
比如说,如果我们知道第一个元素的位置,又知道每个元素所占的空间大小,那么要找到第 n 个元素就非常简单,直接计算出相应的偏移量就可以了。
这种方式的优点是访问元素的速度非常快,因为计算位置很直接。
但它也有缺点,那就是插入和删除操作比较麻烦。
想象一下,如果要在这排书中插入一本新书,可能需要把后面的书都往后挪一个位置;要删除一本书,又得把后面的书都往前移一个位置,这可是个不小的工作量。
相比之下,链式存储结构则更像是用链条把一个个珠子串起来。
每个元素(珠子)除了存储自身的数据,还包含一个指向下一个元素的指针(链条)。
通过这些指针,我们可以依次找到链表中的每一个元素。
这种方式的优点是插入和删除操作相对简单。
要插入一个新元素,只需要修改相关的指针就可以了;删除元素也是同样的道理。
但它的缺点是访问元素的速度较慢,因为要通过指针一个一个地找过去。
线性表在实际应用中有很多场景。
比如说,我们可以用线性表来存储学生的成绩。
如果我们想要按照成绩的高低对学生进行排序,那么顺序存储结构可能会比较方便,因为可以直接比较相邻元素的大小来进行排序。
而如果我们经常需要添加或删除学生的成绩记录,那么链式存储结构可能更合适。
数据结构之线性表课件-2024鲜版
03
能够运用线性表解 决实际问题
04
培养学生的实践能 力和创新思维能力
2024/3/28
35
实验内容和步骤
1. 实验内容
实现线性表的顺序存储结构,包括插入、删除、 查找等基本操作
实现线性表的链式存储结构,包括单链表、双向 链表和循环链表等
2024/3/28
36
实验内容和步骤
01
对比分析不同存储结构的性能特点和使用场景
2024/3/28
02
2. 实验步骤
设计并实现线性表的顺序存储结构,编写相关操作的函数或方
03 法
37
实验内容和步骤
设计并实现线性表的链式存储结 构,包括节点定义和基本操作实
现
2024/3/28
编写测试程序,验证实现的正确 性和性能
对比分析实验结果,总结不同存 储结构的优缺点
38
课程设计选题建议
41
THANKS
感谢观看
2024/3/28
42
2024/3/28
同一性 有序性 可变性
可存储性
线性表中的元素具有相同的数据 类型。
线性表的长度(即元素个数)可 变。在定义线性表时,其长度是 未定的,可以插入或删除元素。
5
线性表基本操作
2024/3/28
初始化操作
01
建立一个空的线性表。
插入操作
02
在线性表的指定位置插入一个元素。
删除操作
03
删除线性表中的指定元素。
6
线性表基本操作
01
查找操作
在线性表中查找指定 元素,并返回其位置 。
02
遍历操作
依次访问线性表中的 每个元素。
数据结构课件之线性表
我觉得老师讲解得非常详细,特别是对于一些难以理解的概念和算法 ,通过老师的讲解和示例,我很快就掌握了。
未来发展趋势预测
线性表作为基础数据结构,其重要性不言而喻。随着大数据、人工智能等领域的不 断发展,对线性表的处理能力和效率要求也越来越高。
未来可能会出现更多针对线性表的优化算法和技术,以满足不同应用场景的需求。
存储空间动态分配,可以充分利 用计算机内存空间,实现灵活的
内存动态管理。
插入、删除等操作不需要移动大 量元素,只需要修改相应的指针
即可,因此具有较高的效率。
逻辑结构与物理结构不一定一致 ,因此可以方便地实现各种复杂
的数据结构。
链式存储结构实现方式
每个节点包含两个指针域,分别 指向其前驱节点和后继节点。
从线性表的中间位置开始,同时 向前和向后遍历,直到遍历完整 个线性表。这种遍历方式在某些
算法中有特殊应用。
03
线性表顺序存储结构
Chapter
顺序存储结构定义
顺序存储结构是用一段连续的存储空间来依次存放线性表的 各个元素。
在这种存储结构中,线性表中第一个元素的存储地址作为线 性表的起始地址,每个元素的存储地址是其逻辑序号与元素 所占存储单元大小的乘积加上起始地址。
设置初始状态
将线性表的长度设为0,表示初始 时线性表为空。
插入操作
01
02
03
确定插入位置
根据需要插入元素的位置 ,确定该位置在线性表中 的序号。
移动元素
从线性表的最后一个元素 开始,依次将每个元素向 后移动一个位置,直到达 到插入位置。
插入新元素
在插入位置处插入新元素 ,并更新线性表的长度。
删除操作
线性表的操作算法
线性表逻辑结构
Insert_sqlist(struct qlist L, datetype x, int i)
{
if(i<1||i>L.length+1) error("illegal value of i"); /*插入位置i不正确*/
else if(L.length == Maxlen) error("List overflow") ; /*表满*/
else
{
/*将线性表的最后一个元素至第i个元素均向后移一个位置*/
for(k=L.length-1; k>=i-1; k--)
L.elem[k+1]= L.elem[k];
L.elem[i-1]=x ;
/*将x插入线性表的第i个位置*/
L.length++ ;
/*线性表长度加1*/
}
}
插入算法的时间复杂度为O(n)。
{
p=p->next;
j++;
}
/* 使指针p指向第i-1个结点*/
if(!p && p->next!==null) printf("第i-1个结点不存在"); /* i值不正确*/
else
{
Hale Waihona Puke q=p->next;
/*使指针q指向第i个结点 */
p->next=q->next; /*使链表的原第i-1个结点指向第i+1个结点*/
其中datetype表示线性表元素的抽象数据类型,用程序设 计语言上机实现算法时,再定义为具体的数据类型。
maxlen表示线性表最多允许的元素个数。 length表示线性表的当前长度。其值是0至maxlen间的一
数据结构线性表ppt课件
2. 创建两个多项式对象,并初始化它们的系数和指 数。
多项式相加问题
01 3. 遍历两个多项式对象的线性表,将相同指数的 系数相加。
02 4. 创建新的线性表存储结果多项式的系数和指数 。
03
5. 返回结果多项式对象。
约瑟夫环问题
问题描述
n个人围成一圈,从第一个人开始报 数,每次数到m的人出列,然后从下 一个人开始继续报数,直到所有人都 出列为止。求每次出列的人的序号。
03
线性表基本操作
插入操作
在指定位置插入一 个元素。
查找操作
查找指定元素的位 置。
初始化操作
建立一个空的线性 表。
删除操作
删除指定位置的元 素。
遍历操作
访问线性表中的每 个元素。
02
顺序存储结构及其实现
顺序存储结构原理
顺序存储定义
用一段地址连续的存储单元依次 存储线性表的数据元素。
存储方式
逻辑上相邻的元素,其物理存储 位置也相邻。
...,an组成的有序序列。
性质
集合中必存在唯一的一个“第一元素 ”。
集合中必存在唯一的一个“最后元素 ”。
除最后元素之外,均有唯一的后继。
除第一元素之外,均有唯一的前驱。
线性表与数组关系
01
数组是线性表的一种表现和实现形式。
02
线性表是逻辑结构,而数组是存储结构。
任何一种逻辑结构都可以用多种存储结构表示。
顺序表基本操作实现
初始化操作
创建一个空表,分配存储空间。
插入操作
在指定位置插入一个元素,需移动插入位置后的所有元素。
删除操作
删除指定位置的元素,需移动删除位置后的所有元素。
数据结构课件线性表
目录
CONTENTS
• 线性表的基本概念 • 线性表的实现方式 • 线性表的基本操作 • 线性表操作的效率分析 • 线性表的应用案例
01 线性表的基本概念
线性表的定义
线性表:线性表是一种具有线性 关系的抽象数据类型,其元素之
间存在一对一的顺序关系。
线性表由n个元素组成,每个元 素都有一个唯一的标识符,称为
04 线性表操作的效率分析
顺序存储结构的效率分析
访问元素
顺序存储结构中,访问任意一个元素 的时间复杂度为O(1),因为可以通过 索引直接访问。
插入和删除操作
顺序存储结构中,插入和删除操作的时 间复杂度为O(n),因为需要移动元素来 保持线性表的连续性。
链式存储结构的效率分析
访问元素
链式存储结构中,访问任意一个元素的时间复杂度为O(n),因为需要从头节点 开始遍历链表直到找到目标节点。
VS
详细描述
二维数组是一种二维的数据结构,可以看 作是线性表的扩展。在二维数组中,每个 元素的位置由其行列索引确定,这使得二 维数组在表示矩阵等数学运算中非常方便 。同时,二维数组也可以通过行优先或列 优先的方式进行线性化处理,转化为线性 表的形式进行操作。
哈希表的设计与实现
总结词
哈希表是一种特殊的线性表,通过哈希函数将键映射到数组的索引上,实现快速的查找 操作。
线性表的分类
静态线性表
静态线性表是使用数组实现的线 性表,其大小在创建时确定,且 不可改变。
动态线性表
动态线性表是使用链表或动态数 组实现的线性表,其大小可以动 态地增加或减少储结构是指将线性表中 的元素按照一定的顺序存储在 一片连续的存储空间中。
顺序存储结构的特点是访问速 度快,可以通过索引直接访问 任意元素。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
a1 a2 a3 a4 … ai-1 ai ai+1 … an
• 上边的图片大家想到了什么? • 是不是跟丫的数组一样一样的?!
线性表的顺序存储结构
• 物理上的存储方式事实上就是在内存中找个初始地 址,然后通过占位的形式,把一定的内存空间给占 了,然后把相同数据类型的数据元素依次放在这块 空地中。 • 大家可能喜欢听小甲鱼拿现实的栗子来举例。 • 哈,就例如小甲鱼带着咱的鱼C旅游团去看电影, 看那个叫3D*蒲团有木有?!哎哟,去到电影院人 山人海,但妹子的身影还是难以逃过小甲鱼的火眼 精金,所以小甲鱼猛地带领众鱼油一把夺下了妹子 旁边的一排位置。。。。。。
插入操作
• 刚才我们也谈到,线性表的顺序存储结构具有随机 存储结构的特点,时间复杂度为O(1)。 • 大家现在来考虑下,如果我们要实现 ListInsert(*L, i, e),即在线性表L中的第i个位 置插入新元素e,代码应该如何写? • 例子接着举,刚才小甲鱼在电影院成功的博得妹子 的欢心,妹子表示愿意加入我们鱼C旅游团。大家 狠兴奋丫有木有!因为大家都希望小甲鱼把妹子排 到自己身边。但是我们要按我们定下的规则来排: 按身高顺序。
地址计算方法
• 所以对于第i个数据元素ai的存储位置可以由a1推 算得出:LOC(ai) = LOC(a1) + (i-1)*c • 结合下图来理解:
元素 下标 a1 0 a2 1 … … ai-1 i-2 ai i-1 … … an n-1 空闲空间
• 通过这个公式,我们可以随时计算出线性表中任 意位置的地址,不管它是第一个还是最后一个, 都是相同的时间。那么它的存储时间性能当然就 为0(1),我们通常称为随机存储结构。
地址计算方法
• 我们或许习惯了数组的从0开始的计算方法,所以 导致小甲鱼像去电影院坐错位置被妹子怒骂无耻 等尴尬事件不胜枚举。 • 线性表的定义充分考虑到很多军师级别领导的智 商指数,所以决定从1开始回归正常思维。 • 假设ElemType占用的是c个存储单元(字节),那 么线性表中第i+1个数据元素和第i个数据元素的 存储位置的关系是(LOC表示获得存储位置的函数 ):LOC(ai+1) = LOC(ai) + c
数据结构和算法
作者:小甲鱼
让编程改变世界
Change the world by program
线性表的顺序存储结构
• 我们可以想象,线性表有两种物理存储结构:顺 序存储结构和链式存储结构。 • 线性表的顺序存储结构,指的是用一段地址连续 的存储单元依次存储线性表的数据元素。 • 线性表(a1,a2,…,an)的顺序存储如下:
线性表的顺序存储结构
• 总结下,顺序存储结构封装需要三个属性:
– 存储空间的起始位置,数组data,它的存储位置就 是线性表存储空间的存储位置。 – 线性表的最大存储容量:数组的长度MaxSize。 – 线性表的当前长度:length。
• 注意,数组的长度与线性表的当前长度需要区分 一下:数组的长度是存放线性表的存储空间的总 长度,一般初始化后不变。而线性表的当前长度 是线性表中元素的个数,是会变化的。
获得元素操作
• 实现GetElem的具体操作,即将线性表L中的第i个 位置元素值返回。就程序而言非常简单了,我们 只需要把数组第i-1下标的值返回即可。
• 我们来学习下具体的代码:getElem.c • 注意这里返回值类型Status是一个整型,约定返 回1代表OK,返回0代表ERROR。今后还会出现,也 是使用同样的约定,不再详述。
线性表的顺序存储结构
• 接下来看线性表顺序存储的结构代码:
#define MAXSIZE 20 typedef int ElemType; typedef struct { ElemType data[MAXSIZE]; int length; // 线性表当前长度 } SqList;
• 大家看到了,这里我们封装了一个结构,事实上 就是对数组进行封装,增加了个当前长度的变量 罢了。
插入操作
插入操作
• 所以插入算法的思路:
– 如果插入位置不合理,抛出异常; – 如果线性表长度大于等于数组长度,则抛出异常或 动态增加数组容量; – 从最后一个元素开始向前遍历到第i个位置,分别 将它们都向后移动一个位置; – 将要插入元素填入位置i处; – 线性表长+1。
• 实现代码:ListInsert.cFra bibliotek性表的顺序存储结构
• 话说小甲鱼拿下第一个位置后,鱼油们果断依次 坐下,这样子我们就建立了一个线性表。 • 由此可见,这小甲鱼夺下的第一个位置是非常关 键的,如果妹子身旁的位置被其他人占据了,小 甲鱼就不能代替大家问到妹子的联系方式了! • 可现实中总会有些不按部就班来的,例如黑夜喜 欢乱吃零食,所以他又拉肚子了。。。但是黑夜 买票了,所以他的位置就算空着,也没有人会坐 上去。这就是顺序存储结构的特性之一。