插入排序 链表 java_JAVA单链表(多项式)直接插入排序,大家看看我的怎么不行呢...
首先我不说你的算法有什么问题,我按照我的思路给你写了一个和你的差不多的算法,看了之后,如果你用心思考的话,或许就能看出你的算法问题出在哪里,为什么会进入无限循环。
为了你能够看得更明白,我就把所有的类都给你贴上,看了之后,相信你能够看出你写的算法错误的原因。
1.节点类如下:/**
* 多项式节点
* @author zhq
*
*/
public class PolyNode {
private float coef; // 一元多项式项的系数
private int exp; // 一元多项式项的次数
private PolyNode next; // 指向下一个一元多项式结点
public PolyNode(float coef, int exp) {
this.coef = coef;
this.exp = exp;
next = null;
}
public float getCoef() {
return coef;
}
public void setCoef(float coef) {
this.coef = coef;
}
public int getExp() {
return exp;
}
public void setExp(int exp) {
this.exp = exp;
}
public PolyNode getNext() {
return next;
}
public void setNext(PolyNode next) {
this.next = next;
}
public String toString() {
return "";
}
}
2.链表类如下:
/**
* 初始化链表
* @author zhq
*
*/
public class PolyList {
private PolyNode head, newNode;
public PolyList() {
head = new PolyNode(-10001.0f, 10001);
}
// 初始化链表
public void init(float[] cvs, int[] evs) {
PolyNode currentNode = head.getNext();
for (int i = 0; i < evs.length; i++) {
newNode = new PolyNode(cvs[i], evs[i]);
if (currentNode == null) {
currentNode = newNode;
head.setNext(currentNode);
} else {
currentNode.setNext(newNode);
currentNode = newNode;
}
}
}
public PolyNode getHead() {
return head;
}
public void setHead(PolyNode head) {
this.head = head;
}
public String toString() {
StringBuilder sb = new StringBuilder();
PolyNode currentNode = head;
sb.append("(");
while (currentNode != null) {
sb.append("
+ ">");
currentNode = currentNode.getNext();
}
sb.append(")");
return sb.toString();
}
}
3.核心算法类
/**
* 核心算法类
*
* @author zhq
*
*/
public class Demo {
/**
* 时间复杂度O(n的平方),空间复杂度O(n).n是节点的总数
*
* @param pl
* 待排序的链表多项式
* @return 有序的多项式(按次数从小到大)
*/
public static PolyList listInsertSort(PolyList pl) {
PolyNode headNode = pl.getHead();
// 指向表已经排序的最后一个节点
PolyNode lastInOrder;
// 移动到适当位置的节点
PolyNode firstOutOfOrder;
// 当前节点
PolyNode current;
// 该引用变量指向current的前一个节点
PolyNode trailCurrent;
if (headNode.getNext() == null)// 链表为空
System.out.println("Cannot sort an empty list");
else if (headNode.getNext().getNext() == null) {// 链表只有一个节点
System.out.println("The list is length 1. It is already in order");
} else {// 链表多于一个节点
lastInOrder = headNode.getNext();
while (lastInOrder.getNext() != null) {
firstOutOfOrder = lastInOrder.getNext();
if (firstOutOfOrder.getExp() < lastInOrder.getExp()) {
lastInOrder.setNext(firstOutOfOrder.getNext());
firstOutOfOrder.setNext(headNode.getNext());
headNode.setNext(firstOutOfOrder);
} else {
trailCurrent = headNode;
current = headNode.getNext();
while (current.getExp() < firstOutOfOrder.getExp()) {
trailCurrent = current;
current = current.getNext();
}
if (current != firstOutOfOrder) {
lastInOrder.setNext(firstOutOfOrder.getNext());
firstOutOfOrder.setNext(current);
trailCurrent.setNext(firstOutOfOrder);
} else {
lastInOrder = lastInOrder.getNext();
}
}
}
}
return pl;
}
// 测试方法
public static void main(String[] args) {
/** 系数 */
float[] cvs = { 1, 2, 3, 5, 10 };
/** 次数 */
int[] evs = { 9, 8, 7, 10, 3 };
PolyList pl = new PolyList();
pl.init(cvs, evs);
System.out.println("排序前:" + pl);
System.out.println("排序后:" + listInsertSort(pl));
}
}
插入排序 链表 java_JAVA单链表(多项式)直接插入排序,大家看看我的怎么不行呢...相关推荐
- 【数据结构与算法】 01 链表 (单链表、双向链表、循环链表、块状链表、头结点、链表反转与排序、约瑟夫环问题)
一.线性表 1.1 概念与特点 1.2 线性表的存储结构 1.3 常见操作 1.4 应用场景 二.链表 2.1 链表简介 2.2 单向链表(单链表) 2.21 基本概念 2.22 单链表基本操作 2. ...
- python之链表、单链表、双向链表、单向循环链表
python之链表.单链表.双向链表.单向循环链表 链表 顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时,又需要进行数据的搬迁,所以使用起来并非很灵活 链表结构可以充分利用计算机 ...
- 数据结构5: 链表(单链表)的基本操作及C语言实现
逻辑结构上一个挨一个的数据,在实际存储时,并没有像顺序表那样也相互紧挨着.恰恰相反,数据随机分布在内存中的各个位置,这种存储结构称为线性表的链式存储. 由于分散存储,为了能够体现出数据元素之间的逻辑关 ...
- 单链表删除所有值为x的元素_C/C++编程笔记:如何使用C++实现单链表?单链表的基本定义...
如何弥补顺序表的不足之处? 第一次学习线性表一定会马上接触到一种叫做顺序表(顺序存储结构),经过上一篇的分析顺序表的优缺点是很显然的,它虽然能够很快的访问读取元素,但是在解决如插入和删除等操作的时候, ...
- php链表和联表的区别,PHP_浅谈PHP链表数据结构(单链表),链表:是一个有序的列表,但 - phpStudy...
浅谈PHP链表数据结构(单链表) 链表:是一个有序的列表,但是它在内存中是分散存储的,使用链表可以解决类似约瑟夫问题,排序问题,搜索问题,广义表 单向链表,双向链表,环形链表 PHP的底层是C,当一个 ...
- python单链表实现具体例子_Python实现数据结构线性链表(单链表)算法示例
本文实例讲述了Python实现数据结构线性链表(单链表)算法.分享给大家供大家参考,具体如下: 初学python,拿数据结构中的线性链表存储结构练练手,理论比较简单,直接上代码. #!/usr/bin ...
- php mysql 链表_浅谈PHP链表数据结构(单链表)
链表:是一个有序的列表,但是它在内存中是分散存储的,使用链表可以解决类似约瑟夫问题,排序问题,搜索问题,广义表 单向链表,双向链表,环形链表 PHP的底层是C,当一个程序运行时,内存分成五个区(堆区, ...
- c语言数组指定位置插入和删除_玩转C语言链表,单链表/双向链表的建立/遍历/插入/删除...
最近临近期末的C语言课程设计比平时练习作业一下难了不止一个档次,第一次接触到了C语言的框架开发,了解了View(界面层).Service(业务逻辑层).Persistence(持久化层)的分离和耦合, ...
- 线性表:3.链表,单链表详解与C语言实现
逻辑结构上一个挨一个的数据,在实际存储时,并没有像顺序表那样也相互紧挨着.恰恰相反,数据随机分布在内存中的各个位置,这种存储结构称为 线性表的链式存储 . 由于分散存储,为了能够体现出数据元素之间的逻 ...
最新文章
- spring Bean自动装配
- Anchor的泛化:统一物体检测、实例分割、姿态估计的Point-set Anchor
- ubuntu18.04 mariadb start失败
- SD销售订单输入成本中心
- Flutter一切皆widget但是不要将所有东西放入一个widget
- 服务自动拉起,定时日志清理,数据统计的shell脚本
- 我的挨踢人物传之又是一年找工作时
- 利用Linux查找重复文件(shell脚本)
- 如何实现网页视频聊天?
- java写快递柜管理系统
- FHIR标准和国际基于FHIR的互联互通实践(7):国际互联互通实践
- Ubuntu 20.04 修改笔记本亮度
- [JM] 如何结合标准看JM代码(JM86)
- gitee提交代码到仓库
- google map 离线数据
- 国培南通之行的感悟——(其二)
- GParted图文磁盘分区教程
- 关键路径法(CPM)
- MySQL-日志、备份与恢复
- 程序员开发原谅宝,以防“老实人接盘”?
热门文章
- J2EE 字符 字节 编码知识概念
- 基于mini2440的看门狗(裸机)
- iReport中求和的问题
- LauncherApplication
- 【Python】raise ValueError(Too many dimensions: %d %d. % (ndim, ndmax))问题
- #ifdef,#else,#if,#endif (转载)
- Ubuntu 16.04下Caffe-SSD的应用(五)——安装VOC数据标注工具LabelImag
- linux普通文件的特点是,linux系统文件系统上有哪些特点
- uart接口_UART串行总线舵机转接板规格、接线说明 amp; 驱动安装
- php背景,php图片背景填充实例