JAVA模擬新增順序表及單鏈表
最近在回顧大學(xué)學(xué)的數(shù)據(jù)結(jié)構(gòu),這里給大家用java模擬順序表和單鏈表的新增
1順序表新增
/** * 順序表 * * @author cjd * */ public class ArrayList { private Object[] elementData; // 底層是一個(gè)數(shù)組,目前還沒有確定長(zhǎng)度 private int size; // 不是數(shù)組分配了幾個(gè)空間,而是元素的個(gè)數(shù) public ArrayList() { this(4); } public ArrayList(int initialCapacity) { elementData = new Object[initialCapacity]; } // 返回線性表的大小,即數(shù)據(jù)元素的個(gè)數(shù)。 public int size() { return size; } // 返回線性表中序號(hào)為 i 的數(shù)據(jù)元素@Override public Object get(int i) { return elementData[i]; } // 將數(shù)據(jù)元素 e 插入到線性表中 i 號(hào)位置 public void add(int i, Object e) { // 擴(kuò)容 elementData = Arrays.copyOf(elementData, elementData.length*2); if (size == elementData.length) {//數(shù)組滿了,就擴(kuò)容 Object[] elementDatanew = new Object[elementData.length * 2];//新創(chuàng)建一個(gè)新的數(shù)組,長(zhǎng)度是舊數(shù)組2倍 for (int j = 0; j < elementData.length; j++) { elementDatanew[j] = elementData[j];//將舊數(shù)組的數(shù)據(jù)拷貝到新數(shù)組 } elementData = elementDatanew;//讓elementData指向新數(shù)組 } //最后位后移 for(int j=size;j>i;j--){ elementData[j]=elementData[j-1]; } // 給數(shù)組賦值 elementData[i] = e; // 元素個(gè)數(shù)+1 size++; } // 將數(shù)據(jù)元素 e 插入到線性表末尾 public void add(Object e) { this.add(size,e);//最后位新增 } public String toString() { if (size == 0) { return "[]"; } StringBuilder stringBuilder = new StringBuilder("["); for (int i = 0; i < size; i++) { if (i == 0) stringBuilder.append("" + elementData[i]); else stringBuilder.append("," + elementData[i]); } stringBuilder.append("]"); return stringBuilder.toString(); } }
測(cè)試mian
public class test { public static void main(String[] args) { ArrayList list=new ArrayList(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); list.add(6); list.add(3,9); System.out.println("實(shí)現(xiàn)順序表新增"+list.toString()); } }
2單鏈表新增
實(shí)體類
public class Node { Object data;//要存儲(chǔ)的數(shù)據(jù) Node next; public Node(Object data, Node next) { super(); this.data = data; } public Node() { super(); } public Object getData() { return data; } public void setData(Object data) { this.data = data; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } }
方法
/** * 單鏈表表 * * @author cjd * */ public class SingleLinkedList { private Node head = new Node();//頭結(jié)點(diǎn),不存儲(chǔ)數(shù)據(jù),為了編程方便 private int size;//一共有幾個(gè)結(jié)點(diǎn) // 表的大小,即數(shù)據(jù)元素的個(gè)數(shù)。 public int size() { return size; } // 返回單鏈表中序號(hào)為 i 的數(shù)據(jù)元素 public Object get(int i) { //遍歷結(jié)點(diǎn) Node p=head;//找到前一個(gè)結(jié)點(diǎn),從head結(jié)點(diǎn)開始 for(int j=0;j<i;j++){ p=p.next; } return p.data; } // 將數(shù)據(jù)元素 e 插入到單鏈表中 i 號(hào)位置 public void add(int i, Object e) { //遍歷結(jié)點(diǎn) Node p=head;//找到前一個(gè)結(jié)點(diǎn),從head結(jié)點(diǎn)開始 for(int j=0;j<i;j++){ p=p.next;//移動(dòng)指針到下一個(gè)結(jié)點(diǎn) } //新創(chuàng)建一個(gè)結(jié)點(diǎn) Node newNode = new Node(); newNode.data=e; newNode.next=p.next; p.next=newNode;//指明新結(jié)點(diǎn)的直接后繼結(jié)點(diǎn) // 個(gè)數(shù)+1 size++; } // 將數(shù)據(jù)元素 e 插入到單鏈表末尾 public void add(Object e) { this.add(size,e);//最后位新增 } public String toString() { if (size == 0) { return "[]"; } Node p=head.next;//找到前一個(gè)結(jié)點(diǎn),從head結(jié)點(diǎn)開始 StringBuilder stringBuilder= new StringBuilder("["); for (int i = 0; i < size; i++) { if (i == 0) stringBuilder.append("" + p.data); else stringBuilder.append("," + p.data); //移動(dòng)指針到下一個(gè)結(jié)點(diǎn) p=p.next; } stringBuilder.append("]"); return stringBuilder.toString(); } }
測(cè)試類
public class test { public static void main(String[] args) { SingleLinkedList singlist=new SingleLinkedList(); singlist.add(1); singlist.add(2); singlist.add(3); singlist.add(4); singlist.add(5); singlist.add(6); singlist.add(3,9); System.out.println("實(shí)現(xiàn)單鏈表新增"+singlist.toString()); } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JAVA?兩個(gè)類同時(shí)實(shí)現(xiàn)同一個(gè)接口的方法(三種方法)
在Java中,兩個(gè)類同時(shí)實(shí)現(xiàn)同一個(gè)接口是非常常見的,接口定義了一組方法,實(shí)現(xiàn)接口的類必須提供這些方法的具體實(shí)現(xiàn),以下將展示如何實(shí)現(xiàn)這一要求,并提供具體的代碼示例,需要的朋友可以參考下2024-08-08詳解如何把Java中if-else代碼重構(gòu)成高質(zhì)量代碼
這篇文章主要介紹了詳解如何把Java中if-else代碼重構(gòu)成高質(zhì)量代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11Java中Optional.of()方法及源碼解析(非常詳細(xì)!)
這篇文章主要給大家介紹了關(guān)于Java中Optional.of()方法及源碼解析的相關(guān)資料,Java中java.util .Optional類的of()方法用于獲得該Optional類中具有指定類型的指定值的一個(gè)實(shí)例,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06IDEA?服務(wù)器熱部署圖文詳解(On?Update?action/On?frame?deactivation)
這篇文章主要介紹了IDEA?服務(wù)器熱部署詳解(On?Update?action/On?frame?deactivation),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03Java基礎(chǔ)之final關(guān)鍵字作用案例
這篇文章主要介紹了Java基礎(chǔ)之final關(guān)鍵字作用案例,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07java多線程之Future和FutureTask使用實(shí)例
這篇文章主要介紹了java多線程之Future和FutureTask使用實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09SpringCloud @FeignClient參數(shù)的用法解析
這篇文章主要介紹了SpringCloud @FeignClient參數(shù)的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10Java如何獲取resources下的文件路徑和創(chuàng)建臨時(shí)文件
這篇文章主要介紹了Java如何獲取resources下的文件路徑和創(chuàng)建臨時(shí)文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12Java中常用輸出方式(print() println() printf())
這篇文章主要介紹了Java中常用輸出方式(print() println() printf()),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09