第2章--线性表PPT课件

合集下载

线性表 PPT课件

线性表 PPT课件
数据结构
第二章 线性表
10:29
• 第 2章 • 第 3章 • 第 4章 义表
线性表 栈和队列 串、数组和广
线性结构
(逻辑、存储 和运算)
线性结构的定义: 若结构是非空有限集,则有且仅有一个开始结 点和一个终端结点,并且所有结点都最多只有一个 直接前趋和一个直接后继。 可表示为:(a1 ,
a2
, ……,
10:29
例3 某校从1978年到1983年各种型号的计算机拥 有量的变化情况。 (6,17,28,50,92,188) 数据元素都是数字; 元素间关系是线性 例4一副扑克的点数 (2,3,4,…,J,Q,K,A) 数据元素都是字符; 元素间关系是线性
同一线性表中的元素必定具有相同特性
10:29
线性表特点:在数据元素的非空有限集中 – 存在唯一的一个被称作“第一个”的数据元素 – 存在唯一的一个被称作“最后一个”的数据元素 – 除第一个外,集合中的每个数据元素均只有一个 直接前驱 – 除最后一个外,集合中的每个数据元素均只有一 个直接后继
10:29
7. 检索值为e的数据元素 LocateELem(L,e) 判断线性表L中是否存在值为e的结点 8. 在线性表L中插入一个数据元素 ListInsert(&L,i,e) 向线性表L的第i个位置之前插入一个值为e的数据元素 9. 删除线性表L中第i个数据元素 ListDelete(&L,i,&e) 删除线性表L的第i个数据元素,并将该数据元素的值返回e中 10.返回前驱结点 PriorElem(L,cur_e,&pri_e) 返回L中当前数据元素cur_e的前驱结点 11.返回后继结点NextElem(L,cur_e,&next_e) 返回L中当前数据元素cur_e的的后继结点

数据结构课件第2章线性表

数据结构课件第2章线性表

27
线性表的顺序存储结构适用于数据 元素不经常变动或只需在顺序存取设备 上做成批处理的场合。为了克服线性表 顺序存储结构的缺点,可采用线性表的 链式存储结构。
28
2.3 线性表的链式存储结构
线性表的链式存储表示 基本操作在单链表上的实现 循环链表 双向链表 线性表链式存储结构小结
2.3.1 线性表的链式存储表示 29
2.1.1 线性表的定义
6
一个线性表(linear_list)是 n(n≥0)个具有相同属性的数 据元素的有限序列,其中各元素有着依次相邻的逻辑关系。
线性表中数据元素的个数 n 称为线性表的长度。当 n = 0 时 该线性表称为空表。当 n > 0 时该线性表可以记为:
(a1,a2,a3,…,ai,…,an)
数据域 指针域
结点 data next
31
(2) 线性表的单链表存储结构
通过每个结点的指针域将线性表中 n 个结点按其逻辑顺序链 接在一起的结点序列称为链表,即为线性表 ( a1, a2, a3, …, ai, …, an ) 的链式存储结构。如果线性链表中的每个结点只有一个指针域, 则链表又称为线性链表或单链表 (linked list)。
17
(2) 算法编写
#define OK 1
#define ERROR 0
Int InsList ( SeqList *L, int i, ElemType e ) /*在顺序线性表 L 中第 i 个位置插入新的元素 e。*/ /* i 的合法值为 1≤i ≤L->last+2*/ {
int k; if ( i < 1) ||( i > L->last+2)) /*首先判断插入位置是否合法*/ { printf(“插入位置i值不合法”);

《数据结构》课程课件第二章线性表

《数据结构》课程课件第二章线性表

Step2:数据域赋值
插入后: Step3:插入(连接)
X q
(1)式和(2)式的顺序颠倒,可以吗?
4、插入元素(在第i个元素之前插入元素e)
为什么时间复杂度不再是O(1)?
第i-1个元素
第i个元素
p
s
新插入元素
5、删除p所指元素的后继元素
P
删除前:
P->next P->next->next
删除:
五、线性表ADT的应用举例
Void mergelist(list La,list Lb,list &Lc)
{ //已知线性表La和Lb中的数据元素按值非递减排列
//归并La和Lb得到新的线性表Lc,Lc中的元素也按值非递减排列
例: 将两个各有n个元素的有序表归并成一个有序表, 其最小的比较次数是( )。 A、n B、2n-1 C、2n D、n-1
三、线性表的ADT
四、线性表的分类
五、线性表ADT的应用举例
例1:已知有线性表L,要求删除所有X的出现
五、线性表ADT的应用举例
例2: 已知有两个分别有序的线性表(从小到大),要 求合并两个线性表,且合并后仍然有序。——归并 方法1: 合并,再排序O((m+n)2)
方法2: 归并,利用分别有序的特点O((m+n))
二、线性表上常见的运算
8、删除 Delete(L,i):删除线性表的第i个元素 删除前 a1 a2 … ai-1 ai ai+1 … an 删除后 a1 a2 … ai-1 ai+1 … an 9、判断是否为空 Empty(L):线性表空,则返回TRUE, 否则FALSE 10、输出线性表 Print(L):输出线性表的各个元素 11、其它操作 复制、分解、合并、分类等

第2章线性表-PPT精品文档

第2章线性表-PPT精品文档

( ) a , a, a , x , a , a i n
2、顺序表的插入
{ if (i<1 ||i>L.length+1 ) return ERROR;
P24 算法2.4
Status ListInsert_Sq(SqList &L,int i,ElemType e) //i值不合法
2.2
二、线性表的顺序存储结构定义 ——动态
#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量 #define LISTINCREMENT 10 //线性表存储空间的分配增量 typedef struct { ElemType *elem; //存储空间基址, 体现动态性 int length; //当前长度 int listsize; //当前分配的存储容量 }SqList;
M-1 或动态申请和释放内存 数据元素不是简单类型时,可定义结构体数组 ElemType *pData; pData = (ElemType *)malloc(M*sizeof(ElemType)); free(pData); 2019/3/26
二、线性表的顺序存储结构定义 ——静态
#define MAXSIZE 100 typedef struct { ElemType elem[MAXSIZE]; int length; }SqList;
#define LISTINCREMENT 10 typedef typedef struct struct { { ElemType *elem; ElemType elem[MAXSIZE]; int length; int length; int listsize; }SqList; }SqList;

数据结构线性表ppt课件

数据结构线性表ppt课件
➢ 数组(Array)存储具有相同数据类型的元素集合。 一维数组占用一块内存空间,每个存储单元的地 址是连续的,计算第i个元素地址所需时间复杂度 是一个常量, 与元素序号i无关。
线性表的分类
线性表 ADT
顺序存储结构 (元素连续存储、
继承
顺序表类
排序顺序表类
随机存取结构)
继承
链式存储结构
(元素分散存储)
单链表 双链表
单链表类 循环单链表 双链表 循环双链表类
排序单链表类
继承 排序循环双链表类
线性表的存储结构
2.2 线性表的顺序存储和实现
线性表的顺序存储结构
数组 :是实现顺序存储结构的基础。
数据结构
第 2 章 线性表
线性结构
线性结构是最常用、最简单的一种数据结构。而线性 表是一种典型的线性结构。其基本特点是线性表中的数据 元素是有序且是有限的。
线性结构基本特征: ① 存在一个唯一的被称为“第一个”的数据元素; ② 存在一个唯一的被称为“最后一个”的数据元素; ③ 除第一个元素外,每个元素均有唯一一个直接前驱; ④ 除最后一个元素外,每个元素均有唯一一个直接后 继。
其中LinearList称为线性表的名称 每个ai(n-1≥i≥0)称为线性表的数据元素,可以是整数、
浮点数、字符或类 表中相邻元素之间存在着顺序关系:将 ai-1 称为 ai 的前
驱(Predecessor),ai+1 称为 ai 的后继 (Successor)。a0没有前驱元素,an-1没有后继元素 具体n的值称为线性表中包含有数据元素的个数,也称 为线性表的长度(Length) 当n的值等于0时,表示该线性表是空表
2.1 线性表抽象数据类型
线性表的定义

第2章 线性表 (数据结构教程PPT课件)

第2章 线性表 (数据结构教程PPT课件)

3.在数组a中检索(查找)值为X的数据元素
int locate (int a[ ],int n, int x) { int i; i=0; while((i<=n-1)&&(a[i]!=x)) i++; if(i<=n-1) return (i); /*返回的是存储位置*/ else return (0);} }
(2)按值查找即定位 Locate_LinkList(L,x) Lnode * Locate_LinkList( LinkList L, datatype x) /*在单链表L中查找值为x的结点,找到后 返回其指针,否则返回空*/ { Lnode * p=L->next; while ( p!=NULL && p->data != x) p=p->next; return p; }
2.2.2 典型操作的算法实现
1. 初始化线性表L
SeqList *init_SeqList( )
{ SeqList *L; L=malloc(sizeof(SeqList)); L->last=-1; return L; }
2.在数组a第i个数据元素之(ai-1)前插入数据 元素X insert (int a[ ],int n,int i, int x) { int j; for(j=n-1;j>=i-1;j--) a[j+1]=a[j]; /* 结点移动 */ a[i-1]=x; /*新元素插入*/ n++; /*修改长度*/ }
4.删除数组a第i个数据元素(ai-1) delete (int a[ ],int n,int i) { int j; for(j=i;j<=n;j++) a[j-1]=a[j]; /* 结点移动 */ n--; /*修改长度*/ }

线性表ppt

线性表ppt
由于C语言函数的参数仅能向被调函数传值,这个值在返 回时也不会改变,因此在上面的算法中,采用指针变量v做形 参,虽然从被调函数返回时指针v值不变,但是v地址中所代表 的结构体的内容发生了变化。这就是所谓的传址调用。
假设在主函数中已经建立了线性表结构体s,并且要在第3 个位置插入88,语句如下:
insert ( &s,3,88);
其他特 VIP专享精彩活动

VIP专属身份标识
开通VIP后可以享受不定期的VIP随时随地彰显尊贵身份。
专属客服
VIP专属客服,第一时间解决你的问题。专属客服Q全部权益:1.海量精选书免费读2.热门好书抢先看3.独家精品资源4.VIP专属身份标识5.全站去广告6.名
以用来说明结构体变量:
Sqlist1 a; 在正式使用a之前必须为数据成员elem分配足够的空间。 语句如下:
a.elem=(Sqlist1 *)malloc(MAXSIZE*sizeof(Sqlist1)); 对结构体内elem子域的访问与前文有所不同。在输入/输出时 的情况,也与前文有所不同。在程序运行结束之前,这些动态 分配的存储空间还要释放归还给系统,语句如下:
(5) Insert(L,i,x) 在线性表中第i个元素之后(或之前)插入一个新元素x;
(6) Delete(L,i) 删除线性表中的第i个元素;
(7) Empty(L)
判断线性表是否为空;
(8) Clear(L)
将已知的线性表清理为空表;
第2章 线 性 表
在上述的操作运算中,最基本最重要的是插入、删除。 线性表的其他复杂操作和运算还有:对有序表的插入和删除; 按某种要求重排线性表中各元素的顺序;按某个特定值查找 线性表中的元素;两个线性表的合并等。

《第二章线性表》PPT课件

《第二章线性表》PPT课件
en = e; // en为最后一次La插入的值 } // La中不存在和 e 相同的数据元素,则插入
例 2-3
归并两个"其数据元素按值非递减有序 排列"的有序表 LA 和 LB,求得有序表 LC 也具有同样特性.
设 La = <a1, …, ai, …, an>, Lb = <b1, …, bj, …,
ListInsert<Lc, ++k, ai>; ++i; } else { // 将 bj 插入到 Lc 中
ListInsert<Lc, ++k, bj>; ++j; }
void MergeList<List La, List Lb, List &Lc> { // 本算法将非递减的有序表 La 和 Lb 归并为 LcInitList<Lc>; // 构造空的线性表 Lc
是最后一个元素,则用next_e 返回它的后继,否则操作失 败,next_e无定义。
GetElem< L, i, &e >
〔求线性表中某个数据元素〕
初始条件:线性表 L 已存在,
且 1≤i≤LengthList(L)
操作结果:用 e 返回L中第 i 个元素的值。
LocateElem< L, e, compare< > >
bj 插入到 LC 中; 4.重复 2 和 3 两步,直至 LA 或 LB 中元素
被取完为止; 5.将 LA 表或 LB 表中剩余元素复制插入到
LC 表中.
// La 和 Lb 均非空,i = j = 1, k = 0 GetElem<La, i, ai>; GetElem<Lb, j, bj>; if <ai <= bj> { // 将 ai 插入到 Lc 中

数据结构与算法线性表.ppt

数据结构与算法线性表.ppt

线性结构分类
按操作划分
线性表
• 所有表目都是同一类型结点的线性表 • 不限制操作形式 • 根据存储的不同分为:顺序表,链表
栈(LIFO, Last In First Out)
• 插入和删除操作都限制在表的同一端进行
队列(FIFO, First In First Out)
• 插入操作在表的一端, 删除操作在另一端
bool append(const T value); // 在表尾添加一个元素value,表的长度增1
bool insert(const int p, const T value);
// 在位置p上插入一个元素value,表的长度增1
bool delete(const int p);
// 删除位置p上的元素,表的长度减 1
bool getPos(int & p, const T value)
// 查找值为value的元素并返回其位置
bool getValue(const int p, T& value);
// 把位置p的元素值返回到变量value中
bool setValue(const int p, const T value);// 用value修改位置p的元素值
有序性:各数据元素在线性表中都有自己的位置,且 数据元素之间的相对位置是线性的
线性结构
包括:
简单的
• 线性表 •栈 • 队列 • 散列表
高级的
• 广义表 • 多维数组 • 文件
……
线性结构分类
按访问方式划分
直接访问型(direct access) 顺序访问型( sequential access) 目录索引型(directory access)

第二章线性表

第二章线性表

线性表的遍历算法
ListTraverse(L)
//遍历线性表中的元素
{
if(ListEmpty(L))
//判断表是否为空
printf(“这是一个空表”);
else
for(i=1;i<=ListLength(L);i++)
visit(ListGet(L,i));
//访问线性表中的元素i
}
2.线性表的合并
第二章线性表
2.1 线性表的定义
2.1.1 线性表的概述 2.1.2 线性表的抽象数据类型 2.1.3 线性表的相关操作
2.1.1 线性表概述
➢线性表的逻辑定义 •n(n≥0)个属于同一数据类型的数据元素a1,a2,……,an组成 的有限序列,称为线性表。 L=(D,R) 其中,D={a1,a2, ……,an} R={< ai-1,ai>| ai-1,ai∈D,2≤ i≤ n } •当n=0时,为空表。
➢ 合并:将两个线性表La和Lb合并成一个长度为 ListLengh(La)+ ListLength(Lb)的线性表Lc。
1) 直接合并:将线性表Lb中的元素插入到线性表La中。 2) 保序合并:将两个有序的表La和Lb归并为一个新的线性表
Lc,并且保证线性表Lc仍然是有序的。 P.26页:算法 2.6
if((i<1)︱︱(i>L.lenght+1)) { printf(“i不合法!”) ;
exit(0);} for (j=i;j<=L.length;j++)
L.data [j]=L.data[j+1]; L.length--; }
顺序表删除的算法评价
设qi是删除第i个元素的概率,则在表长为n的表中删除一个元 素所需移动次数的平均值为:

