最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java如何實現(xiàn)單鏈表的增刪改查

 更新時間:2021年04月12日 10:02:06   作者:起個花名好難  
這篇文章主要給大家介紹了關(guān)于Java如何實現(xiàn)單鏈表的增刪改查的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、新建學(xué)生節(jié)點類

Stu_Node節(jié)點包含:

學(xué)號:int num;

姓名:String name;

性別:String gender;

下一個節(jié)點:Stu_Node next;

為了便于打印節(jié)點內(nèi)容需要重寫toString方法

class Stu_Node{
    int num;
    String name;
    String gender;
    Stu_Node next;

    @Override
    public String toString() {
        return "Stu_Node{" +
                "num=" + num +
                ", name='" + name + '\'' +
                ", gender='" + gender + '\'' +
                '}';
    }
    public Stu_Node(int num, String name, String gender){
        this.num=num;
        this.name=name;
        this.gender=gender;
    }
}

二、新建一個操作鏈表的類,實現(xiàn)增刪改查方法

1>創(chuàng)建鏈表的實現(xiàn)類對象

class SingleLinkedList{

}

2>在類里實現(xiàn)尾結(jié)點添加鏈表節(jié)點方法

1、定義一個頭結(jié)點head為空。

2、定義一個節(jié)點變量temp等于頭結(jié)點head。

3、遍歷鏈表找到尾結(jié)點。

while循環(huán),結(jié)束的標(biāo)志是temp的下一個節(jié)點為空,此時終止while(否則程序會陷入死循環(huán)),循環(huán)每進(jìn)行一次要把temp節(jié)點的下一個節(jié)點賦值給temp變量(否則程序會陷入死循環(huán))。

4、使temp節(jié)點的下一個節(jié)點指向新增的節(jié)點。

class SingleLinkedList{
    Stu_Node head = new Stu_Node(0,"null","null");
    //鏈表的尾節(jié)點添加方法
    public void add(Stu_Node node){
        Stu_Node temp = head;
        while(true){
            if (temp.next==null){
                break;
            }
            temp = temp.next;
        }
        temp.next=node;
    }
    
}

按學(xué)號順序插入節(jié)點

1、新建臨時節(jié)點temp

2、新建boolean變量flag用于找到當(dāng)前帶插入節(jié)點的位置

