第5讲基本数据结构及其运算(二链表).pptVIP

第5讲基本数据结构及其运算(二链表).ppt

  1. 1、本文档共40页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
本文档是精心选出来的精华文档,对您的生活和学习将有所帮助!

计算机 软件技术基础 第4讲 基本数据结构及其运算 II 线性链表 本讲主要内容 第2章 基本数据结构及其运算 2.3 线性链表及其运算 2.3 线性链表及其运算 2.3.1 线性链表的基本概念 2.3.2 线性链表的基本运算 回顾:线性表在顺序存储下的插入运算 2.3.1 线性链表的基本概念 逻辑上有次序排列之数据结构称为线性表(List),如一年四季,数字0~9。 线性表的顺序存储结构的优点和缺点: 优点:简单、运算方便,适用于规模不大的、长度固定的、较少进行插入、删除运算的线性表。 缺点: 插入删除运算需要移动大量数据元素 存储空间不便于扩充( “上溢出”) 存储空间不便于动态分配 对于元素变动频繁的大线性表,采用链式存储结构更为适宜。 基本概念:链式存储结构 线性链表:链式存储结构的线性表称为线性链表。 在链式存储结构中,每个数据结点由两部分组成: 数据域:存放数据元素值 指针域:存放指向前件或后件的指针。 链式存储的线性表各元素在内存之位置是不连续、随机(Random)的。它是由动态内存分配节点(Node)串接而成。 (相形之下,数组是一种顺序存放的结构)。 链式存储结构的特点 存储空间可以不连续 存储顺序与逻辑顺序可以不一致 逻辑关系由指针域来确定 既可用于表示线性结构,也可用于表示非线性结构 线性链表的实现 在程序设计语言中,线性链表的存储空间可以用两个同样大小、数据类型不同的一维数组表示,一个表示 数据域,一个表示指针域。 也可以采用一个结构体类型的一维数组来表示。 struct 结构体名 { 数据成员表; struct 结构体名 *指针 } 在线性链表中,有一个专门的指针HEAD指向线性链表的第一个元素结点,称为头指针。 线性链表的最后一个元素没有后件,指针域为空(用NULL或0表示)。 当HEAD=NULL(或0)时称为空表。 线性链表各结点值的访问 对于线性链表,可以从头指针开始,沿着各结点的指针扫描到链表的所有结点。 线性链表不能按照下标访问数据元素,只能使用顺序查找 链表结点结构的定义 struct 结构体名 { 数据成员表; struct 结构体名 *指针 } struct node { //数据域 char name[10]; char sex; //指针域 struct node *next; } 存储空间的动态分配 main() { struct node *p;//定义指针变量p //申请分配结点存储空间 p=(struct node *)malloc(sizeof(struct node)); … … free(p);//释放结点存储空间 } C程序演示:线性表的建立 建立一个线性链表 从键盘输入各元素的值(正整数,以输入非正整数为结束标志) 然后依次输出线性链表中的各个元素的值。 C程序演示:线性表的建立 #include stdlib.h #include stdio.h struct node { //定义结点类型 int d; struct node *next; }; int main() { int x; struct node *head, *s, *r; head=NULL; //置链表空 s=NULL; scanf(%d, x);//输入正整数 while(x0) { //若输入值大于 s=(struct node *)malloc(sizeof(struct node));//申请内存 s-d=x; s-next=NULL; //置当前结点的数据域和指针域 if(head==NULL) head=s;//若链表空,则将头指针指向当前结点s else r-next=s;//将当前结点链接在最后 r=s;//链表最后结点置为当前结点s scanf(%d, x); } s=head; //从链表第一个结点开始 while(s!=NULL){ printf(%d, s-d); //打印当前结点中的数据 s=s-next; } printf(\n); return 0; } 2.3.2 线性链表的基本运算 在线性链表中包含指定元素的结点之前,插入一个新元素。 在线性链表中删除包含指定元素的结点。 将两个线性链表按要求合并成一个线性链表。 将一个线性链表按要求进行分解。 逆转线性链表。 复制线性链表。 线性链表的排序。 线性链表的查找。 1.在线性链表中查找

文档评论(0)

xy88118 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档