作业三 单链表
来源:互联网 发布:英雄联盟韩服数据库 编辑:程序博客网 时间:2024/06/05 10:32
单链表:
public class Node{ private Object data; private Node next; //创建空结点 public Node() { this(null,null); } //创建只有元素,指针为空的结点 public Node(Object obj) { this(obj,null); } //由元素和指针 创建结点 public Node( Object obj , Node nt) { data=obj ; next=nt; } }——————————————————————————————class LinkList{ Node head; //4、编写单链表的成员方法,实现对带头结点的单链表的就地逆置。 // 思路:将单链表结点从头到尾依次删除每个结点,再将这个结点用头插法依次插入链表中,形成倒序。 public void reserve() { // 首先将链表拆分成两部分,第一部分为空链表,第二部分为元素结点链表。 Node rest = head.next; //rest表示元素结点链表 head.next = null; //head为空链表 Node p ; //用于表示待插入结点,每次从rest表示的链表中取第一个结点 while(rest != null ) // rest表示的链表中还有结点,则取一个结点,将其从rest上删除,插入到head链表表头 { p = rest; rest = rest.next; p.next = head.next; head.next = p; } } //5、编写单链表的成员方法,实现在有序单链表中插入一个新元素,使单链表保持有序性。 // 思路 :待插入元素与表中元素比较大小,确定插入位置,再进行插入操作。 // 注意插入操作需要修改插入结点的先驱结点。 public void insert( Object x ) { Node p; //p从首元素开始取值,若小于x,继续向后查找位置,若大于x,则x要插入p结点前。 Node pre; //插入操作需要修改先驱结点,该变量一直取p结点的先驱。 p=head.next; pre = head; while(p!=null && p.data.compareTO(x)<0 ) { pre = p; p = p.next; } //将x插入到pre之后 Node s = new Node(x) ; s.next = pre.next ; pre.next = s ; } //该问题也可以只设一个变量pre, 在进行大小比较时,比较pre的后继结点。 public void insert( Object x ) { Node pre; pre = head; while(pre.next !=null && pre.next.data.compareTo(x)<0 ) { pre = pre.next; } //将x插入到pre之后 Node s = new Node(x) ; s.next = pre.next ; pre.next = s ; } //6、编写单链表的成员方法,实现删除不带头结点的单链表中,删除值为x的第一个结点的操作。 // 删除成功返回被删除结点,删除不成功,返回空。(删除成功返回位置,不成功,返回-1) //思路:不带头结点的单链表,删除的若是第一个结点,头指针的值会被改写。操作需要注意判断。 //返回值是结点。 public Node remove(Object x ) { Node p ; Node temp; if ( head==null) //空表,返回空 return null; p = head; if ( head.data.equals(x)) //x为头结点,删除,并修改头指针 { head=head.next; return p; } else //从第2个结点开始判断 { while( p.next!=null ) { if (p.next.data.equals(x)) break; else p = p.next; } if (p.next==null) //没找到 return null; else //找到,删除 { temp = p.next; p.next = temp.next; return p; } } } //7、编写单链表的成员方法,实现删除带头结点的单链表中,删除值为x的所有结点,返回被删除的结点数。 public int removeAll ( Object x ) { Node p,pre; int total = 0 ; pre = head; p = head.next; while(p!=null) { if ( p.data.equals(x)) //p的数据域为x,删除p { pre.next = p.next; p = pre.next; // 重新赋值p total ++; } else { pre = p ; p = pre.next; } } } }———————————————————————————————————————————————— //8、编写一个多项式类的成员函数,实现将一个用循环链表表示的稀疏多项式分解成两个多项式的操作, // 使两个多项式中各自含奇次项或偶次项。 // 要求利用原来循环链表中的存储空间构成这两个链表。 // 一元多项式的二元组类,即LinkList的data域类型 , 教材P57 class PolynNode { double coef; //系数 int expn; //指数 public PolynNode (double coef , int expn) { this.coef = coef; this.expn = expn; } } class PolynList extends LinkList // 教材P57 { .... // 8、编写一个多项式类的成员函数,实现将一个用循环链表表示的稀疏多项式分解成两个多项式的操作, // 使两个多项式中各自含奇次项或偶次项。 // 要求利用原来循环链表中的存储空间构成这两个链表。 public PolynList split ( ) // 无参数,返回值为拆分后的奇数项链表,原表为偶数项链表 { PolynList A; A = new PolynList (); //A表保存奇次项,新建一个空链表,原表,保存偶次项 // 由于原链表是有序的,因此,取链表上的每个结点,判断奇数项,从原链表中删除,插入A表尾即可。 PolynNode rearA; // 用尾插法插入,此变量表示A表的表尾 PolynNode p , pre ; //表示当前结点及其先驱结点 rearA = A.head; pre = this.head; p = head.next; // 取每个结点,进行操作, //判断其奇偶性,若为奇数项,从原链表中删除,插入A表尾,若为偶数项,留在原链表 while ( p!=null) { if (p.expn %2 == 1) { pre.next = p.next; rearA.next = p; rearA = p ; p = pre.next; } else { pre = p; p = p.next; } } return A; } // ------------------------- // 方法首部设计2 public void split ( PolynList A , PolynList B ) //两个形式参数,分别表示两个已初始化的空表 { //A表保存奇次项,B表,保存偶次项 // 由于原链表是有序的,因此,取链表上的每个结点,判断奇数项,从原链表中删除,插入A表尾即可。 PolynNode rearA; // 用尾插法插入,此变量表示A表的表尾 PolynNode rearB; // 此变量表示B表的表尾 PolynNode p ; //表示当前结点, rearA = A.head; rearB = B.head; pre = this.head; p = head.next; // 取每个结点,进行操作, //判断其奇偶性,若为奇数项,从原链表中删除,插入A表尾,若为偶数项,从原链表中删除,留在原链表 while ( p!=null) { head.next = p.next; if (p.expn %2 == 1) { rearA.next = p; rearA = p ; } else { rearB.next = p; rearB = p ; } p = head.next; } }
阅读全文
0 0
- 作业三 单链表
- 第三次作业 作业三
- 作业三
- 作业三
- 作业三
- 作业三
- 作业三
- 作业三
- 作业三:集合类
- 密码学作业三:ElGamal
- 我的作业(三)
- 第四周作业三
- 第七周作业三
- 作业三,四题
- 作业三--冒泡排序
- 作业三--归并算法
- 电子商务-作业三
- 暑假作业 三
- android String.charAt的使用
- Activity启动模式与任务栈(Task)全面深入记录(上)
- 快速集成视频直播功能
- 如何一次性添加整个文件夹到vs中
- 1
- 作业三 单链表
- Spring Cloud应用程序上下文服务
- 写给初学前端工程师的一封信
- 前端_jQuery过滤器 过滤关键字
- 【Uva11806】Cheerleaders
- [ 网络流 主席树 ] BZOJ3218
- 《程序员》的出路
- j2ee分布式架构 dubbo + springmvc + mybatis + ehcache + redis 技术介绍
- 算法实现Java之最短路径迪杰斯特拉(Dijkstra)