国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【算法基礎(chǔ)】(二)數(shù)據(jù)結(jié)構(gòu) --- 單鏈表

這篇具有很好參考價值的文章主要介紹了【算法基礎(chǔ)】(二)數(shù)據(jù)結(jié)構(gòu) --- 單鏈表。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【算法基礎(chǔ)】(二)數(shù)據(jù)結(jié)構(gòu) --- 單鏈表

?個人主頁:bit me
?當(dāng)前專欄:算法基礎(chǔ)
??專欄簡介:該專欄主要更新一些基礎(chǔ)算法題,有參加藍(lán)橋杯等算法題競賽或者正在刷題的鐵汁們可以關(guān)注一下,互相監(jiān)督打卡學(xué)習(xí) ?? ?? ??

實現(xiàn)一個單鏈表,鏈表初始為空,支持三種操作:

  1. 向鏈表頭插入一個數(shù);
  2. 刪除第 k 個插入的數(shù)后面的數(shù);
  3. 在第 k 個插入的數(shù)后插入一個數(shù)。

現(xiàn)在要對該鏈表進(jìn)行 M 次操作,進(jìn)行完所有操作后,從頭到尾輸出整個鏈表。

注意:

題目中第 k 個插入的數(shù)并不是指當(dāng)前鏈表的第 k 個數(shù)。例如操作過程中一共插入了 n 個數(shù),則按照插入的時間順序,這 n 個數(shù)依次為:第 1 個插入的數(shù),第 2 個插入的數(shù),…第 n 個插入的數(shù)。

輸入格式:

第一行包含整數(shù) M,表示操作次數(shù)。
?
接下來 M 行,每行包含一個操作命令,操作命令可能為以下幾種:
?

  • H x,表示向鏈表頭插入一個數(shù) x。
  • D k,表示刪除第 k 個插入的數(shù)后面的數(shù)(當(dāng) k 為 0 時,表示刪除頭結(jié)點)。
  • I k x,表示在第 k 個插入的數(shù)后面插入一個數(shù) x(此操作中 k 均大于 0)。

輸出格式:

共一行,將整個鏈表從頭到尾輸出。

數(shù)據(jù)范圍:

1≤M≤100000
?
所有操作保證合法。

輸入樣例:

10
H 9
I 1 1
D 1
D 0
H 6
I 3 6
I 4 5
I 4 5
I 3 4
D 6

輸出樣例:

6 4 6 5

思路:

  1. 第一個操作:刪除頭結(jié)點,我們可以直接弄一個第三方,然后輪流轉(zhuǎn)移賦值即可,前面鏈表文章寫了很多
  2. 第二步和第一步一樣的操作
  3. 第三個操作就直接讓他等于下一個節(jié)點就行
  1. 向鏈表頭插入一個數(shù);
public static void add_head(int x){
    e[index] = x;
    ne[index] = head;
    head = index++;
}
  1. 刪除第 k 個插入的數(shù)后面的數(shù);
public static void remove(int k){
    ne[k] = ne[ne[k]];
}
  1. 在第 k 個插入的數(shù)后插入一個數(shù)。
public static void add(int k,int x){
    e[index] = x;
    ne[index] = ne[k];
    ne[k] = index++;
}
  1. 主函數(shù)對他們的分類操作
public static void main(String[] args){
    Scanner scan = new Scanner(System.in);
    int m = scan.nextInt();

    init();//初始化
    while(m -- > 0){
        //因為java中沒有輸入一個字符,所以用字符串轉(zhuǎn)字符
        String s = scan.next();
        char op = s.charAt(0);

        if(op == 'H'){
            int x = scan.nextInt();
            add_head(x);
        }else if(op == 'D'){
            int k = scan.nextInt();
            if(k == 0) head = ne[head];
            else remove(k-1);
        }else {
            int k = scan.nextInt();
            int x = scan.nextInt();
            add(k-1,x);
        }
    }
    for(int i = head;i != -1;i = ne[i] ){
        System.out.print(e[i] +  " ");
    }

}

附上總的代碼文章來源地址http://www.zghlxwxcb.cn/news/detail-416465.html

