1. 程式人生 > >大話數據結構---單鏈表

大話數據結構---單鏈表

.com des 函數 list == lin 尾結點 out 數據讀取

單鏈表在存儲結構上與順序存儲的區別:不用開辟連續的存儲空間,存儲位置任意,只需要讓數據的前驅知道它的位置就可以,而使用單鏈表示只需要知道單鏈表的第一個元素就能找到其他所有的元素,為了方便 一般會設置一個頭指針指向第一個元素。

技術分享

單鏈表的數據讀取:通過頭指針一個一個往後遍歷

單鏈表的插入:

技術分享

刪除:

技術分享

自定義單鏈表的簡單實現:

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;
	}
	
}

大話數據結構---單鏈表