电子2-3线性表
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
InitList( &L );
//建空表,初始化
DestoryList( &L );
//撤销表,释放内存
int LengthList( L ); //求表中元素个数,即表长
POSITION LocateElem (L,ElemType e,compare() );
PriorElem( L, cur_e, &pre_e ); //求当前元素e的前驱
2020/10/22
10
11 物料管理
2.2.1 顺序表的表示
数据结构
线性表的顺序表示又称为顺序存储结构或顺序映像。
顺序存储定义:把逻辑上相邻的数据元素存储在物 理上相邻的存储单元中的存储结构。
特点:逻辑上相邻的元素,物理上也相邻
顺序存储方法:用一组地址连续的存储单元依次存储线
性表的元素。
可以利用数组V[n]来实现
L.elem = newbase ;
//重置新基址
L.listsize = L.listsize + LISTINCREMENT ; } //增加表尺寸
realloc (*p, newsize)函数的意思是:新开一 片大小为newsize的连续空间,并把以*p为 首址的原空间数据都拷贝进去。
2020/10/22
数据结构
线性表的定义:用数据元素的有限序列表示
(a1, a2, … ai-1,ai, ai+1 ,…, an)
线性起点
下标,是元素的 序号,表示元素 在表中的位置
2020/10/22
数据元素
ai的直接前趋 ai的直接后继 线性终点
n=0时称为 空表
n为元素总
个数,即表 长。n≥0
7
8 物料管理
例1 分析26 个英文字母组成的英文表是什么结构。
int
listsize; //当前分配的表尺寸(字节单位)
}SqList;
注:三个分量可简写为:L.elem L.length L.listsize
2020/10/22
19
20 物料管理
动态创建一个空顺序表的算法:
数据结构
Status InitList_Sq( SqList &L ) //创建一个空线性表
if ( L.length ≥ L.listsize ) //若表长超过表尺寸则要增加尺寸
{ newbase = ( ElemType* ) realloc ( L.elem , (L.listsize + LISTINCREMENT )* sizeof ( ElemType ) );
if (newbase=NULL )exit( OVERFLOW ) ; //分配失败则退出并报错
( A, B, C, D, …… , Z)
数据结构
分析: 数据元素都是同类型(字母), 元素间关系是线性的。 例2 分析学生情况登记表是什么结构。
学号 012003010622 012003010704 012003010813 012003010906 012003011018
:
姓名 陈建武 赵玉凤 王泽 薛荃 王春
1 物料管理
数据结构
2020/10/22
1
2 物料管理
数据结构
学时数:48(32+16)
学 分: 3
教 材:严蔚敏等,数据结构(C语言版),清华大
学出版社,1997年4月 (配题集) 参考书:
[1] 殷人昆等,数据结构(用面向对象方法与C++ 描述),清华大学出版社,1999年7月。¥26
[2] 殷人昆等,数据结构习题解析,清华大学出版社, 2002年4月。¥26
:
性别 男 女 男 男 男 :
年龄 19 18 19 19 19 :
班级 2003级电子0301班 2003级电子0302班 2003级电子0303班 2003级电子0304班 2003级电子0305班
:
分析:数据元素都是同类型(记录),元素间关系是线性的。
注意:同一线性表中的元素必定具有相同特性 !
2020/10/22
8
9 物料管理
试判断下列叙述的正误:
数据结构
“同一数据逻辑结构中的所有数据元素都具有相同的特性”
× 是指数据元素所包含的数据项的个数都相等。
是指各元素具有相同的数据类型
2020/10/22
9
10 物料管理
2.2 线性表的顺序表示和实现
数据结构
2.2.1 顺序表的表示 2.2.2 顺序表的实现 2.2.3 顺序表的运算效率分析
注意:在C语言中数组的下标是从0开始,即: V[n]的有效范围是从 V[0]~V[n-1]
2020/10/22
11
12 物料管理
线性表顺序存储特点:
数据结构
1. 逻辑上相邻的数据元素,其物理上也相邻;
2. 若已知表中首元素在存储器中的位置,则其他元素存放 位置亦可求出(利用数组V[n]的下标)。
设首元素a1的存放地址为LOC(a1)(称为首地址), 设每个元素占用存储空间(地址长度)为L字节, 则表中任一数据元素的存放地址为:
NextElem( L, cur_e, &next_e ); //求当前元素e的后继
ListInsertBefore(&L, i, e ); //把e插入到第i个元素之前
ListDelete( &L, i,&e );
//删除第i个元素并“看”此元素
ListTraverse( L, Visit() ); // “看”表中全部元素(遍历)
{ L.elem=(ElemType*)malloc(LIST_INIT_SIZE *
sizeof(ElemType));
If(!L.elem) exit(OVERFLOW); //分配失败,结束程序
L.length=0;
//暂无元素放入,空表
L.listsize=LIST_INIT_SIZE; //表尺寸=初始分配量
113
解:已知地址计算通式为:
LOC(ai) = LOC(a1) + L *(i-1)
但此题要注意下标起点略有不同: LOC( M[3] ) = 98 + 5 ×(4-1) =113
2020/10/22
14
15 物料管理
课堂讨论:
数据结构
➢顺序表的“宏观”算法该如何书写?
———采用抽象数据类型来表示
//增加1个数据元素,则表长+1
return OK ; } //ListInsert_Sq
动态数组的核心是realloc(void *ptr, newsize)函数!
2020/10/22
23
24 物料管理
数据结构
在线性表的第i个位置前插入一个元素的示意图如下:
1 12
2 13
21 3 24
4
插入255
2020/10/22
17
18 物料管理
动态数组如何实现(见教材P22和P24)
数据结构
#define List_Init_Size 100 //初始空间 #define List_Increment 10 //分配增量
…… …… L.listsize= List_Init_Size;
If(L.length>=L.listsize){ …… ……
插入、删除、查找、排序
数据结构
2020/10/22
21
22 物料管理
动态顺序表的插入算法
数据结构
Status ListInsert_Sq(SqList &L, int i, ElemType e)
{ //在顺序线性表中第i个位置之前插入新的元素e if( i < 1 or i > L.length+1) return ERROR; // 检验i 值的合法性
线性结构包括:线性表、堆栈、队列、字符串、数组
等,其中最典型、最常用的是------ 线性表
2020/10/22
5
6 物料管理
第2章 线性表
2.1 线性表的逻辑结构 2.2 线性表的顺序表示和实现 2.3 线性表的链式表示和实现 2.4 应用举例
2020/10/22
数据结构
6
7 物料管理
2.1 线性表的逻辑结构
[3] 李春保,数据结构习题与解析(C语言篇),清 华大学出版社,2001年1月。¥28
[4] 丁宝康等,数据结构自学考试指导,清华大学出 版社, 2001年5月。¥23
2020/10/22
2
3 物料管理
内容安排
章
内容
学时
章
内容
数据结构
学时
1
绪论
2
2
线性表
4
3
栈和队列
6
4
串(自学)
2
5 数组和广义表(自 4
求表长、表头、表尾、前趋、后继; 读元素、查找(含定位)、遍历; 插入、删除
} ADT List
2020/10/22
16
17 物料管理
线性表的基本操作如何表示? (见教材P19)
数据结构
初始化、撤销、清空、判空; 求表长、表头、表尾、前趋、后继; 读元素、查找(含定位)、遍历; 插入、删除
存储结构描述如下(见教材P22):
#define LIST_INIT_SIZE 100 //存储空间的初始分配量
#define LISTINCREMENT 10//存储空间的分配增量
Typedef struct{
ElemType *elem; //表基址(用指针*elem表示)
int
length; //表长度(表中有多少个元素)
28 30
6 42 7 77
8
1 12 2 13
21 3 24 4 25 5 28
6 30
7 42 77
8
9
2020/10/22
24
25 物料管理
数据结构
动态顺序表的删除算法
Status ListDelete_Sq(SqList &L, int i, ElemType &e) { //在顺序表L中删除第 i 个元素,用 e 返回其值
学)
6
树和二叉树
6
7
图
6
8
动态存储管理
略
9
查找
4
10
内部排序
4
11
外部排序
略
12
文件
略
实验:课内上机(16规定内容)+课外上机(24平时作
业中编程题验证)
2020/10/22
3
4 物料管理
数据结构课程的内容
数据结构
逻辑结构唯一 存储结构不唯一
2020/10/22
运算的实现依赖 于存储结构
4
5 物料管理
线性结构的定义:
数据结构
若结构是非空有限集,则有且仅有一个开始结点和一个 终端结点,并且所有结点都最多只有一个直接前趋和一个直 接后继。 →可表示为:(a1 , a2 , ……, an) 特点① 只有一个首结点和尾结点; 特点② 除首尾结点外,其他结点只有一个直接前驱和一个直
接后继。
简言之,线性结构反映结点间的逻辑关系是 一对一 (1:1) 的。
➢ 顺序表的存储结构是一维数组,如果插入的元素个数超
过数组定义的长度怎么办? ———采用动态分配的一维数组
2020/10/22
15
16 物料管理
线性表的定义(见教材P19)
数据结构
ADT List { 数据对象:D={ai | ai∈ElemSet, i=1,2,…,n,n≥0} 数据关系:R1={< ai –1, ai > | ai –1, ai ∈D, i=2,…,n} 基本操作:初始化、撤销、清空、判空;
Return OK;
} //InitList_Sq
sizeof(x)算符的意思是: 计算变量x的长度(字节数)
malloc (m)函数的意思是:新开 一片大小为m字节的连续空间, 并把该区首址作为函数值。
2020/10/22
20
21 物料管理
2.2.2 顺序表的实现(或操作) 数据结构的基本运算:
数据结构
元素在表中的位序 L1
2
i i+1
n
空闲区
b +(max-
1)L LOC (
ai)Biblioteka = LOC( a1 ) + L *(i -1)
2020/10/22
13
14 物料管理
数据结构
例1 设有一维数组M,下标的范围是0到9,每个数 组元素用相邻的5个字节存储。存储器按字节编址,设 存储数组元素M[0]的第一个字节的地址是98,则M [3]的第一个字节的地址是多少?
22
23 物料管理
数据结构
q = &L.elem[i-1] ; // q为插入位置。这是没有头结点的情况
for ( p = L.elem[L.length-1] ; p>=q ; --p ) *(p+1) = *p ;
//插入位置及之后的元素统统后移, p为元素位置
*q= e ;
//插入e
++L.length ;
LOC ( ai+1 ) = LOC( ai ) + L LOC ( ai ) = LOC( a1 ) + L *(i -1)
对上述公式的解释如图所示
2020/10/22
12
13 物料管理
线性表的顺序存储结构示意图
地址
内容
b=LOC(a1)
a1
b+L
a2
……
b +(i-1)L
ai
ai+1
……
an
b +(n-1)L
L.listsize+=List_Increment; };
P23的malloc() 函数与P24的 realloc()函数 有什么不同?
2020/10/22
18
19 物料管理
动态数组简介
数据结构
先为顺序表空间设定一个初始分配量,一旦因插入元素 而空间不足时,可为顺序表增加一个固定长度的空间增量。