`
十三月的
  • 浏览: 167684 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

单向链表

 
阅读更多

链表:一个纠结的问题。感觉跟学异常的时候的感觉一样,知道有这回事,知道怎么操作,却还是有种不详的感觉。在学校简单接触过,被它打败了。

 

package cn415;

public class List<E> {

	
	private  static  class  Node<E>{
		E  e;
		Node  next;
		//构造函数
		public  Node(E e,Node  next){
			this.e=e;
			this.next=next;
		}
	}
	
	//定义一个头节点
	private Node<E>  head;
	//定义链表大小
	private  int size=0;
	
	//清空链表
	public  void  clear(){
		head=null;
	}

	
	//添加头节点数据    私有的方法 相对外部是不可见的定义为private
	private  void  addFirst(E e){
		//封装成节点
		 head=new Node<E>(e,null);
		 size++;
	}
	
	//头结点前插入节点数据
	public  void  addHead(E e){
		if(size==0){
			this.addFirst(e);
		}else{
		//封装成节点
		Node<E>  newNode=new Node<E>(e,head);
		//newNode指向head
		head=newNode;
		size++;
		}
	}
	//向末尾添加节点数据
	public  void  addLast(E e){
		this.insert(e, size+1);
	}

	//插入数据到指定位置的结点中
	public void insert(E e,int index){
		if(index<1||index>size+1){
			System.out.println("插入时输入有误!!");
		}
		if(index==1){
			this.addHead(e);
		}else{
			int count=1;
			for(Node<E> p=head;p!=null;p=p.next){
				if(count+1==index){
					Node<E> newNode=new Node<E>(e,p.next);
					p.next=newNode;
					size++;
					return;
				}
				count++;
			}
		}
	}
	
	
	//取得指定位置的结点
	public  Node<E> getIndex(int index){
		int  count=1;
		Node<E>  node=null;
		//遍历
		for(Node<E> tem=head;tem!=null;tem=tem.next){
			if(count==index){
				node=tem;
				break;
			}
			count++;
		}
		return node;
	}
	
	//删除头结点
	public void  delateHead(){
		head=head.next;
		size--;
	}
	
	//删除指定位置的结点数据
	public void delate(int index){
		if(index<1||index>size+1){
			System.out.println("删除时输入有误!!!");
		}else if(index==1){
			this.delateHead();
		}else{
			//取得指定位置的结点
			Node<E> node=this.getIndex(index);
			//取得指定位置前的一个结点
			Node<E> lastnode=this.getIndex(index-1);
			//修改前一个结点的next
			lastnode.next=node.next;
			//大小改变
			size--;
		}
		
	}
	
	
	//打印所有节点数据的方法
	public  void  print(){
             Node<E>  tem=head;
             for(int i=1;i<=size;i++){
            	 System.out.println("第"+i+"节点是"+"\t"+tem.e);
            	 tem=tem.next;
             }
	}
	//取得链表大小
	public int getSize() {
		return size;
	}
	public static void main(String[] args) {
              
		List<String>  list=new List<String>();
		list.addFirst("王力宏");
		list.addHead("周杰伦");
		list.addHead("林俊杰");
		list.addHead("林秋离");
		System.out.println("指定位置"+"   "+5+"   "+"插入测试"+"\t"+"*******************");
		list.insert("cuole", 5);
		list.print();
		System.out.println("末尾添加测试"+"\t"+"*******************");
		list.addLast("中南大学");
		list.print();
		System.out.println("头部删除测试"+"\t"+"*******************");
		list.delateHead();
		list.print();
		System.out.println("指定取得测试"+"\t"+"*******************");
		System.out.println("指定结点"+"   "+4+"   "+"取得数据测试的结果是"+list.getIndex(4).e);
		System.out.println("指定删除测试"+"\t"+"*******************");
		list.delate(5);
		list.print();
		
		
		
	}

}

 

打印的结果是 :

指定位置   5   插入测试 *******************
第1节点是 林秋离
第2节点是 林俊杰
第3节点是 周杰伦
第4节点是 王力宏
第5节点是 cuole
末尾添加测试 *******************
第1节点是 林秋离
第2节点是 林俊杰
第3节点是 周杰伦
第4节点是 王力宏
第5节点是 cuole
第6节点是 中南大学
头部删除测试 *******************
第1节点是 林俊杰
第2节点是 周杰伦
第3节点是 王力宏
第4节点是 cuole
第5节点是 中南大学
指定取得测试 *******************
指定结点   4   取得数据测试的结果是cuole
指定删除测试 *******************
第1节点是 林俊杰
第2节点是 周杰伦
第3节点是 王力宏
第4节点是 cuole

 

 

分享到:
评论

相关推荐

    C#单向链表C#单向链表C#单向链表

    单向链表是一种基本的数据结构,它在计算机科学和编程,特别是C#中扮演着重要角色。单向链表与数组不同,不提供随机访问,但允许高效地插入和删除元素,尤其在列表的中间或末尾。接下来,我们将深入探讨C#中单向链表...

    单向链表 代码架构

    单向链表是一种基本的数据结构,它在计算机科学和编程中有着广泛的应用。与数组不同,链表中的元素不是在内存中连续存储的,而是通过指针或引用连接在一起,形成一个逻辑上的线性序列。单向链表的每个节点包含两部分...

    C#单向链表的实现

    本文将详细讲解如何在C#中实现单向链表,结合源码解析来帮助你深入理解其内部机制。 首先,我们要知道什么是单向链表。单向链表是由一系列节点组成,每个节点包含两个部分:数据域和指针域。数据域存储实际的数据,...

    单向链表类模板_单向链表类模板_fastchq_

    单向链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。在C++编程中,为了实现通用性,我们通常会使用模板类来创建单向链表,以便它可以处理不同类型的元素。标题"单向链表类...

    单向链表源代码

    单向链表是一种基本的数据结构,它在计算机科学中被广泛应用,特别是在算法和数据结构的实现中。在Java编程中,单向链表通常通过定义一个节点类来实现,每个节点包含数据和指向下一个节点的引用。下面我们将深入探讨...

    实验二 单向链表的有关操作.cpp

    1.随机产生或键盘输入一组元素,建立一个带头结点的单向链表(无序)。 2.遍历单向链表。 3.把单向链表中元素逆置(不允许申请新的结点空间)。 4.在单向链表中删除所有的偶数元素结点。 5.编写在非递减...

    单向链表实验报告(数据结构)

    在本篇数据结构实验报告中,我们关注的核心是单向链表这一数据结构。单向链表是一种线性数据结构,每个节点包含一个数据元素和一个指向下一个节点的指针。实验使用VC++ 6.0作为编程工具,旨在通过实践来深入理解和...

    04.单向链表以及单向链表的应用.ppt

    04.单向链表以及单向链表的应用.ppt

    Java 单向链表 插入与删除节点

    这是一个单向链表,它具有插入与删除节点的功能。Entry类实现了链表的各节点。

    数据结构 单向链表 双向链表 源程序

    本文将深入探讨两种重要的线性数据结构——单向链表和双向链表,以及它们在实际编程中的应用。 单向链表是一种线性数据结构,它的每个元素(称为节点)包含两部分:数据域,用于存储实际的数据;指针域,用于存储下...

    将一个单向链表反向连接

    将一个单向链表反向连接

    C语言自学链表,单向链表,双向链表,适合新手学习。

    本资源提供的是针对初学者设计的链表学习材料,包括单向链表和双向链表的实现。下面将详细讲解这两种链表的数据结构及其操作。 1. **单向链表**: 单向链表是一种线性数据结构,每个节点包含两部分:数据域和指针...

    C语言实现的一个单向链表逆转

    单向链表是一种基本的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表逆转是计算机科学中常见的操作,它将链表中的元素顺序颠倒,使得原链表的最后一个元素成为新链表的第一个元素,而...

    单向链表多种功能实现

    单向链表是一种基本的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。在本文中,我们将深入探讨如何实现单向链表的各种操作,包括建立链表、添加元素、删除元素、翻转链表(包括递归方法)...

    flash as3.0 实现的单向链表

    在IT领域,数据结构是编程基础中的重要组成部分,而单向链表作为基本的数据结构之一,在许多场景下都有着广泛的应用。本项目以Flash AS3.0为编程语言,实现了一个单向链表的数据结构,这对于理解和应用单向链表概念...

    C语言实现的单向链表和双向链表

    本主题将深入探讨由C语言实现的单向链表(slist.h)和双向链表(blist)。这两种链表各有特点,适用于不同的场景,对于理解和掌握数据结构与算法至关重要。 ### 单向链表(slist.h) 单向链表是一种线性数据结构,...

    C 语言版 单向链表

    C 语言版 单向链表 #include #include typedef struct student { int num; struct student *next; }st; st *creat() //创建链表 { st *head , *tail , *p; int num = 0; head = tail = p = NULL; printf...

    单向链表结点的逐个删除-C语言教程

    单向链表作为一种基础的数据结构,其插入、删除、创建和遍历操作是每个程序员必须熟练掌握的技能。本文将详细介绍如何使用C语言实现单向链表结点的逐个删除。 首先,我们要了解单向链表的基本概念。单向链表是由一...

    C语言实现单向链表及操作

    数据结构,c语言实现的单向链表。代码分享 struct LinkNode { int data; struct LinkNode *next; }; typedef struct LinkNode *Lnode;

    单向链表逆转单向链表逆转单向链表逆转

    "单向链表逆转" 在计算机科学中,链表是一种基本的数据结构,它是一种动态的数据结构,可以存储大量的数据。单向链表是一种特殊的链表,每个结点只有一个指针,指向下一个结点。单向链表逆转是指将链表的结点顺序...

Global site tag (gtag.js) - Google Analytics