C语言 第8章 动态数据结构(二级C的内容,可参考).ppt

C语言 第8章 动态数据结构(二级C的内容,可参考).ppt

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

所谓头插入,即每次将数据元素结点插入到表头结点的之后,第一个数据元素结点之前。 插入过程如图7-3所示: ∧ 初始状态: 插入第一个结点之后: an ∧ * 插入第二个结点之后: 插入第三个结点之后: 插入最后一个结点之后: an-1 an ∧ an-1 an-2 an ∧ an-1 a1 an ∧ … … * 完整程序: #include malloc.h #include stdio.h #include stdlib.h typedef struct LNode{ int data; struct LNode *next; }LNode,*LinkList; * void CreateList ( LinkList L, int n ){ int i; LNode *p; printf(现在建立链表:\n); for ( i = n;i 0;i--) { printf(请输入第%d个结点的元素值:\n,i); p=(LNode*)malloc(sizeof(LNode)); if ( !p ) exit (0); scanf(%d, p-data); p-next = L-next ; L-next = p ;} } * void main(){ LNode *L,*p; int n; printf(请输入链表中的元素个数:); scanf(%d,n); printf(现在建立链表的头结点:\n); L = (LNode*) malloc( sizeof ( LNode ) ); if ( !L ) exit ( 0); L-next = NULL; printf(现在开始建立链表:\n); CreateList(L,n); printf(链表建立结束,开始输出链表中的元素值!\n); for(p=L;p;p=p-next) { if(p==L) printf(头结点的地址值:%u , p); else printf(当前结点的地址值:%u , p); printf(\tp-data=%d \n, p-data);} printf(\n); } * 以上的算法只是建立链表的一种方法,它的核心是新的数据元素结点插在链表的第一个数据元素的位置;我们也可以将新建立的数据元素结点每次都插在链表的尾部,大家可以思考一下,以尾插入的方式建立链表,程序怎样编写? * 7.3.3 链表结点的插入 将一个数据元素插入到链表中,有三种情况: 头插入:将一个新元素插入在链表的头结点的后面,其它的所有结点之前称为头插入。 尾插入:将一个新元素插入在链表的尾结点的后面,使得新插入的结点成为尾结点称为尾插入。 在链表中的第i个数据元素的位置处插入:将一个新元素插入在链表中的第i个数据元素的位置处,即插入在第i个数据元素结点之前,使得新插入的结点成为链表中的第i个结点。 * 例7-8:已有链表L 如图所示,链表中的元素按递增有序排列: 其中每个结点中存放的值为学生的考试成绩。现在有另外三个学生的的成绩分别为65、82、90。将他们插入到链表L中,要求插入之后链表依然递增有序。 80 70 85 ∧ 图7.4 链表的插入过程 L * 图7.5 头插入过程 将 65 插入到链表L中: 为65申请一个结点空间,首地址放入s中; 80 70 85 ∧ p 65 s 将s插入到链表中: 设p=L-next, L p-data65吗? 不小于! 65应在p结点之前。 即s插在L结点之后。 L-next=s; s-next=p; * 实现语句: p=L-next; s=(LNode*)malloc(sizeof(LNode)); s-data=x; s-next=p; L-next=s; 插入之后的链表状态: 80 70 85 ∧ 65 L * 将82 插入到链表L中: 插入的过程: 首先应找到82 应在的位置: 82应该插在两个结点之间,82前面结点的data域值小于82;82后面结点的data域值大于等于82;如图所示: L: 65 80 70 85 ∧ 82 * 实现语句: q=L; p=L-next; while( p p-datas-data ) { q=p; p=p-next; } 65 80 70 82 85 ∧ 插入之后的链表: * 插入过程: q=L; 65 80 70 82 85 ∧ while( p p-datas-data

文档评论(0)

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

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

1亿VIP精品文档

相关文档