闲来无事,写了个单链表排序。本人算法很渣,欢迎各种拍砖,各种优化,各种新实现。
以下算法是基于冒泡排序的思想。两两比较将最大的放到最后(冒泡排序是将最小的升到最前)。
单链表节点类SingleLinkNode.java
package link; public class SingleLinkNode { private int data; private SingleLinkNode nextNode; public SingleLinkNode(int data, SingleLinkNode nextNode) { this.data = data; this.nextNode = nextNode; } public int getData() { return data; } public void setData(int data) { this.data = data; } public SingleLinkNode getNextNode() { return nextNode; } public void setNextNode(SingleLinkNode nextNode) { this.nextNode = nextNode; } }
单链表类SingleLinkList.java
package link; import java.util.Random; public class SingleLinkList { // the header node of the single link list private SingleLinkNode headerNode; public SingleLinkNode getHeaderNode() { return headerNode; } // construct the single link list which contains 10 nodes public SingleLinkList() { headerNode=new SingleLinkNode(new Random().nextInt(100),null); SingleLinkNode currentNode=headerNode; for(int i=0;i<9;i++){ SingleLinkNode nextNode=new SingleLinkNode(new Random().nextInt(100),null); currentNode.setNextNode(nextNode); currentNode=nextNode; } } public String toString(){ String result=""; SingleLinkNode currentNode=headerNode; while(currentNode!=null){ result+=currentNode.getData()+"-->"; currentNode=currentNode.getNextNode(); } result+="null"; return result; } }
排序算法类Utils.java
package link; public class Utils { // base on bubble sort public static SingleLinkList sort(SingleLinkList singleLinkList) { SingleLinkNode headerNode=singleLinkList.getHeaderNode(); SingleLinkNode currentNode=headerNode; SingleLinkNode nextNode=currentNode.getNextNode(); if(nextNode==null){ return singleLinkList; } SingleLinkNode lastNode=null; int tempData=-1; // if the last node is the second node,the loop is over while(headerNode.getNextNode()!=lastNode){ // check whether the next node is the last node. // if yes, then ship this loop. if(nextNode==lastNode){ lastNode=currentNode; currentNode=singleLinkList.getHeaderNode(); nextNode=currentNode.getNextNode(); continue; } if(currentNode.getData()>nextNode.getData()){ // exchange the data tempData=currentNode.getData(); currentNode.setData(nextNode.getData()); nextNode.setData(tempData); } currentNode=currentNode.getNextNode(); nextNode=currentNode.getNextNode(); } return singleLinkList; } }
相关推荐
根据给定的信息,本文将详细解析两个主要的IT知识点:单链表排序和多项式分解。 ### 单链表排序 #### 基本概念 单链表是一种基本的数据结构,其中每个元素由数据和指向下一个元素的指针组成。在单链表排序中,我们...
数据结构实验一主要关注的是单链表这一基本的数据结构,以及如何在单链表中进行操作,如创建、排序和插入节点。实验的目标是让学习者熟悉编程环境,掌握线性表动态存储结构的特点,尤其是单链表的特性。实验原理基于...
总结来说,"WW1.rar_C 单链表 排序_归并排序"是一个C语言实现的项目,目标是对两个单链表进行归并排序。通过理解单链表的结构和归并排序的原理,我们可以分析和学习`WW1.C`中的实现,从而掌握在链表环境下实现高效...
总的来说,单链表排序是数据结构和算法中的基础操作,对于理解和应用数据结构有重要的意义。通过这个学生管理程序的例子,我们可以看到如何在实际场景中运用链表排序,从而提高数据处理的效率和灵活性。
单链表排序,是C语言版的,供初学者参考,有问题请留言。
### 单链表排序C语言实现 #### 一、引言 在计算机科学中,链表是一种常用的数据结构,它由一系列节点组成,每个节点包含数据元素和指向下一个节点的指针。对于链表的排序操作是算法设计中的一个重要主题。本文将...
这个问题“Q1045564.zip 问题回答的代码 关于单链表排序插入”涉及的就是如何在已有的单链表中插入新元素并保持其有序状态。 单链表的排序插入通常有两种主要方法:直接插入排序和归并排序。这里我们将重点讨论直接...
一种简单的单链表排序算法,建立在选择法的基础上。
单链表交换节点排序,包括选择法、比较法、排序法。
4. **排序操作**:对单链表进行排序,常见的方法有冒泡排序、选择排序、插入排序等。由于链表无法像数组那样直接进行索引操作,因此在链表上实现排序可能比数组复杂。例如,插入排序需要遍历链表,找到每个元素的...
当我们需要在单链表这种非数组结构上进行排序时,需要对基本的简单选择排序算法进行一些调整。接下来,我们将详细探讨如何在单链表上实现简单选择排序。 **一、单链表基础知识** 单链表是一种线性数据结构,由一...
判断算法1和算法5生成单链表所表示的集合是否相等。 (10).在主函数中设计一个简单的菜单,分别调试上述算法。 【选作内容】 (11).利用算法5建立两个非递减有序单向链表,然后合并成一个非递增链表。 (12).采用...
构造两个带有表头结点的有序单链表La、Lb,编写程序实现将La、Lb合并成一个有序单链表Lc。 合并思想是:程序需要3个指针:pa、pb、pc,其中pa,pb分别指向La表与Lb表中当前待比较插入的结点,pc 指向Lc表中当前最后...
单链表的冒泡排序,热烈欢迎大家的下载,谢谢谢谢
在这个场景中,我们将讨论如何在C++中实现单链表的选择排序。 首先,我们需要理解单链表的概念。单链表是一种线性数据结构,其中每个元素(节点)包含数据和一个指向下一个元素的指针。在C++中,我们通常通过定义一...
本主题将深入探讨如何使用单链表实现从小到大排序。 首先,我们需要定义一个节点类(Node Class)。这个类通常包含两个部分:数据域(data field)用于存储元素值,和指针域(next field)用于链接到下一个节点。...