第9章-线性表.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9章-线性表

9.1 线性表的基本概念及运算 9.2 线性表的顺序存储结构 线性表的顺序存储结构 线性表的顺序存储结构 实验一 顺序表及其应用 实验目的: 1.深入了解顺序表的存储结构。 2.熟练掌握在顺序存储结构上进行插入、删除等操作的算法。 3.通过顺序表结构及相关处理来解决一些实际问题。 实验内容: 1.试编写在顺序表上实现插入和删除的算法。 2.假设有两个按数据元素值递增有序排列的顺序表A和B,编写算法将A表和B表归并成一个按元素值递增有序排列的顺序表C。 3.一年一班共有学生n名,编程实现对该班学生成绩的管理: 数据项:学号、姓名、语文、数学 功能: 录入、查询、统计 实验要求: 在上机前交预习报告,写出全部源程序。 实验报告格式规范,内容完整。 包括程序流程图,程序清单,实验数据及调试分析,和实验总结 9.3 线性表的链式存储结构 为了克服顺序表的缺点,可以采用链接方式存储线性表,通常我们将链接方式存储的线性表称为链表(Linked List)。 9.3.1 单链表 结点包括两个域: 存储数据元素信息的域称作数据域; 存储后继元素存储位置的域称作指针域 9.3.1 单链表 9.3.1 单链表 9.3.1 单链表 9.3.1 单链表 9.3.2 单链表的基本运算 9.3.2 单链表的基本运算 9.3.2 单链表的基本运算 9.3.2 单链表的基本运算 9.3.2 单链表的基本运算 9.3.2 单链表的基本运算 9.3.2 单链表的基本运算 9.3.2 单链表的基本运算 9.3.2 单链表的基本运算 9.3.2 单链表的基本运算 删除操作 (1)找到p前趋 (2)删除节点 DELETE (linklist ?p, linklist *head) /*删去单链表head的结点*p*/ { linklist ?q; q=head; /* 从头指针开始 */ while (q- next!=p) q=q- next; /* 查找?p的前趋结点?q */ q- next=p-next; /* 删除结点?p */ free(p); } 9.3.2 单链表的基本运算 9.3.2 单链表的基本运算 ★在单链表head中,查找第3个结点 linklist ?GET(head, 3) 9.3.2 单链表的基本运算 链表存储结构的特点: 结点空间动态申请释放,克服顺序表中数据元素个数需预先确定 元素逻辑顺序靠结点的指针域指示,克服了顺序表插入、删除需大量移动数据元素 结点指针域占额外空间 对元素进行存取访问时,需从第一个元素开始依次比较,比顺序结构麻烦 设单链表中结点的结构为   typedef?struct?node?{?//链表结点定义   ElemType?data;?//数据   struct?node?*?Link;?//结点后继指针   }?ListNode;   (1)?已知指针p所指结点不是尾结点,若在*p之后插入结点*s,则应执行下列哪一个操作?   A.?s-link?=?p;?p-link?=?s;   B.?s-link?=?p-link;?p-link?=?s;   C.?s-link?=?p-link;?p?=?s;   D.?p-link?=?s;?s-link?=?p; 作业: 1、假设有两个按元素值递增有序排列的单链表,试编写算法将A表和B表归并成一个按元素值非递减有序排列的单链表C,并用原表的结点空间存放表C。(上机作业) 2、设有一个线性表E={e1,…en},设计一算法将其逆置,使元素次序颠倒,要求逆线性表占用原线性表空间,并用顺序表和单链表两种方法表示,写出不同的处理过程。 循环链表 特点:表中最后结点的指针域指向头结点,链表形成一个环 /*在循环链表第i个元素后插入值为x的新结点 */ INSERT (linklist ?head, datatype x,int i) { linklist ?s; s=(linklist?)malloc(sizeof (linklist)); /* 生成新结点*s */ s- data=x; p=head;j=0; /* 从头指针开始 */ while ((p- next!=head)(ji)) {p=p- next;j++;} if(i==j) { s- next=p-next; p-

文档评论(0)

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

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

1亿VIP精品文档

相关文档