第2章线性表22.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 第*页 优点 逻辑相邻,物理相邻 可随机存取任一元素 存储空间使用紧凑 缺点 插入、删除操作需要移动大量的元素 预先分配空间需按最大空间分配,利用不充分 表容量难以扩充 顺序存储结构的优缺点 * 第*页 单链表特点 它是一种动态结构,整个存储空间为多个链表共用 不需预先分配空间 指针占用额外存储空间 不能随机存取,查找速度慢 * 第*页 循环链表是表中最后一个结点的指针指向头结点,使链表构成环状 h 空表 循环链表(circular linked list) 特点:从表中任一结点出发均可找到表中其他结点,提高查找效率 操作与单链表基本一致,循环条件不同 单链表p或p-next==NULL 循环链表p或p-next==H h … * 第*页 r 空表 设置尾指针的循环链表 设置尾指针的循环链表,在对两个单循环链表进行连接使可以提高效率。 r2 b1 bn r1 a1 an r1-next=r2-next-next; r2-next=p; r … p p=r1-next; * 第*页 单链表具有单向性的缺点,找前驱不方便! 结点定义 typedef struct dupnode { elemtype data; struct dupnode *prior,*next; }duplinklist; prior data next L 空双向循环链表: 非空双向循环链表: L A B b c a p p-prior-next= p= p-next-proir; 双向链表(double linked list) * 第*页 双向链表的操作特点: “查询” 和单链表相同。 “插入” 和“删除”时需要同时修改两个方向上的指针。 * 第*页 void ins_dlinklist(duplinklist * p,int x) {duplinklist *s; s=(duplinklist *)malloc(sizeof(duplinklist )); s-data=x; s-prior=p-prior; p-prior-next=s; s-next=p; p-prior=s; } 算法描述 算法评价:T(n)=O(1) x S b a P 插入 p-prior-next=s; s-prior=p-prior; s-next=p; p-prior=s; * 第*页 ai-1 ai e s-next = p-next; p-next = s; s-next-prior = s; s-prior = p; p s ai-1 ai 插入 * 第*页 b c a P void del_dlinklist(duplinklist *p) { p-prior-next=p-next; p-next-prior=p-prior; free(p); } 删除 算法描述 算法评价:T(n)=O(1) p-prior-next=p-next; p-next-prior=p-prior; * 第*页 ai-1 删除 ai ai+1 p-next = p-next-next; p-next-prior = p; p ai-1 * 第*页 用上述定义的单链表实现线性表的操作时, 存在的问题: 改进链表的设置? 1.单链表的表长是一个隐含的值; 1.增加“表长”、“表尾指针” 和 “当前位置的 指针” 三个数据域; 2.在单链表的最后一个元素之后插入元素时, 需遍历整个链表; 3.在链表中,元素的“位序”概念淡化,结点的 “位置”概念加强。 2.将基本操作中的“位序 i ”改变为“指针 p ”。 * 第*页 一个带头结点的线性链表类型 typedef struct node { // 结点类型 ElemType data; struct node *next; } Link; typedef struct { // 链表类型 Link * head, *tail; // 分别指向头结点和 //最后一个结点的指针 int len; // 指示链表长度 Link* current; // 指向当前被访问的结点 //的指针,初始位置指向头结点 } LinkList; * 第*页 * 第*页 在计算机中,可以用一个线性表来表示: P = (p0, p1, …,pn) 一元多项式 但是对于形如 S(x) = 1 +

文档评论(0)

gm8099 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档