Java与数据结构(1)——单链表

Java与数据结构(1)——单链表

第一次写博客,也是因为正在学习数据结构的原因,记录下自己的学习成果,希望自己能够坚持下来。

1、单链表是一种链式存取的数据结构,用一组连续的地址存储线性表中的数据。单链表中的数据通常用结点表示,结点通常包含:data(用来存储数据)和 next(指向下一个结点)。
图片来自百度
2、开始结点无前趋,故应设头指针head指向开始结点。终端结点无后继,故终端结点的指针域为空,即NULL。
3、在插入结点时通常有两种方式:尾插法和头插法。根据不同的操作选择不同方法,可以提高工作效率(我下面只实现了尾插法),也可以指定位置插入。

package List;

public class singleList {
public Node head ;// 声明头节点
private int length = 0;

public singleList() {// 构造方法,给头节点head赋空
	this.head = null;
}

class Node{
		int data;//节点数据
		Node next;//指向下一个节点
	public Node(int data) {//构造方法,给data赋值
		this.data = data;
	}
}

/*
 *添加节点 
 */
public void addNode(int data){
	Node temp = new Node(data);
	if(head==null){//判断是否为第一个节点
		head=temp;
		length++;
		return;
	}
	Node temp1=head;
	while(temp1.next!=null)
		temp1=temp1.next;
	temp1.next =temp;
	length++;
}

/*
 * 插入到指定位置
 */
public void addNodeindex(int index,int data) {
	if(index < 1 && index > length+1  ) {//判断插入位置		
		System.out.println("插入位置错误");
		return;
	}
	Node node = new Node(data);
	Node temp = head;
	for(int i=0;i<=length;i++) {
	
		if(i==index) {	//插入新节点
			node.next = temp.next;
			temp.next = node;
			length += 1;//链表长度加1
		}
}
	temp = temp.next;
	
}

/**
 * 删除指定节点
 */
public void delNode(int index) {
	if(index < 1||index > length) {
		System.out.print("指定节点不存在");
		return;
	}
	Node temp = head;
	for(int i=1;i<=length;i++) {
		if(i == index-1) {
			temp.next = temp.next.next;//使前一个节点指向下一个节点
			length -= 1;  //链表长度减一
			return;
		}
		temp = temp.next;
	}
}

/**
 * 对链表进行冒泡排序
 */
public void bubbleSortNode() {
	if(length < 2) {
		System.out.print("当前链表无需排序");
	}
	//冒泡排序
	Node temp1 = head;
	Node temp2 = null;
	for(int i=0;i<length-1;i++) {
		temp2 = temp1.next;
		for(int j=0;j<length-i-1;j++) {
			if(temp1.data > temp2.data) {
				//交换两个节点数据值
				int temp = temp1.data;
				temp1.data = temp2.data;
				temp2.data = temp;
			}
			temp2 = temp2.next;
		}
		temp1 = temp1.next;
	}
}

/**
 * 单链表的选择排序
 */
public void selectSort() {
	if(length < 2) {
		System.out.print("节点少于两个");
		return;
	}
	Node temp = head;
	while(temp.next != null) {
		Node secondTemp = temp.next;
		while(secondTemp != null) {
			if(temp.data < secondTemp.data) {
				int constantTemp = secondTemp.data;
				secondTemp.data = temp.data;
				temp.data = constantTemp;
			}
			secondTemp = secondTemp.next;
		}
		temp = temp.next;
	}
}
/*
 * 打印输出
 */
public void printNode() {
	Node temp = head;
	
	while(temp != null) {
		System.out.print(temp.data+"\t");
		temp = temp.next;
	}
	System.out.println();
}

public static void main(String args[]) {
	singleList list = new singleList();
	list.addNode(5);
	list.addNode(3);
	list.addNode(4);
	list.addNode(1);
	list.addNode(2);
	System.out.print("链表数据"+"\n");
	list.printNode();
	System.out.print("指定添加一个节点"+"\n");
	list.addNodeindex(2, 6);
	list.printNode();
	System.out.print("冒泡排序"+"\n");
	list.bubbleSortNode();
	list.printNode();
	System.out.print("选择排序"+"\n");
	list.selectSort();
	list.printNode();
	System.out.print("指定删除一个节点"+"\n");
	list.delNode(4);
	list.printNode();
}
}

实验结果:
在这里插入图片描述
由于第一次写没有经验,文章若有错误的地方,请大家指正。

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值