第二章 线性表PPT课件

第二章  线性表PPT课件

(二)线性表的删除(1)
1﹑删除下标为i的 数据元素
例2.3 为在V[0]到V[99] 中删除一个元素 V[i],引用del1函数。 删除前后的线性表 的示意图如右
举例(续)
分析: ①初始条件: 数组V,
删除下标i ②删除条件:0≤i≤99 ③执行结果:1成功,0
不成功 ④N-S流程图如右:
举例(续)
(一)线性表插入操作(1)
1、在数组中下标为i的元 素前插入一个新元素。
例2.1 某C语言程序中, 整型数组V的99个元数 V[0]~V[98]组 成一个线性表。为了在V [i]位置前插入一个新元 素b,可用如下函数inst1 来实现,当插入成功时返 回1,否则返回0,所以该 函数的返回值类型是整型。 插入前后的线性表的示意 图如右:
第二章 线性表
2.1 线性表的逻辑结构 2.2 线性表的顺序存储结构 2.3线性表的链式存储结构 2.4 典型例题
线性表的特点是:在数据元素的非空有
限集中,(1)存在唯一的一个被称为 “第一个”的数据元素;(2)存在唯一
的一个被称为“最后一个”的数据元素; (3)除第一个以外,集合中的每一个数 据元素均有且只有一个前驱;(4)除最
V[99]=0; /*数组最后一个元素清0或某种结束标记*/ return 1; /*删除成功 */ }
线性表的删除操作(2)
2﹑在有序顺序表 中删除一个数据 元素
例2.4 在有序表中 删除一个值为x的 数据元素。当x的 值为78时删去前 后的线性表的
示意图如右:
举例(续)
分析: ①初始条件:数组
return 0; /*插入失败*/
} for (j=99;j>i;j--) v[j]=v[j-1];/*后移*/ v[i]=b; /*插入*/ return 1; /*插入成功 */ }