public class Demo3 {
        static int[] e = new int[100010];
        static int[] ne = new int[100010];
        static int index,head;
        public static void init(){
            index = 0;
            head = -1;
        }
        //H向鏈表頭插入一個數(shù)x;
        public static void add_head(int x){
            e[index] = x;
            ne[index] = head;
            head = index++;
        }
        //I在第k位數(shù)后面插入一個數(shù)x
        public static void add(int k,int x){
            e[index] = x;
            ne[index] = ne[k];
            ne[k] = index++;
        }
        //D刪除第k個數(shù)后面得數(shù)
        public static void remove(int k){
            ne[k] = ne[ne[k]];
        }
        public static void main(String[] args){
            Scanner scan = new Scanner(System.in);
            int m = scan.nextInt();

            init();//初始化
            while(m -- > 0){
                //因為java中沒有輸入一個字符,所以用字符串轉(zhuǎn)字符
                String s = scan.next();
                char op = s.charAt(0);

                if(op == 'H'){
                    int x = scan.nextInt();
                    add_head(x);
                }else if(op == 'D'){
                    int k = scan.nextInt();
                    if(k == 0) head = ne[head];
                    else remove(k-1);
                }else {
                    int k = scan.nextInt();
                    int x = scan.nextInt();
                    add(k-1,x);
                }
            }
            for(int i = head;i != -1;i = ne[i] ){
                System.out.print(e[i] +  " ");
            }

        }
}

