- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
                        查看更多
                        
                    
                第3讲线性表及其链式存储要点
                    2)尾插法建单链表 算法描述 建一个空链表 反复执行 { 输入学号   如是结束信息则跳出   申请一个新结点   输入数据域予新结点   依尾插法插入链表 } 返回头指针  链表特点:生成的链表中结点的次序与输入的顺序相同 2)尾插法建单链表 在链表尾结点后插入一个结点的示意图如下: x p 插入核心语句(生成3条指针链): 第1条:p-next=rear-next; 第2条:rear-next=p ; 第3条:rear=p; 1 2 ∧ a     head rear ∧ 3 ∧ a     head rear 2)尾插法建单链表 算法实现 LinkList  CreateList_r( ) { LinkList  head,p,rear;   int n;   head=InitList( );   rear=head;  /*增加尾指针*/   while(1)   { scanf(%d,n);      if(n0) break;       p=(LinkList)malloc(sizeof(LinkNode));      p-info.num=n;      scanf(%s, p-info.name);      scanf(%d, p-info.score);     p-next=rear-next;    rear-next=p;    rear=p;   /* 尾插结点*/  }  return  head; } 3、单链表的遍历 每个结点访问一次    在遍历过程中可以完成一系列操作 输出结点信息 查找合适位置插入结点 找指定值结点并删除 链表的统计计算 …… head      ^  p p p p p p p=head-next; while(p!=NULL) {……    p=p-next; }   ==NULL 例1:有一个带头结点的学生链表,统计不及格的学生数 形参:单链表头指针 返回值:不及格学生数 算法实现: int count(LinkList  head) { int c=0;   LinkList  p;   p=head-next;   while (p)   {  if(p-info.score60)    c++;      p=p-next;   }   return c; } 数据类型: typedef  struct{     int num;     char name[20];     int score; }datatype; typedef struct node{     datatype  info;     struct  node  *next; }LinkNode,  *LinkList; p!=NULL 例2:有一个带头结点的学生链表中,删除所有不及格的学生 形参:单链表头指针      返回值:无 算法实现: void DeleteNoPass(LinkList  head) { LinkList  q, p;   q=head;  p=head-next;   while(p)   {  if(p-info.score=60)       {  q=p;   p=p-next;  }      70     head 30     ∧ 80     q p q p p 删除关键语句: (1) q-next=p-next; (2) free(p); (3)p=q-next; 1 2 3 释放  else  /*删除p指向的结点*/      { q-next=p-next;               free(p);         p=q-next ;  }   }/*end while*/ } /*end function*/ 在链表中查找插入位置并插入结点的示意图如下: 65 p 插入核心语句(生成2条指针链): 第1条:         p-next=v;    1 2 30     head 70     ∧ 80     u v u v 查找插入位置语句 u=head,v=head-next;   while(v!=NULL) { if(p-info.scorev-info.score )       { u=v; v=v-next;  }    else       break; } 第2条:          u-next=p ; 例3:在一个成绩升序的带头结点的学生链表中,插入一个学生后仍然有序 形参:单链表头指针 ,被插入结点数据域值     返回值:无 算法实现 void  insertX(LinkList  head, datatype  x) {  LinkList p,u,v;         p=(LinkList
                您可能关注的文档
最近下载
- 2024深圳罗湖区中小学教师招聘考试真题及答案.docx VIP
- 中国民间故事《孟姜女哭长城》故事讲解课件课件.pdf VIP
- 2025年高考英语(新高考Ⅱ卷)试卷评析及2026高考备考策略 课件.pptx
- 胃食管反流病的内镜治疗.docx VIP
- 污水管道施工工程施工组织设计.pdf VIP
- 名师教学设计:第一章《特殊平行四边形》回顾与思考2.docx VIP
- 社区护理实践调查报告.docx VIP
- 股市主力操盘盘 口摩斯密码(原创内容,侵权必究).pptx
- 2024年12月青少年软件编程图形化Scratch等级考试一级真题(含答案和解析).docx VIP
- 湘科版科学三年级下册全册试卷.docx VIP
 原创力文档
原创力文档 
                        

文档评论(0)