数据结构课件之线性表(ppt 86页)

数据结构课件之线性表(ppt 86页)

删除算法
int DelList(SeqList *L,int i,ElemType *e)
/*在顺序表L中删除第i个数据元素,并用指针参数e返回其值*/
{ int k;
if((i<1)||(i>L->last+1))
{ printf(“删除位置不合法!”); return(ERROR); }
*e= L->elem[i-1]; /* 将删除的元素存放到e所指向的变量中*/
loc(ai) =loc(a1)+(i-1)×k
8
15.10.2019
顺序存储结构示意图
存储地址
Loc(a1) Loc(a1)+(2-1)k

loc(a1)+(i-1)k

loc(a1)+(n-1)k
...
loc(a1)+(maxlen-1)k
内存空间状态
a1 a2

ai

an
9
逻辑地址
1 2

i
操作前提:L为未初始化线性表。 操作结果:将L初始化为空表。 操作前提:线性表L已存在。 操作结果:将L销毁。 操作前提:线性表L已存在 。 操作结果:将表L置为空表。
………
}ADT LinearList
6
15.10.2019
2.2 线性表的顺序存储
2.2.1 线性表的顺序存储结构 2.2.2 线性表顺序存储结构上的基本运算
17
15.10.2019
删除算法示意
将线性表(4,9,15,21,28,30,30,42,51,62)中的第5个元素 删除。
序号
1 2 3 4 5 6 7 8 9 10 4 9 15 21 28 30 30 42 51 62

