`
coolszy
  • 浏览: 1413448 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

链表----单项链表

 
阅读更多

 

/**
 * 单项连接表
 */

package com.szy.structure.list;

import java.util.Scanner;

class Node
{
	public int id;  //节点的ID编号,作为主键使用,有用户指定
	public Node next;
}
public class SinglyLinkedList
{
	private Node START;
	
	public SinglyLinkedList()
	{
		START=null;
	}
	
	/**
	 * 插入节点方法,根据用户输入的ID值遍历链表,把新的
	 * 节点插入的指定位置。要排序的。
	 */
	public void addNode()
	{
		System.out.println("Input node info:");
		Scanner scanner=new Scanner(System.in);
		int nodeId=scanner.nextInt();
		//创建一个新的节点
		Node newNode=new Node();
		newNode.id=nodeId;
		newNode.next=null;
		
		//如果插入的节点是第一个节点
		if ((null==START)||(nodeId<=START.id))
		{
			if ((null!=START)&&(nodeId==START.id))
			{
				System.out.println("\nDuplicate id.");
				return;
			}
			newNode.next=START;
			START=newNode;
			return;
		}
		//遍历链表找到新的插入位置
		Node pre,curr;
		pre=START;
		curr=START;
		while((curr!=null)&&(nodeId>=curr.id))
		{
			if (curr.id==nodeId)
			{
				System.out.println("\nDuplicate id.");
				return;
			}
			pre=curr;
			curr=curr.next;
		}
		pre.next=newNode;
		newNode.next=curr;
	}
	
	/**
	 * 删除指定节点
	 * @param 节点ID
	 */
	public boolean delNode(int id)
	{
		Node pre=START;
		Node current=START;
		while(current!=null)
		{
			if (current.id==id)
			{
				if (current.equals(START))
				{
					START=START.next;
				}
				else
				{
					pre.next=current.next;
				}
				return true;
			}
			pre=current;
			current=current.next;
		}
		return false;
	}
	/**
	 * 查找节点
	 * @param 节点ID
	 * @return
	 */
	public boolean searchNode(int id )
	{
		Node current=START;
		while(current!=null)
		{
			if (current.id==id)
			{
				return true;
			}
			current=current.next;
		}
		return false;
	}
	/**
	 * 循环遍历链表
	 */
	public void traverse()
	{
		if (listEmpty())
		{
			System.out.println("The list is Empty");
		}
		else
		{
			System.out.println("The records in the list are:");
			Node current=START;
			while(current!=null)
			{
				System.out.print(current.id+"-->");
				current=current.next;
			}
		}
	}
	/**
	 * 判断链表是否为空
	 * @return
	 */
	public boolean listEmpty()
	{
		if (START==null)
		{
			return true;
		}
		else
		{
			return false;
		}
	}
	
	public static void main(String[] args)
	{
		SinglyLinkedList list=new SinglyLinkedList();
		while(true)
		{
			System.out.println("\n------------------------------------");
			System.out.println("Menu:");
			System.out.println("1.Add a record to the list");
			System.out.println("2.Delete a record from the list");
			System.out.println("3.View all the records in the list");
			System.out.println("4.Search for a record in the list");
			System.out.println("5.Exit");
			System.out.println("------------------------------------");
			System.out.println("Enter you choice:");
			Scanner scanner=new Scanner(System.in);
			int select=scanner.nextInt();
			switch (select)
			{
			case 1:
				list.addNode();
				break;
			case 2:
			{
				if (list.listEmpty())
				{
					System.out.println("List is empty");
					break;
				}
				System.out.println("\nInput the id of the list:");
				int id=scanner.nextInt();
				if (list.delNode(id))
				{
					System.out.println("Delete success!");
				}
				else
				{
					System.out.println("This id node is not exit!");
				}
			}
			break;
			case 3:
			{
				list.traverse();
			}
			break;
			case 4:
			{
				if (list.listEmpty())
				{
					System.out.println("List is empty");
					break;
				}
				else
				{
					System.out.println("\nInput the id of the list:");
					int id=scanner.nextInt();
					if (list.searchNode(id))
					{
						System.out.println("Record found!");
					}
					else
					{
						System.out.println("Record not found");
					}
				}
			}
			break;
			case 5:return;
			default:
				break;
			}
		}
	}
}

 

分享到:
评论

相关推荐

    单项链表模拟约瑟夫环

    ### 单项链表模拟约瑟夫环 #### 知识点概述 本篇文章将详细介绍如何使用单项链表来实现约瑟夫环问题,并通过具体的C语言代码进行解析。约瑟夫环是一个经典的计算机科学问题,涉及到数据结构中的链表操作以及算法...

    单项链表各种操作的实现(C语言源代码VS2008)

    单项链表是数据结构中的一种基础结构,它由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针。在本压缩包中,你将找到C语言实现的单项链表的各种操作,如插入、删除和逆向,这些都是理解和操作链表所...

    有建立 输出 插入 删除 修改功能的单项动态链表

    #### 一、单项动态链表基础概念 - **定义**:单项动态链表是一种线性数据结构,其中每个元素(节点)包含数据部分和指向下一个节点的指针。 - **特点**: - 每个节点只含有一个指向后继节点的链接。 - 插入或删除...

    单项链表得操作

    简单的单向链表的删除添加逆置操作,适合初学者

    C语言写函数建立一个有三名学生数据的单项动态链表

    ### C语言实现单项动态链表知识点详解 #### 一、单项动态链表基本概念 在计算机科学中,链表是一种常见的线性数据结构,它不像数组那样存储在连续的内存空间中,而是由一系列节点组成,每个节点包含数据元素及指向...

    单项动态链表

    单项链表,也称为单向链表,是链表的一种类型,其中每个节点包含两部分:数据域和指针域。数据域存储实际的数据,而指针域存储指向下一个节点的内存地址。由于链表的节点不需连续存储,因此它可以灵活地处理大量数据...

    单项链表&图书管理系统

    单项链表是计算机科学中一种基础的数据结构,它在数据组织和存储方面起着至关重要的作用。链表与数组不同,不连续存储元素,而是通过节点间的引用连接彼此。每个节点包含两部分:数据和指向下一个节点的指针。单项...

    初学者单项链表借鉴

    单项链表是数据结构中的基础概念,它是一种线性数据结构,由一系列节点(也称为元素)组成,每个节点包含数据以及指向下一个节点的指针。在这个“初学者单项链表借鉴”项目中,我们可以看到两个源文件(list.c 和 m....

    C语言单项链表的实现

    C语言单项链表的实现 包含链表的排序 链表的数据插入 链表的结点删除

    线性表的链式存储(单项链表)的设计与实现

    本话题主要探讨的是线性表的链式存储,特别是单项链表的设计与实现。 链式存储相比于顺序存储,最大的优势在于它不需预先分配连续的内存空间,因此在插入和删除操作时更加灵活,无需移动大量元素。单项链表是链式...

    JAVA链表的介绍(包含单项链表、双向链表)、LinkedList 与 ArrayList 比较、链表的基本操作、基本方法等

    ### JAVA链表详解 #### 一、链表基础概念 链表是一种常用的基础数据结构,其特点是不按照线性顺序存储数据,而是通过每个节点存储指向下一个节点的地址来实现线性连接。根据节点间连接方式的不同,链表可以分为...

    c++数据结构预算法之单项链表

    数据结构与算法第一课,c++单项链表,用struct结构体做的小程序

    数据结构

    链表:单向链表-&gt;双向链表-&gt;单项循环链表-&gt;双向循环链表 栈:内置动态生成完成的栈 化合物:--双端羟基-&gt;循环体积-&gt;循环双端羟基 哈希表 树形结构 二叉搜索树 AVL树 红黑树:TreeMap和TreeSet内部使用了红黑树 B树...

    数据结构实验--链表进行多项式求和与求积

    在本实验中,我们使用链表来表示多项式,每个节点表示一个单项式。我们实现了多项式的求和和求积操作,包括add函数(实现多项式的求和)和mult函数(实现多项式的求积)。 3. add函数的实现 add函数的实现是通过...

    单项链表的建立,插入 ,删除,显示节点信息,释放动态内存.txt

    ### 单项链表的基本操作 #### 一、概述 单链表是一种常见的线性数据结构,在计算机科学领域有着广泛的应用。它由一系列节点组成,每个节点包含数据域和指向下一个节点的指针域。本篇文章将详细介绍单链表的创建、...

    C语言课程设计单项链表实现工资管理系统方案.doc

    《C语言课程设计:单项链表实现工资管理系统》 在本次C语言的课程设计中,学生将构建一个基于单链表的工资管理系统。这个系统旨在处理员工的工资信息,包括录入、排序、统计、查询以及计算税金等功能,旨在锻炼学生...

    约瑟夫环的问题用单项循环链表

    标题中的“约瑟夫环的问题用单项循环链表”指的是计算机科学中的一种经典问题,也称为约瑟夫环(Josephus Problem)。这个问题的基本设定是,人们站成一个圈,然后从某个人开始按照顺时针或逆时针的顺序报数,每次数...

    C语言课程设计单项链表实现工资管理系统.doc

    《C语言课程设计:单项链表实现工资管理系统》 在计算机科学中,C语言是一种强大的编程语言,尤其适合实现底层数据结构和算法。本课程设计的任务是使用C语言开发一个工资管理系统,它采用单项链表作为核心数据结构...

Global site tag (gtag.js) - Google Analytics