码迷,mamicode.com
首页 > 其他好文 > 详细

大话数据结构---单链表

时间:2017-09-02 23:22:46      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:换行   linked   turn   lis   java   private   else   构造   dex   

单链表在存储结构上与顺序存储的区别:不用开辟连续的存储空间,存储位置任意,只需要让数据的前驱知道它的位置就可以,而使用单链表示只需要知道单链表的第一个元素就能找到其他所有的元素,为了方便 一般会设置一个头指针指向第一个元素。

技术分享

 

单链表的数据读取:通过头指针一个一个往后遍历

单链表的插入:

技术分享

删除:

技术分享

 

自定义单链表的简单实现:

package com.neuedu.entity;
/* 
* 项目名称:JavaSqList 
* @author:wzc
* @date 创建时间:2017年9月2日 上午9:49:00
* @Description:  自定义单链表
* @parameter  
*   */
public class MyLinkedList {
	private  Node HeadNode=new Node();  //头结点
	private  int NodeNum;  //结点个数
    //构造函数
	public MyLinkedList() {
		super();
		NodeNum=0;
	}
	//插入操作----插入到链表的末尾
	public void addNode(int date){
		Node NewNode=new Node(date);
		if (NodeNum==0) {
			HeadNode.next=NewNode;
		}else {
			Node tmp=HeadNode;  //每次添加都需要从头结点一次往后找
			while(tmp.next!=null){
				tmp=tmp.next;  //找到末尾的结点
			}
			tmp.next=NewNode;//将新节点加在末尾结点的后面
		}
		NodeNum++;  //结点个数+1
	}
	//插入操作,插入到链表的指定位置
	public void AddNodeIndex(int date,int index){
		//先判断插入位置是否合法
		if (index>NodeNum+1) {
			System.out.println("插入位置越界");
			return;
		}

		Node tmp=HeadNode;
		int j=1;
		while((tmp.next!=null)&&j<index){//找到第index-1的结点
			tmp=tmp.next;
			j++;
		}
		Node NewNode=new Node(date);
		NewNode.next=tmp.next;   //执行插入操作1.
		tmp.next=NewNode;        //执行插入操作2.
		NodeNum++;
		System.out.println("插入成功");
		
	}
	//返回链表长度
	public int length(){
		return NodeNum;
	}
	//打印结点数据
	public void printNode(){
		Node tmp=HeadNode;
		while(tmp.next!=null){
			tmp=tmp.next;
			System.out.print(tmp.date+" ");
		}
		System.out.println();//打印完后换行
	}
	//删除某个结点
	public  void deleteNode(int index){
		//先判断删除的位置是否存在
		if (index>NodeNum) {
			System.out.println("删除位置不存在");
			return;
		}
		Node tmp=HeadNode;
		int j=1;
		while((tmp.next!=null)&&j<index){//找到第index-1的结点
			tmp=tmp.next;
			j++;
		}
		Node pNode=tmp.next;
		tmp.next=pNode.next;
		NodeNum--;
		
	}
	//判断某个数据是否在链表中
	public  boolean isExist(int date){
		Node tmp=HeadNode;
		while(tmp.next!=null){
			tmp=tmp.next;
			if (tmp.date==date) {
				return true;
			}
		}
		return false;
	}
	

}

//链表中的结点类
class Node{
	protected int date;
	protected  Node next=null;
	
	public Node() {
		super();
	}

	//结点的构造函数
	public Node(int date) {
		super();
		this.date = date;
	}
	
}

 

大话数据结构---单链表

标签:换行   linked   turn   lis   java   private   else   构造   dex   

原文地址:http://www.cnblogs.com/Actexpler-S/p/7468211.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!