到了這里,關(guān)于【算法基礎(chǔ)】(二)數(shù)據(jù)結(jié)構(gòu) --- 單鏈表的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【數(shù)據(jù)結(jié)構(gòu)與算法】單鏈表的排序算法(選擇,冒泡,遞歸)

    【數(shù)據(jù)結(jié)構(gòu)與算法】單鏈表的排序算法(選擇,冒泡,遞歸)

    目錄 選擇排序 冒泡排序 快速排序 合并兩條鏈表并排序 選擇排序 鏈表的選擇排序思想與數(shù)組的排序類似,但是鏈表需要先找到里面最小或者最大的值,然后將這個值用改鏈語句進(jìn)行操作 我們先看這個改鏈語句的操作(min是筆者打錯了應(yīng)該是max,但是圖已經(jīng)畫好了就沒有改)

    2024年02月04日
    瀏覽(32)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】單鏈表的插入和刪除

    ?? 本文由 程序喵正在路上 原創(chuàng),CSDN首發(fā)! ?? 系列專欄: 數(shù)據(jù)結(jié)構(gòu)與算法 ?? 首發(fā)時間:2022年9月21日 ?? 歡迎關(guān)注??點贊??收藏??留言?? ?? 一以貫之的努力 不得懈怠的人生 眾所周知,順序表中的每個結(jié)點中只存放數(shù)據(jù)元素,其優(yōu)缺點為: 優(yōu)點:可隨機(jī)存取,存儲

    2024年02月07日
    瀏覽(25)
  • 【數(shù)據(jù)結(jié)構(gòu)】C--單鏈表(小白入門基礎(chǔ)知識)

    【數(shù)據(jù)結(jié)構(gòu)】C--單鏈表(小白入門基礎(chǔ)知識)

    前段時間寫了一篇關(guān)于順序表的博客,http://t.csdn.cn/0gCRp 順序表在某些時候存在著一些不可避免的缺點: 問題: 1. 中間 / 頭部的插入刪除,時間復(fù)雜度為 O(N) 2. 增容需要申請新空間,拷貝數(shù)據(jù),釋放舊空間。會有不小的消耗。 3. 增容一般是呈 2 倍的增長,勢必會有一定的空間

    2024年02月16日
    瀏覽(23)
  • 【算法與數(shù)據(jù)結(jié)構(gòu)】 C語言實現(xiàn)單鏈表隊列詳解

    【算法與數(shù)據(jù)結(jié)構(gòu)】 C語言實現(xiàn)單鏈表隊列詳解

    前面我們學(xué)習(xí)了隊列的順序表的實現(xiàn),本節(jié)將用單鏈表實現(xiàn)隊列。 隊列也可以數(shù)組和鏈表的結(jié)構(gòu)實現(xiàn), 使用鏈表的結(jié)構(gòu)實現(xiàn)更優(yōu)一些,因為如果使用數(shù)組的結(jié)構(gòu),出隊列在數(shù)組頭上出數(shù)據(jù),效率會比較低 。下面我們先復(fù)習(xí)一下隊列的基本概念: 隊列:只允許在一端進(jìn)行插入

    2024年04月11日
    瀏覽(94)
  • 【數(shù)據(jù)結(jié)構(gòu)】單鏈表經(jīng)典算法題的巧妙解題思路

    【數(shù)據(jù)結(jié)構(gòu)】單鏈表經(jīng)典算法題的巧妙解題思路

    目錄 題目 1.移除鏈表元素 2.反轉(zhuǎn)鏈表 3.鏈表的中間節(jié)點 4.合并兩個有序鏈表 5.環(huán)形鏈表的約瑟夫問題 解析 題目1:創(chuàng)建新鏈表 題目2:巧用三個指針 題目3:快慢指針 題目4:哨兵位節(jié)點 題目5:環(huán)形鏈表 ? 介紹完了單鏈表,我們這次來說幾個經(jīng)典的題目,本篇的題目銜接下一

    2024年04月28日
    瀏覽(41)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】單鏈表的增刪查改(附源碼)

    【數(shù)據(jù)結(jié)構(gòu)與算法】單鏈表的增刪查改(附源碼)

    ? 這么可愛的貓貓不值得點個贊嗎 ???? 目錄 一.鏈表的概念和結(jié)構(gòu) 二.單鏈表的邏輯結(jié)構(gòu)和物理結(jié)構(gòu) 1.邏輯結(jié)構(gòu) ?2.物理結(jié)構(gòu) 三.結(jié)構(gòu)體的定義 四.增加 1.尾插? ?SListpushback 2.頭插? SListpushfront 五.刪除 1.尾刪? SListpopback 2.頭刪? SListpopfront 六.查找? 插入? 釋放? ?打印 1.查找

    2024年02月02日
    瀏覽(89)
  • 單鏈表的建立(頭插法、尾插法)(數(shù)據(jù)結(jié)構(gòu)與算法)

    單鏈表的建立(頭插法、尾插法)(數(shù)據(jù)結(jié)構(gòu)與算法)

    如果要把很多個數(shù)據(jù)元素存到一個單鏈表中,如何操作? 1.初始化一個單鏈表 2. 每次取一個數(shù)據(jù)元素,插入到表尾/表頭 尾插法建立的單鏈表元素順序與輸入數(shù)據(jù)集合的順序相同,即按照輸入數(shù)據(jù)的順序排列。 使用尾插法建立單鏈表的一個常見應(yīng)用是在計算機(jī)科學(xué)中進(jìn)行數(shù)據(jù)

    2024年04月11日
    瀏覽(24)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】深入淺出:單鏈表的實現(xiàn)和應(yīng)用

    【數(shù)據(jù)結(jié)構(gòu)與算法】深入淺出:單鏈表的實現(xiàn)和應(yīng)用

    ? ??博客主頁:青竹霧色間. ??博客制作不易歡迎各位??點贊+?收藏+?關(guān)注 ?? 人生如寄,多憂何為? ? 目錄 前言 單鏈表的基本概念 節(jié)點 頭節(jié)點 尾節(jié)點 單鏈表的基本操作 創(chuàng)建單鏈表 頭插法: 尾插法: 插入(增)操作 ?刪除(刪)操作: 查找(查)操作: 修改(改

    2024年02月08日
    瀏覽(24)
  • C語言簡單的數(shù)據(jù)結(jié)構(gòu):單鏈表的有關(guān)算法題(2)

    C語言簡單的數(shù)據(jù)結(jié)構(gòu):單鏈表的有關(guān)算法題(2)

    接著我們介紹后面的三道題,雖然代碼變多了但我們的思路更加通順了 題目鏈接:https://leetcode.cn/problems/merge-two-sorted-lists/ 創(chuàng)建新鏈表,遍歷原鏈表,將節(jié)點值小的進(jìn)行尾插到新鏈表中 這里要多次進(jìn)行對NULL的判斷,開始傳入列表,中間newHead的判斷,循環(huán)出來一個為NULL的判斷

    2024年04月15日
    瀏覽(92)
  • 【一起學(xué)數(shù)據(jù)結(jié)構(gòu)與算法】快速教你了解并實現(xiàn)單鏈表

    【一起學(xué)數(shù)據(jù)結(jié)構(gòu)與算法】快速教你了解并實現(xiàn)單鏈表

    此篇是對單鏈表知識的學(xué)習(xí)和實現(xiàn),基本上大體的方法實現(xiàn)和思路都已經(jīng)表達(dá),如果有不對的地方,還請各位大佬多多指教! 單鏈表是一種鏈?zhǔn)酱嫒〉臄?shù)據(jù)結(jié)構(gòu),用一組地址任意的存儲單元存放線性表中的數(shù)據(jù)元素。鏈表中的數(shù)據(jù)是以結(jié)點來表示的,每個結(jié)點的構(gòu)成:元素

    2024年02月19日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包