数据结构第二章线性表.ppt
数据结构2线性表
![数据结构2线性表](https://img.taocdn.com/s3/m/e6d2ba9233687e21ae45a977.png)
12 15 33 45 67 89 57 78 01234567
44
整理ppt
15
程序实现
Templet <class type> int Seqlist<type> ::Insert(type &x, int i){ If(i<0||i>last+1||last==MaxSize-1) return 0; //procondition校验 Else{ last++; for(int j=last;j>i;j--)data[j]=data[j-1]; data[i]=x; //插入 return 1;
整理ppt
10
顺序表上实现的基本运算
1.查找 例:在顺序表{12,15,33,45,67,89,
57,78}查找57(找到),查找66(找 不到)。
12 15 33 45 67 89 57 78
01234567
整理ppt
11
程序实现
Templet <class type> int Seqlist<type>
➢ 在非空的线性表,有且仅有一个开始结
点a1,它没有直接前趋,而仅有一个直 接后继a2;
➢ 有且仅有一个终端结点an,它没有直接 后继,而仅有一个直接前趋a n-1;
➢ 其余的内部结点ai(2≦i≦n-1)都有且仅有 一个直接前趋a i-1和一个直接后继a i+1
整理ppt
5
线性表的特点
线性表 的逻辑结构:线性结构 数据的运算是定义在逻辑结构上的。 运算的具体实现则是在(物理)存储
数据结构课件第2章线性表
![数据结构课件第2章线性表](https://img.taocdn.com/s3/m/86a05d75852458fb770b56b5.png)
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值不合法”);
《数据结构》课程课件第二章线性表
![《数据结构》课程课件第二章线性表](https://img.taocdn.com/s3/m/2c5d8e29192e45361066f583.png)
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课件](https://img.taocdn.com/s3/m/74522fe6a32d7375a5178041.png)
一个(尾)结点。
.
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的存储位置为:
数据结构线性表PPT.ppt
![数据结构线性表PPT.ppt](https://img.taocdn.com/s3/m/9139bfb50875f46527d3240c844769eae109a357.png)
数据结构线性表PPT.ppt幻灯片 1:标题页数据结构之线性表幻灯片 2:目录线性表的定义线性表的存储结构线性表的基本操作线性表的应用实例线性表的优缺点幻灯片 3:线性表的定义线性表是一种最基本、最简单的数据结构。
它是由 n(n≥0)个数据元素组成的有限序列。
在这个序列中,每个数据元素的位置是确定的,并且它们之间存在着线性的逻辑关系。
比如说,我们日常使用的学号列表、购物清单等,都可以看作是线性表的实例。
线性表中的数据元素可以是各种各样的数据类型,比如整数、字符、结构体等。
幻灯片 4:线性表的特点存在唯一的“第一个”元素和“最后一个”元素。
除第一个元素外,每个元素都有唯一的前驱元素。
除最后一个元素外,每个元素都有唯一的后继元素。
这种线性的逻辑关系使得对线性表的操作相对简单和直观。
幻灯片 5:线性表的存储结构线性表有两种常见的存储结构:顺序存储结构和链式存储结构。
顺序存储结构是指用一组地址连续的存储单元依次存储线性表中的数据元素。
链式存储结构则是通过指针将各个数据元素链接起来。
幻灯片 6:顺序存储结构在顺序存储结构中,数据元素存储在一块连续的内存空间中。
优点是可以随机访问,即可以直接通过下标快速找到对应的元素。
缺点是插入和删除操作可能需要移动大量的元素,效率较低。
幻灯片 7:链式存储结构链式存储结构中,每个数据元素由两部分组成:数据域和指针域。
数据域用于存储数据元素的值,指针域用于指向后继元素的存储位置。
优点是插入和删除操作比较方便,不需要移动大量元素。
缺点是不能随机访问,需要通过指针依次遍历找到目标元素。
幻灯片 8:线性表的基本操作常见的基本操作包括:初始化线性表、销毁线性表、判断线性表是否为空、获取线性表的长度、获取指定位置的元素、在指定位置插入元素、删除指定位置的元素、查找指定元素等。
幻灯片 9:初始化线性表初始化操作就是为线性表分配内存空间,并将其初始化为空表。
幻灯片 10:销毁线性表销毁操作则是释放线性表所占用的内存空间。
数据结构线性表ppt课件
![数据结构线性表ppt课件](https://img.taocdn.com/s3/m/e91b131f3d1ec5da50e2524de518964bcf84d20b.png)
01
02
03
04
插入操作
在链表的指定位置插入一个新 节点,需要修改相邻节点的指
针。
删除操作
删除链表的指定节点,需要修 改相邻节点的指针。
查找操作
从链表的头节点开始,顺序遍 历链表,直到找到目标元素或
遍历到链表末尾。
遍历操作
从链表的头节点开始,顺序访 问每个节点,直到遍历到链表
末尾。
04 线性表应用举例 与问题分析
多项式表示与计算问题
01
02
03
多项式表示方法
数组表示法和链表表示法 。
数组表示法
将多项式的系数按次序存 放在一个数组中,通过下 标表示对应的幂次。
链表表示法
每个节点包含系数和指数 两个数据域,以及一个指 向下一个节点的指针域。
一元多项式相加算法设计
• 算法思想:将两个多项式中的同类项系数相加,得到新的 多项式。
删除操作
删除指定位置i的元素,需要将i之后的元素都向前移动 一个位置。
03 链式存储结构及 其实现
链式存储结构原理及特点
链式存储结构原理
使用一组任意的存储单元存储线 性表的数据元素(这组存储单元 可以是连续的,也可以是不连续 的)。
链式存储结构特点
逻辑上相邻的元素在物理位置上 不一定相邻,元素之间的逻辑关 系是通过指针链接来表示的。
...,an组成的有序序列。
性质
集合中必存在唯一的一个“第一元素 ”。
集合中必存在唯一的一个“最后元素 ”。
除最后元素之外,均有唯一的后继。
除第一元素之外,均有唯一的前驱。
线性表与数组关系
数组是线性表的一种表现和实现形式。
线性表更侧重于逻辑概念,而数组则是这种逻辑概念在计算机中的一种存储方式。
数据结构线性表ppt课件
![数据结构线性表ppt课件](https://img.taocdn.com/s3/m/3e2b71746bec0975f565e24e.png)
线性表的分类
线性表 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 线性表抽象数据类型
线性表的定义
《第二章线性表》PPT课件
![《第二章线性表》PPT课件](https://img.taocdn.com/s3/m/78e27b532379168884868762caaedd3383c4b5d4.png)
例 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](https://img.taocdn.com/s3/m/f35d345802020740be1e9bdc.png)
线性结构分类
按操作划分
线性表
• 所有表目都是同一类型结点的线性表 • 不限制操作形式 • 根据存储的不同分为:顺序表,链表
栈(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)
第二章 线性表PPT课件
![第二章 线性表PPT课件](https://img.taocdn.com/s3/m/13c42bb101f69e3142329481.png)
(二)线性表的删除(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页)](https://img.taocdn.com/s3/m/a2a528d8b8f67c1cfad6b87b.png)
删除算法
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
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用一组地址连续的存储单元依次存储线性表的数据元素,数 据元素之间的逻辑关系通过数据元素的存储位置直接反映。
k个单元 (a1,a2,a3,... ...,an)
a1 a2 a3
……
an
LOC(ai)
d1+k=d2 d3
………
dn
所谓一个元素的地址是指该元素占用的
若干(连续的)存储单元的第一个单元的地址。
LOC(a5)=100+(5-1)*4=116
线性表 11
顺序存储结构示意图
(a1,a2,a3,... ...,an)
当前已经占用的空间
尚未使用的空间
a1 a2 a3 … … an-1 an
01 2
n-2 n-1 n
……
n+1
M-1
事先分配给线性表的空间
线性表 12
一般来说,长度为n的线性表(a1,a2,…,an)在计算机中 的结构如下:
INSERT(L,x,i)。 6.删除线性表中第i个数据元素DELETE(L,i)。 7.对线性表中的数据元素进行升序或者降序排序。 8.将两个或两个以上的线性表合并成为一个线性表。 9.将一个线性表分解为两个或两个以上的线性表路】 依次输出线性表中的每个元素的值。
编写在线性表A中删除线性表B中出现的元素的算法。
1 3 57 9
12346
579
【算法思路】 依次检查线性表B中的每个元素,看它是否在线性表
A中。若在A中,则将其从A中删除。
线性表
5
void delete(Sqlist *A,Sqlist *B) {
int i,k;
datatype x;
for(i=1;i<=LENGTH(B);i++) {
线性表 14
线性表的顺序表示和实现
• LENGTH(L)--求解并返回线性表所含元素的个
数n。若线性表为空,则返回整数0。
int LENGTH(SqList *L){ if ((*L).last==-1) return 0; else
return((*L).last+1); }∥LENGTH
时间复杂度:O(1)
数据结构
2 线性表
线性表
1
2.1 线性表的基本概念
• 数据元素之间具有的逻辑关系为线性关系的数据元素集合称为 线性表。
• 一般表示为: A=( a1,a2,a3,... ...,an ) • n个元素的有限序列 • 元素的个数n为线性表的长度,如果n=0,则为空表。 • 线性关系如下:
(1)当1<i<n时,ai的直接前驱为ai-1,ai的直接后继为ai+1。 (2)除了第一个元素与最后一个元素,序列中任何一个元素有且仅有 一个直接前驱元素,有且仅有一个直接后继元素。
}SqList;
0 "aaa" 1 "bbb" 2 "abc"
… last n-1 "an"
…
maxsize-1
线性表 20
int LOCATE(SqList *L,datatype x){
int i=0;
while( i<(*L).last &&
strcmp((x*,L()*.Ld)a.tdaa[tia][!i=]x) )
int INSERT(SqList *L,datatype x,int i){
int j;
∥表溢出
if(((*L).last) >= maxsize-1){
printf("overflow");return -1;} else ∥非法位置
if(i < 1 || i >(*L).last + 2){
i++;
if( i==(*L).last && (*L).data[i]!=x )
return(-1);
else return(i+1); } ∥LOCATE
时间复杂度:O(n)
线性表 17
线性表的顺序表示和实现
• compare的实现? – 假设typedef char *datatype; – 即datatype是一个C风格的字符串 – 显然不能直接用!=来比较 – compare所指向的比较函数如下: – 调用:LOCATE(L,"abc");
return(1); } ∥INSERT
线性表 24
线性表的顺序表示和实现
• 插入操作的算法复杂度
− 很显然,插入操作的复杂度由需要移动的元素的个数决定 − 而需要移动元素的个数由插入位置决定
• i = n+1时,需要移动0个 • i = n时:1个 • ... • i = 1时:n个 • 即:需要移动的元素个数 = n-i+1
}
name[0] name[1] name[2]
Follow me Basic
Great wall
线性表 19
线性表的顺序表示和实现
#define maxsize 1024 typedef char* datatype;
typedef struct{ datatype data[maxsize]; ∥定义线性表 int last; ∥终端结点的位置
线性表 10
a1 a2 a3
……
an
若假设每个数据元素占用k个存储单元,并且已知 第一个元素的存储位置LOC(a1),则有
LOC(ai)=LOC(a1)+(i-1)*k
例:LOC(a1)=100 k=4 求LOC(a5)=? a1 a2 a3 a4 a5 … … an
100 104 108 112 116
通过上面的例子可以看出: • 逻辑结构是数据组织的某种"本质性"的东西:
(1)逻辑结构与数据元素本身的形式、内容无关。 (2)逻辑结构与数据元素的相对位置无关。 (3)逻辑结构与所含数据元素的个数无关。 • 算法的设计取决于选定的逻辑结构,而算法的实现依赖于 采用的存储结构。
线性表
9
2.2 线性表的顺序存储结构
(a1,a2,…,ai-1, ai,ai+1,…,an-1,an)
n个数据元素
转换成长度为n+1的线性表 (a1,a2,…,ai-1,item,ai,…,an-1,an)
n+1个数据元素
线性表 22
n-i+1个元素
( a1,a2,…,ai-1,ai,ai+1,.. ...,an-1,an )
item
线性表 25
线性表的顺序表示和实现
• 最好情况 – T(n) = O(1)
• 最差情况 – T(n) = O(n)
• 平均情况呢? – 一共有1,2,...,n+1,n+1个可能的插入位置,在 第i个位置上插入的概率是1/(n+1) – 所以平均需要移动元素的个数
1
n 1
(n 1 i)
printf("ERROR"); return -1;}
else {
for(j=(*L).last;j>=i-1;j--)
(*L).data[j+1] =(*L).data[j];
∥写进待插入的元素x
(*L).data[i-1] = x; (*L).last = (*L).last+1; ∥表长加1 } ∥else
x=GET(B,i);
∥依次取线性表B中的元素,存放在x中
k=LOCATE(A,x); ∥在线性表A中查找x
if(k!=-1) DELETE(A,k);∥若在表A中找到,将其删除 }∥if }∥delete
线性表
6
算法举例2.3 公共元素表
编写将线性表A和B中公共元素生成线性表C的算法。
1 3 57 9
void ListTraverse(SqList *L){
∥遍历线性表
int i,n=Length(L); if(!n) printf("空表\n"); else
for(i=1;i<=n;i++) printf("%d ",GET(L,i)); } ∥ListTraverse
线性表
4
算法举例2.2 删除元素
int MyComp(datatype lhs, datatype rhs){ return strcmp(lhs, rhs); } ∥MyComp
线性表 18
指针数组
定义形式:类型标示符 *数组名[常量表达式];
例:int *p[4];
main( ){ int i; char *name[ ]={"follow me",“Basic","Great wall"}; for (i=0; i<3; i++) printf("%s\n", name[i]);
#define maxsize 1024 typedef int datatype;
typedef struct{ datatype data[maxsize];
∥定义线性表
int last;
∥终端结点的位置
}SqList;
下标 内存状态
last
0 a1 1 a2 2 a3
… n-1 an
…
…
maxsize-1
12346
13
【算法思路】
先初始化线性表C,然后依次检查线性表A中的每个元素, 看它是否在线性表B中;若在线性表B中,则将其插入到线性 表C中。
线性表
7