1. 程式人生 > >java實現單鏈表的增刪改查與排序

java實現單鏈表的增刪改查與排序

LinkNode

package LinkList;

class Node{
	public Node next;
	public int data;
	public Node(int data){
		this.data=data;
	}
}
public class LinkList{
	public Node head;
	public int length=0;
	//列印連結串列
	public void printLinkList()
	{
		Node p=head;
		while(p!=null)
		{
			System.out.println(p.data);
			p=p.next;
		}
		System.out.println("長度為 :"+length);
	}
	//判斷連結串列是否為空
	public Boolean isEmpty()
	{
		if(head==null)
			return true;
		return false;
	}
	//尾插法新增結點
	public void addLastNode(int data)
	{
		Node x=new Node(data);
		if(head==null)
		{
			head=x;length++;
			return;
		}
		Node q=head;
		while(q.next!=null)
			q=q.next;
		q.next=x;
		length++;
	}
	//頭插法新增結點
	public void addHeadNode(int data)
	{
		Node x=new Node(data);
		if(head==null){
			head =x;length++;
			return;
		}
		x.next=head;
		head=x;
		length++;
	}
	//刪除結點
	public Boolean deleteNode(int index)
	{
		if(index<1||index>length)
			return false;
		int i=1;
		Node p=head;
		while(i!=(index-1))
		{
			p=p.next;
			i++;
		}
		
		(p.next)=(p.next.next);
		length--;
		return true;
	}
	//修改結點
	public Boolean updateNode(int index,int data)
	{
		if(index<1||index>length)
			return false;
		int i=1;
		Node p=head;
		while(i<index)
			{p=p.next;i++;}
		p.data=data;
		return true;
	}
	//向前冒泡,因為冒泡是相鄰倆倆進行比較,所以容易知道,當一輪排序發現順序沒有發生改變則數列已經有序 這樣可以提高效率
	public void SortLinkList()
	{
		Boolean flag=false;
		Node p=head;
		Node q=null;
		for(int i=0;i<length-1;i++)
		{	
			q=p.next;
			for(int j=i;j<length-1;j++)
			{
				if(p.data>q.data)
				{
					int t=p.data;
					p.data=q.data;
					q.data=t;
					flag=true;
				}
				q=q.next;
			}
			if(flag==false)
				break;
			flag=false;
			p=p.next;
		}
	}
}

測試:
package LinkList;
public class MyLinkedList {
	public LinkList linkList=new LinkList();
	public void testaddLastNode(){
		linkList.addLastNode(1);
		linkList.addLastNode(2);
		linkList.addLastNode(3);
		linkList.addLastNode(4);
		linkList.printLinkList();
	}
	public void testaddHeadNode()
	{
		linkList.addHeadNode(1);
		linkList.addHeadNode(2);
		linkList.addHeadNode(3);
		linkList.addHeadNode(4);
		linkList.printLinkList();
	}
	public void testdaleteNode()
	{
		if(linkList.deleteNode(3)==false)
			System.out.println("刪除位置有誤");
		linkList.printLinkList();
	}
	public void testUpateNode()
	{
		if(linkList.updateNode(2, 10)==false)
			System.out.println("修改位置有誤");
		linkList.printLinkList();
	}
	public void testSortLinkList()
	{
		linkList.SortLinkList();
		linkList.printLinkList();
	}
	
	public static void main(String[] args) {
		MyLinkedList main=new MyLinkedList();
		main.testaddHeadNode();
		System.out.println("================================");
		main.testSortLinkList();
	}
}

補充:對於氣泡排序,由於是相鄰倆倆進行比較的,所以當一次迴圈查詢發現順序沒有改變,則可以判斷,序列已有序

對於刪除結點,java與c/c++最大的不同在於java不用手動進行刪除結點的釋放空間,這是由於Java有自動處理垃圾的機制gc

在這裡補充一下Java的GC處理機制:

