数据结构线性表严蔚敏版.pptxVIP

  • 8
  • 0
  • 约2.37千字
  • 约 43页
  • 2017-06-05 发布于重庆
  • 举报
数据结构线性表严蔚敏版

第二章 线性表;2.1 线性表的逻辑结构 定义:一个线性表是n个数据元素的有限序列;二、抽象数据类型线性表的定义 ;例2-1 假设利用两个线性表LA和LB分别表示两个集合A和B,现要求一个新的集合A=A∪B.;例2-2 已知线性表LA和LB中的数据元素按非递减有序排列,现要求将LA和LB归并为一个新的线性表LC,且LC的数据元素仍按非递减有序排列。;2.2 线性表的顺序存储结构 顺序表: 定义:用一组地址连续的存储单元存放一个线性表叫~ 元素地址计算方法: LOC(ai)=LOC(a1)+(i-1)*L LOC(ai+1)=LOC(ai)+L 其中: L—一个元素占用的存储单元个数 LOC(ai)—线性表第i个元素的地址 特点: 实现逻辑上相邻—物理地址相邻 实现随机存取 实现:可用C语言的一维数组实现 ;;;构造一个空的线性表:;插入 定义:线性表的插入是指在第I(1?i ? n+1)个元素之前插入一个新的数据元素x,使长度为n的线性表;内??;算法时间复杂度T(n) 设Pi是在第i个元素之前插入一个元素的概率,则在长度为n的线性表中插入一个元素时,所需移动元素的平均次数为:;删除 定义:线性表的删除是指将第i(1?i ? n)个元素删除,使长度为n的线性表;内存;算法评价 设Qi是删除第i个元素的概率,则在长度为n的线性表中删除一个元素所需移动的元素次数的平均次数为:;顺序存储结构的优缺点 优点 逻辑相邻,物理相邻 可随机存取任一元素 存储空间使用紧凑 缺点 插入、删除操作需要移动大量的元素 预先分配空间需按最大空间分配,利用不充分 表容量难以扩充;2.3 线性表的链式存储结构 特点: 用一组任意的存储单元存储线性表的数据元素 利用指针实现了用不相邻的存储单元存放逻辑上相邻的元素 每个数据元素ai,除存储本身信息外,还需存储其直接后继的信息 结点 数据域:元素本身信息 指针域:指示直接后继的存储位置;;实现;头结点:在单链表第一个结点前附设一个结点叫~ 头结点指针域为空表示线性表为空;单链表的基本运算 1. 按序号取元素值的操作 算法描述: status GetElem_L ( LinkList L, int i, ElemType e){ //L为带头结点的单链表的头指针, //当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR p=L-next; j=1; //初始化,p指向第一个结点,j为计数器 while(p ji) {p=p-next; ++j;} //顺指针向后查找,直到p指向第i个元素或p为空 if(!p || ji) return ERROR; //第i个元素不存在 e=p-data; //取第i个元素 return OK; }//GetElem_L ;单链表的基本运算;算法描述 status ListDelete_L(LinkList L, int i, ElemType e){ //在带头结点的单链表中删除第i个元素,并由e返回其值 p=L; j=0; while(p-next ji-1){p=p-next; ++j;} //寻找第i个结点,并令p指向其前驱 if(!(p-next) || ji-1) return ERROR; //删除位置不合理 q=p-next; p-next=q-next; //删除并释放结点 e=q-data; free(q); return OK; }//ListDelete_L;4.逆序建立单链表(在链表的头部插入结点建立单链表) h为头指针;算法描述; 5.顺序建立单链表(在单链表的尾部插入结点建立单链表) ;6.求表长;(2)设L是不带头结点的单链表;7. 合并两个单链表的算法 ;单链表特点 它是一种动态结构,整个存储空间为多个链表共用 不需预先分配空间 指针占用额外存储空间 不能随机存取,查找速度慢;循环链表(circular linked list) 循环链表是表中最后一个结点的指针指向头结点,使链表构成环状 特点:从表中任一结点出发均可找到表中其他结点,提高查找效率 操作与单链表基本一致,循环条件不同 单链表p或p-link=NULL 循环链表p或p-link=H;对两个单循环链表H1 、H2的连接操作 ;双向链表(double linked list) 单链表具有单向性的缺点 结点定义;;status

文档评论(0)

1亿VIP精品文档

相关文档