网站大量收购独家精品文档,联系QQ:2885784924

C语言_链表.ppt

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

单链表 单链表 单链表的定义 单链表的基本操作 遍历(递归和非递归遍历) 插入(插入4种情况,重点) 建立 删除 将一个链表排序 将两个有序链表合并 将一个链表逆置 约瑟夫问题 1、单链表的定义 最简单的是单链表,单链表中每个节点由两个字段组成:数据字段和指针字段,数据字段表示元素的本身信息,指针字段指明下个元素的位置。单链表用来表示线性结构。例如线性表(a1,a2,…,an)可以表示为: C语言定义链表的结构如下 typedef struct Node { int data; struct Node * next; }NODE; 带有头节点的单链表 一般各种资料表示链表有两种,一种是带头节点的,一种是使用头指针的(不带头节点的)。 带头节点的 就是有一个专门的头节点h,它的后继指向链表的第一个元素。 使用头指针的 没有专门的头节点,只有一个指针h指向链表的第一个元素 单链表的遍历 2、链表的遍历(显示链表) 设head为链表的头指针,首先从head所指的节点开始打印,沿着链的方向向右遍历,直到到最后一个节点,下面是一个打印链表的递归函数。 void lprint (NODE *head) { if(head!=NULL) { printf(“%d\t”,head-data); lprint(head-next); } 许多问题中,有时候为了操作方便,需要在第一个节点之前增加一个特殊的节点,称为头节点,它的data字段不含信息或根据问题的需要存放特殊信息。 2、链表的遍历(显示链表) 一个非递归算法 以下函数disp()用于显示头节点为*h的链表的所有节点数据域。 void disp(struct Node *h) { struct Node *p=h; printf(输出链表:); if(p==NULL) printf(空表\n); else { while (p-next!=NULL) { printf(%4d,p-data); p=p-next; } printf(%4d\n,p-data); } } 单链表的插入 3、链表的插入(头指针的情况下) 对于插入有以下几种情况 在一个空链表上插入一个元素。 (即要插入位置前方和后方均无元素) 从链表表头处插入一个元素 (即要插入的位置前方无元素,后方有元素) 从链表结尾处处插入一个元素 (即要插入的位置后方五元素,前方有元素) 从链表的中间插入 (即要插入的位置前方和后方均有元素) 其中第三种情况可以按照第四种情况处理,但有一定特殊性所以将其分开 注意:产生新的节点必须用malloc或者calloc开辟空间 在空链表上插入一个元素 在链表的表头插入一个元素 在链表结尾出插入一个元素 在链表中间插入一个元素 3、链表的插入(有单独头节点的情况下) 由于增加了表头节点,不用象没有头节点的情况时,区分是否插入点在表头,所以对于插入只有两种情况 从链表结尾处处插入一个元素 (即要插入的位置后方五元素,前方有元素) 从链表的中间插入 (即要插入的位置前方和后方均有元素) 其中第一种情况可以按照第二种情况处理,但有一定特殊性(语句的顺序可以换)所以将其分开 在链表结尾出插入一个元素 在链表中间插入一个元素 4、链表的建立 链表的建立就是链表从无到有的过程 建立一个头节点,并指向NULL,就建立了一个空的链表 建立有n个元素的链表有三个阶段 建立头节点并指向NULL(建立了一个空的链表) 插入第一个元素(插入的第一种情况) 在表头或者表尾连续插入其他n-1个元素 (反复执行插入的第二,第三种情况) 建立带有单独头节点的链表,先建立头节点 struct Node* create() { struct Node *head,*p,*q; int n; head=(struct Node *)malloc(sizeof(struct Node)); head-next=NULL; //第一阶段,建立一个头节点,并指向NULL p=head; while(1) { printf(请输入一个正整数,0代表结束:); scanf(%d,n); if (n=0) break; else { q=(struct Node *) malloc(sizeof(struct Node)); q-data=n;//产生要插入的节点 p-next=q;//执行插入的过程,第一

文档评论(0)

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

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

1亿VIP精品文档

相关文档