對物件而言,如果沒有任何變數去引用它,那麼該物件將不可能被程式訪問,因此可以認為他是垃圾資訊,可以被回收,只要有一個以上的變數引用該物件,該物件就不會被回收。所以也就很好解釋在這裡為什麼我不用手動釋放空間了。

垃圾回收都是依據一定的演算法進行的,下面介紹其中幾種常用的垃圾回收演算法

(1)引用計數法(Reference Counting Collerctor)

引用計數作為一種簡單但是效率較低的方法,其主要原理如下:在堆中對每個物件都有一個計數器;當物件被引用時,引用計數器+1;當引用被置為空或離開作用域的時候,引用計數-1,由於這種方法無法解決相互引用的問題,因此JVM沒有采用這個演算法

(2)追蹤回收演算法(Tracing Collector)

追蹤回收演算法利用JVM維護的物件引用圖,從根節點開始遍歷物件的應用圖,同時標記遍歷到的物件,當遍歷結束後,未被標記的物件就是目前已不被使用的物件,可以回收。

(3)壓縮回收演算法(Compacting Collector)

壓縮回收演算法的思路如下:把堆中活動的物件移動到堆中一端,這樣就會在堆中另外一端留出很大的一塊空閒區間,相當於對堆中的碎片進行了處理。雖然這種方法可以大大消除堆碎片的工作,但是每次處理都會帶來效能的損失。

(4)複製回收演算法(Coping Collector)

複製回收演算法的思路:把堆分為倆個大小相同的區域,在任何時刻,只有其中一個區域被使用,直到這個區域被消耗完為止,此時垃圾回收期就會中斷程式的執行,通過遍歷的方式把所有活動的物件複製到另外一個區域中,在複製的過程中它們是緊挨著佈置的,從而可以消除記憶體碎片。當複製過程結束後程序會接著執行,知道這塊區域被使用完,然後再採用上面的方法繼續進行垃圾回收。

(5)按代回收演算法(Generational Collector)

複製回收演算法主要的缺點如下:每次演算法執行時,所有出於活動狀態的物件都要被複制,這樣效率很低。由於程式有生命週期長短之分而大部分都是生命週期比較短的,因此可以根據這個特點對演算法進行優化。按代回收演算法的主要思路如下:把堆分為倆個或多個子堆,每一個子堆被視為一代。演算法在執行的過程中優先收集那些“年幼”的物件,如果一個物件經過多次收集仍然“存活”,那麼就可以把這個物件轉移到高一級的堆裡,減少對其的掃描次數。

相關推薦

Mybatis實現部門刪改以及排序

tis hide 映射 類型 f2c cep interface mes sele 廢話不說,直接開門見山! 需要在WebContent下的lib下導入兩個包 mybatis-3.2.5.jar ojdbc6.jar 1 package com.xdl.entit

java實現單鏈刪改排序

LinkNode package LinkList; class Node{ public Node next; public int data; public Node(int data){ this.data=data; } } public class

java實現mysql資料庫刪改

