/**
* 单项连接表
*/
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语言实现的单项链表的各种操作,如插入、删除和逆向,这些都是理解和操作链表所...
#### 一、单项动态链表基础概念 - **定义**:单项动态链表是一种线性数据结构,其中每个元素(节点)包含数据部分和指向下一个节点的指针。 - **特点**: - 每个节点只含有一个指向后继节点的链接。 - 插入或删除...
简单的单向链表的删除添加逆置操作,适合初学者
### C语言实现单项动态链表知识点详解 #### 一、单项动态链表基本概念 在计算机科学中,链表是一种常见的线性数据结构,它不像数组那样存储在连续的内存空间中,而是由一系列节点组成,每个节点包含数据元素及指向...
单项链表,也称为单向链表,是链表的一种类型,其中每个节点包含两部分:数据域和指针域。数据域存储实际的数据,而指针域存储指向下一个节点的内存地址。由于链表的节点不需连续存储,因此它可以灵活地处理大量数据...
单项链表是计算机科学中一种基础的数据结构,它在数据组织和存储方面起着至关重要的作用。链表与数组不同,不连续存储元素,而是通过节点间的引用连接彼此。每个节点包含两部分:数据和指向下一个节点的指针。单项...
单项链表是数据结构中的基础概念,它是一种线性数据结构,由一系列节点(也称为元素)组成,每个节点包含数据以及指向下一个节点的指针。在这个“初学者单项链表借鉴”项目中,我们可以看到两个源文件(list.c 和 m....
C语言单项链表的实现 包含链表的排序 链表的数据插入 链表的结点删除
本话题主要探讨的是线性表的链式存储,特别是单项链表的设计与实现。 链式存储相比于顺序存储,最大的优势在于它不需预先分配连续的内存空间,因此在插入和删除操作时更加灵活,无需移动大量元素。单项链表是链式...
### JAVA链表详解 #### 一、链表基础概念 链表是一种常用的基础数据结构,其特点是不按照线性顺序存储数据,而是通过每个节点存储指向下一个节点的地址来实现线性连接。根据节点间连接方式的不同,链表可以分为...
数据结构与算法第一课,c++单项链表,用struct结构体做的小程序
链表:单向链表->双向链表->单项循环链表->双向循环链表 栈:内置动态生成完成的栈 化合物:--双端羟基->循环体积->循环双端羟基 哈希表 树形结构 二叉搜索树 AVL树 红黑树:TreeMap和TreeSet内部使用了红黑树 B树...
在本实验中,我们使用链表来表示多项式,每个节点表示一个单项式。我们实现了多项式的求和和求积操作,包括add函数(实现多项式的求和)和mult函数(实现多项式的求积)。 3. add函数的实现 add函数的实现是通过...
### 单项链表的基本操作 #### 一、概述 单链表是一种常见的线性数据结构,在计算机科学领域有着广泛的应用。它由一系列节点组成,每个节点包含数据域和指向下一个节点的指针域。本篇文章将详细介绍单链表的创建、...
《C语言课程设计:单项链表实现工资管理系统》 在本次C语言的课程设计中,学生将构建一个基于单链表的工资管理系统。这个系统旨在处理员工的工资信息,包括录入、排序、统计、查询以及计算税金等功能,旨在锻炼学生...
标题中的“约瑟夫环的问题用单项循环链表”指的是计算机科学中的一种经典问题,也称为约瑟夫环(Josephus Problem)。这个问题的基本设定是,人们站成一个圈,然后从某个人开始按照顺时针或逆时针的顺序报数,每次数...
《C语言课程设计:单项链表实现工资管理系统》 在计算机科学中,C语言是一种强大的编程语言,尤其适合实现底层数据结构和算法。本课程设计的任务是使用C语言开发一个工资管理系统,它采用单项链表作为核心数据结构...