第2章线性表newppt课件

第2章线性表newppt课件

2018/11/14
10
第二章 第1节
例2:教材信息表
无直接前驱 数据元素 (记录) 第1个数据元素 直接前驱
第i个数据元素 直接后继 第n个数据元素 无直接后继
教材名称
面向对象系统分析与 设计 …… PowerBuilder应用 数据结构(C++ 描述) Java高级开发指南 …… JavaScript编程指南
前置条件:表已存在 输入:数据元素x 功能:在线性表中查找值等于x的元素 输出:如果查找成功,返回元素x在表中的序号,否则 返回0 后置条件:表不变
2018/11/14
14
第二章 第1节
Insert
前置条件:表已存在 输入:插入i;待插x 功能:在表的第i个位置处插入一个新元素x 输出:若插入不成功,抛出异常 后置条件:若插入成功,表中增加一个新元素
2018/11/14
17
第二章 第2节
一维数组 内存状态 元素在线性 下标 表中的位序 0 1 … i-1 … n-1 … listsize a1 a2 … ai … an … 1 线性表的顺序存储表示: 1)用一个一维数组存放 数据元素 2)该数组的容量应事先 设定 3)还要用一个变量存放 该线性表的长度
7
2018/11/14
第二章 第1节
二、线性表的逻辑结构的特征
1.有限性:线性表中数据元素的个数是有穷的. 2.相同性:线性表中的数据元素的类型是同一的. 3.顺序性:线性表中的相邻数据元素是一对序偶.即相 邻的数据元素ai-1,ai(1<i≤n)存在序偶关系(ai-1, ai);a1 无前驱,an无后继,其它每个元素有且仅 有一个前驱和一个后继。

