單鏈表


   a.特點:

      1.鏈表是以節點方式來存儲的,

      2.每個節點包含data域,next域:指向下一個節點

      3.鏈表的各個節點不一定是連續存放

      4.鏈表分帶頭結點的鏈表和不帶頭結點的鏈表

   b.內存中實際結構圖:

         

  c.邏輯結構圖:

       

  d.單鏈表實現思路:

    創建一個存儲空間:

      代碼實現:

package LinkedList;

public class OrderlyList {
	public int sum;
	public String name;
	public String nickName;
	public OrderlyList orderlyList;

	public OrderlyList(int sum,String name,String nickName) {
		this.sum=sum;
		this.name=name;
		this.nickName=nickName;
	}

	@Override
	public String toString() {
		return "number:"+sum+" name:"+name+" nickName:"+nickName;
	}
}

  

    添加時:

      方法一: 直接添加到鏈表尾部(不推薦)

      1. 先創建一個head頭結點,作用就是表示單鏈表的頭
      2. 后面每添加一個節點,就直接加入到鏈表的最后

            (1) 先定義一個頭結點,頭結點不能動,不存放具體的數據

            (2) 添加節點到單向鏈表

                1> 找到當前鏈表的最后節點

                2> 將最后這個節點的next 指向新的節點

                3>通過一個輔助遍歷,幫忙遍歷整個鏈表

代碼實現:

 1 class Init{
 2     //初始化
 3     OrderlyList head =  new OrderlyList(0,"","");
 4     public void add(OrderlyList record) {
 5         //初始化一個臨時變量
 6         OrderlyList temp = head;
 7         while (true) {
 8             //判斷是否到達最后一個位置
 9             if (temp.orderlyList == null) {
10                 temp.orderlyList = record;
11                 break;
12             }
13             temp = temp.orderlyList;
14         }
15     }
16     public void show() {
17         OrderlyList temp = head.orderlyList;
18         while (true) {
19             if (head.orderlyList==null) {
20                 System.out.println("是空的");
21                 return;
22             }
23             if (temp==null) {
24                 return;
25             }
26             System.out.println(temp);
27             temp = temp.orderlyList;
28             
29         }
30     }
31 }

 

      方法二: 根據編號插入鏈表,如果有則添加失敗並給出提示

        圖解:

          

      1. 找到新添加節點的位置,是通過輔助變量
      2. 讓新的節點.orderlyList= temp.orderlyList
      3. temp.orderlyLis = 新的節點

代碼實現:

void add(OrderlyList orderlyList) {
		OrderlyList temp = orderly;
		boolean flag = false;
		while (true) {
			if (temp.orderlyList == null) {
				break;
			}
			if (temp.orderlyList.sum > orderlyList.sum) {
				break;
			}
			if (temp.orderlyList.sum == orderlyList.sum) {
				flag = true;
			}
			temp = temp.orderlyList;
		}
		if (!flag) {
			orderlyList.orderlyList = temp.orderlyList;
			temp.orderlyList = orderlyList;
		} else {
			System.out.println("已經存在");
		}
	}

  

 修改時:   

    根據編號來修改,但編號不能更改,否則相當與添加

代碼實現:

	//	修改
	void update(OrderlyList list) {
		OrderlyList temp = orderly.orderlyList;
		boolean flag = false;
		while (true) {
			if (temp == null) {
				break;
			}
			if (temp.orderlyList.sum == list.sum) {
				flag = true;
				break;
			}
			temp = temp.orderlyList;
		}
		if (flag) {
			temp.orderlyList.name = list.name; 
			temp.orderlyList.nickName = list.nickName;
			temp.orderlyList.orderlyList =list.orderlyList;
		}
	}

  

  刪除時:

     圖解:

      

代碼實現:

// 刪除
	void delect(int sum) {
		OrderlyList temp = orderly.orderlyList;
		boolean flag = false;
		while (true) {
			if (temp == null) {
				break;
			}
			if (temp.orderlyList.sum == sum) {
				flag = true;
				break;
			}
			if (temp.orderlyList.sum > sum) {
				break;
			}
			temp = temp.orderlyList;
		}
		if (flag) {
			temp.orderlyList = temp.orderlyList.orderlyList;
		}
	}
    1. 找到需要刪除的節點的前一個節點
    2. temp.orderlyList = temp.orderlyList.orderlyList;
    3. 被刪除的節點會因為沒有指向從而會被垃圾回收機制回收;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM