第2讲线性表及其顺序存储

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2.2.2 顺序表的实现
1、顺序表数据类型的定义
(1)定义数组的体积 (最多允许的元素个数 )
#define MAXSIZE 100
(2)数据元素类型定义为
datatype
如:处理学生信息
typedef struct{ int n; char name[20]; int s;
}datatype;
如:处理 int
数据元素
ai的直接前驱 ai的直接后继
终端结点
n=0时称为 空表
n 为元素总个
数,即表长
说明:(a1,a2,…an) 其中数据元素ai(1≦i≦n)只是一个抽象
的符号,其具体含义在不同的情况下可 以不同。
线性表的特性:
?逻辑结构是线性结构 除开始结点外,任何一个结点有且仅有一个前驱 除终端结点外,任何一个结点有且仅有一个后继
本课堂顺序表的存储结构的 C语言描述如下: #define MAXSIZE 100 typedef int datatype; typedef struct{
datatype a[MAXSIZE]; int size; }sequence_list;
2、顺序表的算法实现
?即定义相应运算的C语言函数。
? 设每个元素占用存储空间(地址长度)为 len字节, ? 则表中任一数据元素的 存放地址 为:
loction(ai)= loction( a1 )+ len* (i-1 ) ( 1 ≤i≤n )
? 若首元素为 a0: loction(ai)= loction( a0)+len* i ( 0≤i≤n -1 )
(4) 顺序表变量的定义
sequence_list slt;
结构体变量slt
/*slt 为顺序表a变(数量组*/)
slt.a[i]
slt.size
sequence_list *lp; /*lp 为顺序表指针变量*/
size (变量)
结构指针lp
a(数组i]
lp->size
?算法实现:
void init(sequence_list ?lp) {
lp->size=0; }
lp
a( 数组)
0 size(变量)
算法2.2 在表尾插入元素 x 共size个元素
0
1
…… size-1 size ……
?即在数组的 size位置插入元素,表长增 1 。
函数形参:指定顺序表的地址,插入元素

2001011810360 王亚武 男



18
2001级电信016班
18
2001级电信017班
18
2001级通信011班
18
2001级通信012班


数据元素都是学生记录; 元素间关系是线性;表长为4 同一线性表中的元素必定具有相同特性
2. 线性表上的运算
? 置一个空表 ? 建一个线性表 ? 求表长 ? 查找某个元素 ? 插入一个元素 ? 删除一个元素 ? 拆分线性表 ? 合并 ? 排序 ?…
数据结构课程的内容
逻辑结构唯一 存储结构不唯一
运算的实现依赖 于存储结构
第2讲 线性表及其顺序存储
2.1 线性表 2.2 顺序表
2.1 线性表
1. 定义:n个(n≥0)数据元素 (结点)的有限序列
A=(a1, a2, … ai-1,ai, ai+1 ,…, an)
开始结点
下标,是元素的 序号,表示元素 在表中的位置
返回值:无
?算法实现 :
void append(sequence_list ?lp,datatype x) { if(lp->size==MAXSIZE) ??笠牰湩晴尨顺序表是满的!);exit(1);}
lp->a[lp->size]=x;
lp->size++; }
算法2.3 打印表中每个元素
?遍历整个顺序表,输出元素值。 函数形参:指定顺序表变量 返回值:无
typedef int datatype;
(3) 顺序表的类型定义
typedef struct{
datatype a[MAXSIZE]; /*存放线性表元素的数组*/
int size;
/*表示 a中实际存放元素个数(表长)*/
} sequence_list ; /* 顺序表的数据类型sequence_list*/
2.2 顺序表
2.2.1 顺序表的基本概念及描述 2.2.2 顺序表的实现
2.2.1 顺序表的基本概念及描述
——线性表的顺序存储称为顺序表
1、顺序表的定义 用一组连续的存储单元(地址连续)
依次存放线性表的各个数据元素。 即利用数组技术存放元素。
2、顺序表的结点地址计算
? 设首元素a1的存放地址为 location(a 1)(称为首地 址),
(参见顺序表存储结构示意图 )
顺序表存储结构示意图
地址 loction(a1 ) = b
b + len b +(i-1)len
b +(n-1)len
内容
a1 a2 …… ai ai+1 …… an
b +(MAX-1)len
元素在数组中的下标 len 0 1
i-1 i
n-1 空闲区
MAX-1
例1 一个一维数组M,下标的范围是0
?其中n 称为线性表的表长
例 :26 个英文字母组成的英文表
( A, B, C, D, …… , Z)
数据元素都是字母 ; 元素间关系是线性;表长为 26
例:学生情况登记表
学号
姓名
性别
年龄
班级
2001011810205 于春梅 女
2001011810260 何仕鹏 男
2001011810284 王 爽
?算法实现:
void display(sequence_list slt)
{
iinf(t!si;lt.size) printf(\
顺序表是空的!);
到9,每个数组元素用相邻的5个字节 存储。存储器按字节编址,设存储数组
元素M[ 0]的第一个字节的地址是98, 则M[ 3]的第一个字节的地址是 113
解:地址计算通式为: loction(ai)= loction(a 0) + len *i
因此: loction(M[3])=98+5
= 113
×3
?定义函数要确定:
? 函数名 ? 形参
传入量
? 返回值
传出量
?出错处理函数
exit(1); /* 返回OS,告知OS程序非正常结束,该函数定 义在stdlib.h 中*/
算法2.1 初始化——建立一个空表
?空表的表长为 0,使顺序表变量中的 size为0。 函数形参:须初始化顺序表的地址
返回值:无
相关文档
最新文档