1、第二章线性表 线性结构特点 在数据元素的非空有限集中存在唯一的一个被称作 第一个 的数据元素存在唯一的一个被称作 最后一个 的数据元素除第一个外 集合中的每个数据元素均只有一个前驱除最后一个外 集合中的每个数据元素均只有一个后继 2 1线性表的类型定义 P18 19 定义 一个线性表是n个数据元素的有限序列 例英文字母表 A B C Z 是一个线性表 特征 P19 元素个数n 表长度 n 0空表1 i n时 ai的直接前驱是ai 1 a1无直接前驱1 i n时 ai的直接后继是ai 1 an无直接后继i为数据元素ai在线性表中的位序 2 2线性表的顺序存储结构顺序表 定义 用一组地址连续的存储
2、单元存放一个线性表叫 元素地址计算方法 LOC ai LOC a1 i 1 LLOC ai 1 LOC ai L其中 L 一个元素占用的存储单元个数LOC ai 线性表第i个元素的地址LOC a1 起始地址 基地址特点 实现逻辑上相邻 物理地址相邻实现随机存取实现 可用C语言的一维数组实现 defineLIST INIT SIZE100 defineLISTINCREMENT10typedefstruct ElemType elem intlength intlistsize SqList 数据元素不是简单类型时 可定义结构体数组 动态申请内存L elem ElemType malloc LI
3、ST INIT SIZE sizeof ElemType 插入定义 线性表的插入是指在第I 1 i n 1 个元素之前插入一个新的数据元素x 使长度为n的线性表 变成长度为n 1的线性表 需将第i至第n共 n i 1 个元素后移 算法 Ch2 1 c x 算法时间复杂度T n 设Pi是在第i个元素之前插入一个元素的概率 则在长度为n的线性表中插入一个元素时 所需移动的元素次数的平均次数为 删除定义 线性表的删除是指将第i 1 i n 个元素删除 使长度为n的线性表 变成长度为n 1的线性表 需将第i 1至第n共 n i 个元素前移 算法 Ch2 2 c 算法评价设Qi是删除第i个元素的概率 则
4、在长度为n的线性表中删除一个元素所需移动的元素次数的平均次数为 故在顺序表中插入或删除一个元素时 平均移动表的一半元素 当n很大时 效率很低 顺序存储结构的优缺点优点逻辑相邻 物理相邻可随机存取任一元素存储空间使用紧凑缺点插入 删除操作需要移动大量的元素预先分配空间需按最大空间分配 利用不充分表容量难以扩充 2 3线性表的链式存储结构特点 用一组任意的存储单元存储线性表的数据元素利用指针实现了用不相邻的存储单元存放逻辑上相邻的元素每个数据元素ai 除存储本身信息外 还需存储其直接后继的信息结点数据域 元素本身信息指针域 指示直接后继的存储位置 例线性表 ZHAO QIAN SUN LI ZHO
5、U WU ZHENG WANG 43 13 1 NULL 37 7 19 25 头指针 实现 typedefstructLNode ElemTypedata structLNode next LNode LinkList LNode h p p 表示p所指向的结点 p data p data表示p指向结点的数据域 p next p next表示p指向结点的指针域 生成一个新结点 p LinkList malloc sizeof Lnode 系统回收p结点 free p 线性链表定义 结点中只含一个指针域的链表叫 也叫单链表 头结点 在单链表第一个结点前附设一个结点叫 头结点指针域为空表示线性表
6、为空 单链表的基本运算查找 查找单链表中是否存在结点X 若有则返回指向X结点的指针 否则返回NULL算法描述 算法评价 插入 在线性表两个数据元素a和b间插入x 已知p指向a s next p next p next s 算法描述 算法评价 算法描述 算法评价 删除 单链表中删除b 设p指向a p next p next next 动态建立单链表算法 设线性表n个元素已存放在数组a中 建立一个单链表 h为头指针 算法描述 算法评价 Ch2 3 c 单链表特点它是一种动态结构 整个存储空间为多个链表共用不需预先分配空间指针占用额外存储空间不能随机存取 查找速度慢 循环链表 circularlin
7、kedlist 循环链表是表中最后一个结点的指针指向头结点 使链表构成环状特点 从表中任一结点出发均可找到表中其他结点 提高查找效率操作与单链表基本一致 循环条件不同单链表p或p next NULL循环链表p或p next h 双向链表 doublelinkedlist 单链表具有单向性的缺点结点定义 typedefstructDuLNode ElemTypetata structDuLNode prior next DuLNode DuLinkList p prior next p p next proir 删除 算法描述 算法评价 T n O 1 p prior next p next p
8、 next prior p prior StatusListDelete Dul DuLinkListreturnOK StatusListInsert Dul DuLinkListreturnOK 算法描述 算法评价 T n O 1 插入 2 4线性表的应用举例一元多项式的表示及相加一元多项式的表示 可用线性表P表示 但对S x 这样的多项式浪费空间 用数据域含两个数据项的线性表表示 其存储结构可以用顺序存储结构 也可以用单链表 单链表的结点定义 typedefstructnode intcoef exp structnode next JD 一元多项式相加 设p q分别指向A B中某一结点 p q初值是第一结点 运算规则 Ch2 7 c 算法描述