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
quartz與spring整合實現動態任務增刪改查
本文最初是為了實現定時推送功能,為推送設定一個時間,到時間後推送到雲巴伺服器。 所以這裡會用到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 ;//記錄順