熟练掌握这两类存储结构的描述方法。扎实的指针 操作和内存动态分配的编程技术是学好本章的基本要 求。

数据结构(第二章 线性表)

数据结构(第二章 线性表)

2.2 线性表的顺序存储和实现
顺序表-顺序表定义

由上可知,数据的存储逻辑位置由数组的下标决定。 所以相邻的元素之间地址的计算公式为(假设每个数 据元素占有d个存储单元): LOC(ai)=LOC(ai-1)+d 对线性表的所有数据元素,假设已知第一个数据元 素a0的地址为LOC(a0) ,每个结点占有d个存储 单元, 则第i个数据元素ai的地址为: LOC(ai)=LOC(a0)+i*d 线性表的第一个数据元素的位置通常称做起始位置 或基地址。 在使用一维数组时,数组的下标起始位置根据给定 的问题确定,或者根据实际的高级语言的规定确定。
2.1 线性表抽象数据类型
线性表的分类
顺序存储结构 (元素连续存储、 随机存取结构) 线性表 ADT 链式存储结构 (元素分散存储) 继承 顺序表类 排序顺序表类 继承 单链表类 循环单链表 双链表 继承 排序循环双链表类 排序单链表类

单链表
双链表

循环双链表类
线性表的存储结构
2.2 线性表的顺序存储和实现
线性表的基本操作 求长度:求线性表的数据元素个数。 访问:对线性表中指定位置的数据元素进行存取、替 换等操作。 插入:在线性表指定位置上,插入一个新的数据元素, 插入后仍为一个线性表。 删除:删除线性表指定位置的数据元素,同时保证更 改后的线性表仍然具有线性表的连续性。 复制:重新复制一个线性表。 合并:将两个或两个以上的线性表合并起来,形成一 个新的线性表。 查找:在线性表中查找满足某种条件的数据元素。 排序:对线性表中的数据元素按关键字值,以递增或 递减的次序进行排列。 遍历:按次序访问线性表中的所有数据元素,并且每 个数据元素恰好访问一次。
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一个(尾)结点。
.
4
a1,a2,…ai-1都是ai(2≦i≦n)的前驱,其中ai-1是ai的直接 前驱; ai+1,ai+2,…an都是ai(1≦i ≦n-1)的后继,其中ai+1是ai的 直接后继。
2.1.2 线性表的逻辑结构
线性表中的数据元素ai所代表的具体含义随具体应 用的不同而不同,在线性表的定义中,只不过是一个抽 象的表示符号。
以下将对几种主要的操作进行讨论。

