《数据结构及算法》第4章学生成绩信息管理(链表).ppt

《数据结构及算法》第4章学生成绩信息管理(链表).ppt

  1. 1、本文档共46页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
5.2知识扩展---双向链表 双向链表(double linked list) :prior域指向其前驱结点,next指向其后继结点,data域存放结点本身的信息 prior element next L 空双向循环链表: b c a p p.prior.next= p= p.next.proir; class Node { public Student_info Data; public Node next,prior; }; 5.2知识扩展---双向链表增加结点 x S b a P 插入:在双向链表L中第i个数据元素前插入元素X 算法描述 找到第i个元素结点的位置,用指针p表示。 插入元素x的位置,用指针s表示。 进行插入操作作如下动作: 1、 s.prior=p.prior; 2、p.prior.next=s; 3、s.next=p; 4、p.prior=s; 双向循环链表插入元素的流程图: 开始 输入所要插入双向循环链表结构指针L、位置i和插入元素x 声明局部单链表指针 p和s;赋初值p=L 为指针s分配内存空间;并赋值:s.data=x; 返回结果 查找单链表中位置i的元素结构指针p ?p==L 进行元素插入操作:s.prior=p.prior;p.prior.next=s;s.next=p;p.prior=s; 5.2知识扩展---双向链表增加结点 代码实现: public int Student_insert(int i,Student_info elem) {//在学生单向链表中,指定位置插入学生信息 Node p; //用以记录要进行插入位置的前一个学生的信息结点 Node s; //要进行学生信息插入的结点 int j; p=L; j=0; while(p!=Link &&j<i-1)//用以寻找指定i位置的学生信息结点 {p=p.next; j++; } if( ( i>0 ) && ( j==i-1) ) {s=new Node (); //创建新的学生信息结点 s.Data=elem; //将学生信息载入结点中 s.prior =p.prior ; //实现新学生信息结点的插入 p.prior=s.prior; s.next=p; p.prior=s; return 1; } else return 0;//如插入的位置在表尾之后,插入不成功 } 5.2知识扩展---双向链表增删除结点 b c a P p.prior.next=p.next; p.next.prior=p.prior; 删除:删除双向链表中第i个元素。 算法描述 查找双向链表第i个元素的位置,用指针p表示。 判断指针p的位置是否正确。 作如下操作: 1、p.prior.next=p.next 2、p.next.prior=p.prior 3、获取所要删除元素的值,返回结果。 5.2知识扩展---双向链表增删除结点的流程图: 开始 输入所要删除双向循环链表结构指针L、 位置i和返回元素元素指针s 声明局部单链表指针 p;并初值p=L 进行元素删除操作:p.prior.next=p.next; p.next.prior=p.prior; 返回结果 查找单链表中位置i的元素结构指针p ?p==L 获取所删除元素值:s=p.data; 5.2知识扩展---双向链表删除结点 代码实现: public Student_info Student_delete(int i) {//实现指定位置的学生信息的删除 Node p;//用以记录要进行删除位置的前一个学生的信息结点 Node q;//用以记录要进行删除位置的学生的信息结点 Student_info elem= new Student_info(); int j=0; p=Link; while (p!=null &&j<i-1)//用以寻找要进行删除第i个位置的前一个学生信息结点 { p=p.next; j++; } if( ( i>0 ) && ( j==i-1) ) {q=p.next; elem=q.Data; //用以返回所要删除的学生信息 p.prior.next=p.next; //实现指定位置的学生信息从链表中删除 p.next.prior=p.prior; return elem; } else return null;//如果所要删除的位置在表尾之后,删除不成功 } 6、实践指导 【实验内容】 学生在实

文档评论(0)

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

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

1亿VIP精品文档

相关文档