1.連線資料庫: import java.sql.Connection; import java.sql.DriverManager; public class DBConnection { static String driver = "com.mysql.jdbc.Driver"; s

java實現陣列的刪改

難點1.刪除之後如何更改陣列下標 陣列下標無法更改,此處巧妙使用api中Arrays.copeof: java.util.Arrays.copyOf(T[] original, int newLength) 方法複製指定的陣列,擷取或用null填充(如有必要),以使

JAVA實現單鏈刪改

前言 實現參考: 建議閱讀以上部落格,我的部落格更偏向於[我]能看懂 上面的部落格則偏向於[大家]都能看懂 實現的功能 增加 指定位置插入節點 在末尾增加節點 刪除 刪除指定節點,通過節點資料(假設資料不重複) 刪除指定位置節

[領卓教育]單鏈(linklist)的建立(刪改)輸出

1.連結串列的建立與輸出 執行結果 : 9 8 7 6 5 4 3 2 1 0 #include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct node {

python實現員工信息刪改

python實現員工信息表增刪改查 python實現員工信息表 員工信息表增刪改查 增刪改查 程序說明:模擬實現sql語句的增刪改查關鍵是怎麽去實現這個事情,從哪兒下手,網上的代碼挺多的,這個比較好,最好自己畫一個流程圖,這樣寫起來就比較方便,自己寫了一遍代碼,有問題的可以聯系,剛開始學習py

Elasticsearch 之(43) Java API 實現 ES 的 刪改、聚合分析

package com.es.app; import java.net.InetAddress; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.transport.Transpo

quartzspring整合實現動態任務刪改

本文最初是為了實現定時推送功能,為推送設定一個時間,到時間後推送到雲巴伺服器。 所以這裡會用到quartz定時任務排程,而且我新增一個定時推送,同時就要新增一個定時任務。所以這裡也涉及到了任務的增刪改查。 以下是程式碼實現: 1、定時任務管理類,實現對任務的CURD pa

函數、文件操作實現數據刪改---low版本

腳本 python 首先說明這個腳本很low,目前水平有限,只能實現使用固定的語法對數據進行增刪改查。但是現在腳本不low,怎麽讓明年的我來嘲笑今年的自己需求 a.可進行模糊查詢,語法至少支持下面3種:    select name,age from staff_table where

java 連接mysql刪改

isp gif 數據庫驅動 java 語句 select name nal cti 1、創建mysql測試表 2、按下圖創建3個文件夾與3個類 3、三個類的代碼 PersionDao :目錄(Data Access Object), 數據訪

Django之數據刪改

shortcuts add hid true 代碼 django app 的人 [0 Django數據增刪改查: 上課代碼 from django.shortcuts import render,HttpResponse # Create your views here

Struts2+Spring+Hibernate實現員工管理刪改功能(一)之ssh框架整合

pri support scrip ext ack efault ring src 兩張 前言 轉載請標明出處:http://www.cnblogs.com/smfx1314/p/7795837.html 本項目是我寫的一個練習,目的是回顧ssh框架的整合以及

數據庫--刪改的操作實例

數字電路 查看 varchar 數學 sna 成績 同學 part 及其 一、設置數據庫 包括四個表:學生表(Student)、課程表(Course)、成績表(Score)以及教師信息表(Teacher)。四個表的結構分別如表1-1的表(一)~表(四)所示,數據如表1-2的

Java實現單鏈的快速排序和歸並排序

解法 nod sin fonts 但是 二叉 復雜 sort tno 本文描述了LeetCode 148題 sort-list 的解法。 題目描述如下: Sort a linked list in O(n log n) time using constant space c

Django 【第五篇】ORM單刪改

contains 字典 exc 單表 pytho name屬性 作者 包括 刪除數據 一、添加表記錄 對於單表有兩種方式 # 添加數據的兩種方式 # 方式一:實例化對象就是一條表記錄 Frank_obj = models.Student(name ="海

數據庫 - - 刪改

數據類型 ica 逗號 charset prim odi rds inf sql 表得增刪改查: 1.表介紹: id,name,age,sex稱為字段,其余的,一行內容稱為一條記錄。

基於AT UI實現表格的刪改遇到的坑

data 基於 報錯 color CA cannot bsp 加載 http 基於AT UI實現表格的增刪改查遇到的坑 坑一、表格數據加載的渲染報錯 報錯:Error in render: "TypeError: Cannot read property ‘isC

python實現mongodb的刪改

pmd xxx rsn rpm vfat uwa paul dpf wdf python實現mongodb的增刪改查環境:192.168.122.1 pytho

[領卓教育]順序連結串列(seqlist)的刪改輸出

#include <stdio.h> #include <stdlib.h> #include <string.h> #define N 20 typedef struct { int data[N]; int last ;//記錄順