1 顺序线性表初始化
Status Init_SqList( SqList *L )
{ L->elem_array=( ElemType * )malloc(MAX_SIZE*sizeof( ElemType ) ) ;
if ( !L -> elem_array ) return ERROR ;
ListInsert ( L, i, &e )
初始条件:线性表L已存在,1≦i≦ListLength(L) ;
操作结果:在线性表L中的第i个位置插入元素e;

.
8
} ADT List
2.2 线性表的顺序存储
2.2.1 线性表的顺序存储结构
顺序存储 :把线性表的结点按逻辑顺序依次存放在 一组地址连续的存储单元里。用这种方法存储的线性表 简称顺序表。
在具体的机器环境下:设线性表的每个元素需占用L 个存储单元,以所占的第一个单元的存储地址作为数据元素 的存储位置。则线性表中第i+1个数据元素的存储位置 LOC(ai+1)和第i个数据元素的存储位置LOC(ai)之间满足 下列关系:
LOC(ai+1)=LOC(ai)+L
线性表的第i个数据元素ai的存储位置为:
顺序存储的线性表的特点:
◆ 线性表的逻辑顺序与物理顺序一致;
◆ 数据元素之间的关系是以元素在计算机内“物理 位置相邻”来体现。
设有非空的线性表:(a1,a2,…an) 。顺序存储如图
2-1所示。
.
9
Loc(a1) Loc(ai)+(i-1)* l
… a1 a2 … ai … an …
图2-1 线性表的顺序存储表示
◆ 线性表中的结点可以是记录型元素,每个元素含有 多个数据项 ,每个项称为结点的一个域 。每个元素有 一个可以唯一标识每个结点的数据项组,称为关键字。
例4 : 某校2001级同学的基本情况: {(‘2001414101’,‘张里户’,‘男’, 06/24/1983), (‘2001414102’,‘张化司’, ‘男’,08/12/1984) …, (‘2001414102’,‘李 利辣’,‘女’,08/12/1984) }
◆ 线性表中的结点可以是单值元素(每个元素只有一 个数据项) 。 例1: 26个英文字母组成的字母. 表: (A,B,C、…、5Z)
例2 : 某校从1978年到1983年各种型号的计算机拥有量 的变化情况:(6,17,28,50,92,188)
例3 : 一副扑克的点数 (2,3,4,…,J,Q,K,A)
InitList( &L )
操作结果:构造一个空的. 线性表L;
7
ListLength( L )
初始条件:线性表L已存在;
操作结果:若L为空表,则返回TRUE,否则返回 FALSE;
….
GetElem( L, i, &e )
初始条件:线性表L已存在,1≦i≦ListLength(L);
操作结果:用e返回L中第i个数据元素的值;
① 存在一个唯一的被称为“第一个”的数据元素;
② 存在一个唯一的被称为“最后一个”的数据元素;
③ 除第一个元素外,每个元素均有唯一一个直接前 驱;
④ 除最后一个元素外,每个元素均有唯一一个直接 后继。
.
2
点主 要 知 识
顺序表 单链表 循环单链表
线性表抽象数据类型
循环双向链表
设计举例
.
3
2.1 线性表的逻辑结构
typedef int Status ;
typedef int ElemType ;
typedef struct sqlist
{ ElemType Elem_array[MAX_SIZE] ;
int length ;
} SqList ;
.
11
2.2.2 顺序表的基本操作
顺序存储结构中,很容易实现线性表的一些操作:初 始化、赋值、查找、修改、插入、删除、求长度等。
◆ 若线性表中的结点是按值(或按关键字值)由小到大 (或由大到小)排列的,称线性表是有序的。
.
6
◆ 线性表是一种相当灵活的数据结构,其长度可根 据需要增长或缩短。 ◆ 对线性表的数据元素可以访问、插入和删除。
2.1.3 线性表的抽象数据类型定义
ADT List{ 数据对象:D = { ai | ai∈ElemSet, i=1,2,…,n, n≧0 } 数据关系:R = {<ai-1, ai> | ai-1, ai∈D, i=2,3,…,n } 基本操作:
常用的数据结构 1) 集合 2) 线性结构 3) 树结构 4) 图结构 5) 其它复杂结构
对每种数据结构,主要讨论如下两方面的问 题
1 数据的逻辑结构,数据结构的基本操作;
2 数据的存储结构,数据结构基本操作的实