3、while循環(huán)遍歷鏈表找到插入節(jié)點位置,如果temp的下一節(jié)點為空表示鏈表已經(jīng)遍歷完畢此時終止循環(huán);如果temp的下一節(jié)點的學(xué)號等于要插入的節(jié)點學(xué)號,此時將flag變量賦值為true結(jié)束循環(huán)(帶插入的節(jié)點已經(jīng)存在插入失?。蝗绻鹴emp節(jié)點的下一節(jié)點的學(xué)號大于帶插入節(jié)點的學(xué)號,此時temp下一節(jié)點指向的位置就是要插入的位置。每次鏈表遍歷一次節(jié)點要將temp的下一節(jié)點賦值給temp節(jié)點避免死循環(huán)。

4、如果flag為真表示,要插入的節(jié)點已經(jīng)存在,輸出插入失??;如果flag為假,令插入節(jié)點的下一節(jié)點指向temp的下一節(jié)點,temp節(jié)點的下一節(jié)點指向帶插入節(jié)點。(畫圖方便理解,圖自行腦補(bǔ))

public void addOrder(Stu_Node node){
        Stu_Node temp = head;
        boolean flag = false;
        while(true){
            if (temp.next==null)
                break;
            if (temp.next.num >node.num){
                break;
            }
            else if (temp.next.num==node.num){
                flag = true;
                break;
            }
            temp=temp.next;
        }
        if (flag){
            System.out.println("插入失敗");
        }
        else{
            node.next=temp.next;
            temp.next=node;
        }

    }

3>打印鏈表

1、判斷頭結(jié)點的下一個節(jié)點是否為空,如果為空輸出鏈表為空。

2、定義一個temp節(jié)點變量,將頭結(jié)點的指向的節(jié)點賦值給temp。

3、遍歷鏈表打印節(jié)點數(shù)據(jù)。

while循環(huán),打印鏈表節(jié)點,每打印一次temp節(jié)點,使temp節(jié)點的下一節(jié)點賦值給temp避免程序陷入死循環(huán),循環(huán)結(jié)束標(biāo)志是temp的節(jié)點為空(因為temp節(jié)點是頭結(jié)點head的下一節(jié)點)。

class SingleLinkedList{
    Stu_Node head = new Stu_Node(0,"null","null");
    //打印單鏈表
    public void print(){
        if (head.next==null){
            System.out.println("鏈表為空");
        }
        Stu_Node temp = head.next;
        while(true){
            if (temp==null){
                break;
            }
            System.out.println(temp);
            temp=temp.next;
        }
    }
}

4>修改鏈表中的數(shù)據(jù)(假設(shè)學(xué)號為維一值)

1、首先判斷鏈表是否為空

2、定義一個臨時變量temp將頭結(jié)點賦值給temp

3、定義一個Boolean變量flag用于判斷鏈表中是否存在要修改的節(jié)點。

4、遍歷鏈表,while循環(huán)查詢要修改的節(jié)點,每查詢一次就將temp變量賦值為temp的next節(jié)點,如果查詢到要修改的節(jié)點將flag變量賦值為真、終止while循環(huán),如果temp的下一節(jié)點為空表示未找到要修改的節(jié)點變量,此時也終止循環(huán)。

5、判斷flag值為真代表找到當(dāng)前要修改的節(jié)點,將要新的節(jié)點的值賦值給要修改節(jié)點的值;如果flag為假表示未找到當(dāng)前節(jié)點。

class SingleLinkedList{
    Stu_Node head = new Stu_Node(0,"null","null");
    //鏈表的修改方法
    public void update(Stu_Node newnode){
        if (head.next==null){
            System.out.println("鏈表為空");
        }
        Stu_Node temp = head;
        boolean flag = false;
        while (true){
            if (temp.next==null){
                break;
            }
            if (temp.num== newnode.num){
                flag = true;
                break;
            }
            temp=temp.next;
        }
        if (flag){
            temp.name=newnode.name;
            temp.gender= newnode.gender;
        }
        else
            System.out.println("當(dāng)前節(jié)點不存在,無法修改!");
    }
}

5>依據(jù)學(xué)號刪除節(jié)點

1、定義一個臨時節(jié)點temp,將頭結(jié)點賦值給temp

2、定義一個boolean型變量flag用于判斷是否找到當(dāng)前鏈表中待刪除的節(jié)點

3、while循環(huán)遍歷當(dāng)前鏈表,每遍歷一次節(jié)點,將temp節(jié)點的下一節(jié)點賦值給temp避免循環(huán),如果待刪除節(jié)點的學(xué)號跟要刪除的節(jié)點的學(xué)號一至,將flag賦值為true終止while循環(huán),否則持續(xù)遍歷鏈表直到temp節(jié)點的下一節(jié)點為空終止循環(huán)。

4、如果flag為真,代表找到當(dāng)前要刪除的節(jié)點,將temp的下一節(jié)點指向temp下一節(jié)點的下一節(jié)點。,如果flag為假代表找不到待刪除的節(jié)點。

class SingleLinkedList{
    Stu_Node head = new Stu_Node(0,"null","null");
    //刪除鏈表的節(jié)點
    public void delete(int no){
        Stu_Node temp = head;
        boolean flag = false;
        while(true){
            if (temp.next==null)
                break;
            if (temp.next.num==no){
                flag=true;
                break;
            }
            temp = temp.next;
        }
        if (flag){
            temp.next=temp.next.next;
        }
        else{
            System.out.println("未找到要刪除的鏈表");
        }

    }
}

三、新建操作鏈表類的實現(xiàn)類實現(xiàn)其增刪改查功能

1、新建操作鏈表類的實現(xiàn)類對象

2、新建多個待操作的節(jié)點

3、使用新建的鏈表操作類對象進(jìn)行增刪改查功能

完整代碼如下:

public class linkedlist {
    public static void main(String[] args) {
        SingleLinkedList list = new SingleLinkedList();
        Stu_Node node1 = new Stu_Node(1903210086,"小明","男");
        Stu_Node node2 = new Stu_Node(1903210087,"小花","女");
        Stu_Node node3 = new Stu_Node(1903210088,"小黃","男");
        Stu_Node node4 = new Stu_Node(1903210089,"小翠","女");
        list.add(node1);
        list.add(node4);
        list.add(node3);
        list.add(node2);
        list.print();
        System.out.println("----------------------");
        System.out.println("按學(xué)號順序插入節(jié)點");
        SingleLinkedList list_1= new SingleLinkedList();
        list_1.addOrder(node1);
        list_1.addOrder(node4);
        list_1.addOrder(node3);
        list_1.addOrder(node2);
        list_1.print();
        System.out.println("-----------------------");
        Stu_Node node5 = new Stu_Node(1903210089,"賈明","男");
        list.update(node5);
        list.print();
        System.out.println("#######################");
        System.out.println("刪除之后的鏈表");
        list.delete(1903210088);
        list.print();
    }
}
class Stu_Node{
    int num;
    String name;
    String gender;
    Stu_Node next;

    @Override
    public String toString() {
        return "Stu_Node{" +
                "num=" + num +
                ", name='" + name + '\'' +
                ", gender='" + gender + '\'' +
                '}';
    }
    public Stu_Node(int num, String name, String gender){
        this.num=num;
        this.name=name;
        this.gender=gender;
    }
}

class SingleLinkedList{
    Stu_Node head = new Stu_Node(0,"null","null");
    //鏈表的尾節(jié)點添加方法
    public void add(Stu_Node node){
        Stu_Node temp = head;
        while(true){
            if (temp.next==null){
                break;
            }
            temp = temp.next;
        }
        temp.next=node;
    }
    public void addOrder(Stu_Node node){
        Stu_Node temp = head;
        boolean flag = false;
        while(true){
            if (temp.next==null)
                break;
            if (temp.next.num >node.num){
                break;
            }
            else if (temp.next.num==node.num){
                flag = true;
                break;
            }
            temp=temp.next;
        }
        if (flag){
            System.out.println("插入失敗");
        }
        else{
            node.next=temp.next;
            temp.next=node;
        }

    }
    public void print(){
        if (head.next==null){
            System.out.println("鏈表為空");
        }
        Stu_Node temp = head.next;
        while(true){
            if (temp==null){
                break;
            }
            System.out.println(temp);
            temp=temp.next;
        }
    }
    public void update(Stu_Node newnode){
        if (head.next==null){
            System.out.println("鏈表為空");
        }
        Stu_Node temp = head;
        boolean flag = false;
        while (true){
            if (temp.next==null){
                break;
            }
            if (temp.num== newnode.num){
                flag = true;
                break;
            }
            temp=temp.next;
        }
        if (flag){
            temp.name=newnode.name;
            temp.gender= newnode.gender;
        }
        else
            System.out.println("當(dāng)前節(jié)點不存在,無法修改!");
    }
    public void delete(int no){
        Stu_Node temp = head;
        boolean flag = false;
        while(true){
            if (temp.next==null)
                break;
            if (temp.next.num==no){
                flag=true;
                break;
            }
            temp = temp.next;
        }
        if (flag){
            temp.next=temp.next.next;
        }
        else{
            System.out.println("未找到要刪除的鏈表");
        }

    }
}

總結(jié)

到此這篇關(guān)于Java如何實現(xiàn)單鏈表增刪改查的文章就介紹到這了,更多相關(guān)Java單鏈增刪改查內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用SpringBoot 工廠模式自動注入到Map

    使用SpringBoot 工廠模式自動注入到Map

    這篇文章主要介紹了使用SpringBoot 工廠模式自動注入到Map,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • MyBatis測試報錯:Cannot?determine?value?type?from?string?'xxx'的解決辦法

    MyBatis測試報錯:Cannot?determine?value?type?from?string?&a

    這篇文章主要給大家介紹了關(guān)于MyBatis測試報錯:Cannot?determine?value?type?from?string?'xxx'的解決辦法,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • SpringMVC深入講解文件的上傳下載實現(xiàn)

    SpringMVC深入講解文件的上傳下載實現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了springMVC實現(xiàn)文件上傳和下載的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Spring Boot+Mybatis+Pagehelper分頁實現(xiàn)

    Spring Boot+Mybatis+Pagehelper分頁實現(xiàn)

    本篇文章主要講述的是Spring Boot+Mybatis+Pagehelper分頁實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Java使用Validation自定義Double類型屬性校驗

    Java使用Validation自定義Double類型屬性校驗

    這篇文章主要為大家詳細(xì)介紹了Java如何使用Validation自定義Double類型屬性校驗,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2024-11-11
  • JAVA NIO實現(xiàn)簡單聊天室功能

    JAVA NIO實現(xiàn)簡單聊天室功能

    這篇文章主要為大家詳細(xì)介紹了JAVA NIO實現(xiàn)簡單聊天室功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Java實現(xiàn)簡單的飛機(jī)大戰(zhàn)游戲(控制主飛機(jī)篇)

    Java實現(xiàn)簡單的飛機(jī)大戰(zhàn)游戲(控制主飛機(jī)篇)

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)簡單的飛機(jī)大戰(zhàn)游戲,控制主飛機(jī),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • java客戶端Jedis操作Redis Sentinel 連接池的實現(xiàn)方法

    java客戶端Jedis操作Redis Sentinel 連接池的實現(xiàn)方法

    下面小編就為大家?guī)硪黄猨ava客戶端Jedis操作Redis Sentinel 連接池的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • 詳解Java如何實現(xiàn)有效的并發(fā)處理

    詳解Java如何實現(xiàn)有效的并發(fā)處理

    隨著互聯(lián)網(wǎng)的蓬勃發(fā)展,現(xiàn)代軟件系統(tǒng)對于并發(fā)性能的要求越來越高,如何學(xué)習(xí)和掌握并發(fā)編程技術(shù)成為了Java開發(fā)人員必備的技能之一,本文主要介紹了Java并發(fā)編程的相關(guān)概念、原理和實踐技巧,感興趣的可以了解下
    2023-11-11
  • java處理異常Exception的方法總結(jié)

    java處理異常Exception的方法總結(jié)

    在Java中處理異常并不是一個簡單的事情,不僅僅初學(xué)者很難理解,即使一些有經(jīng)驗的開發(fā)者也需要花費很多時間,本文為大家整理了java處理異常Exception的一些常用方法,希望對大家有所幫助
    2023-09-09

最新評論

新野县| 西乌珠穆沁旗| 全南县| 姚安县| 嵩明县| 宁德市| 永登县| 盘山县| 泸溪县| 延安市| 丰县| 鲁甸县| 农安县| 淮阳县| 泾源县| 东台市| 东阿县| 隆子县| 延长县| 伊宁市| 双辽市| 苍山县| 汕尾市| 新丰县| 天峨县| 云阳县| 新乡县| 长泰县| 桑植县| 亚东县| 贡嘎县| 西盟| 视频| 洛浦县| 洞头县| 改则县| 民丰县| 浦县| 西盟| 吉首市| 德惠市|