.
1
第2章 线性表
线性结构是最常用、最简单的一种数据结构。而线 性表是一种典型的线性结构。其基本特点是线性表中的 数据元素是有序且是有限的。在这种结构中:
2.1.1 线性表的定义
线性表(Linear List) :是由n(n≧0)个数据元素(结 点)a1,a2, …an组成的有限序列。该序列中的所有结 点具有相同的数据类型。其中数据元素的个数n称为线 性表的长度。
当n=0时,称为空表。
当n>0时,将非空的线性表记作: (a1,a2,…an)
a1称为线性表的第一个(首)结点,an称为线性表的最后
LOC(ai)=LOC(a1)+(i-1)*L
.
10
在高级语言(如C语言)环境下:数组具有随机存取的特
性,因此,借助数组来描述顺序表。除了用数组来存储线性
表的元素之外,顺序表还应该有表示线性表的长度属性,所
以用结构类型来定义顺序表类型。
#define OK 1
#define ERROR -1
#define MAX_SIZE 100
else { L->length= 0 ; return OK ; }
}
.
12
2 顺序线性表的插入
在线性表 L= (a1,…a i-1,ai, ai+1,…,an) 中 的第i(1≦i≦n)个位置上插入一个新结点e,使其成为线性表:
相关文档
最新文档