1. 程式人生 > >連結串列資料結構特點

連結串列資料結構特點

引言

最近在重溫連結串列的演算法題,發現很久沒做,竟毫無思路。其中的一些基本套路都已經忘了,其實我想到其實是自己沒有總結連結串列這個資料結構的一些tricks.

連結串列資料結構的特點

為了簡便,這裡以單鏈表為例子說明,為了便於讀者理解,這裡和陣列作為對比。

在陣列中,是通過索引訪問元素的,但是不要小看索引,好多精妙的演算法都是利用了這個索引玩花樣。但是連結串列不能,只能通過鏈一個一個的找。這個說明了連結串列的優勢不在快速找到元素。而雜湊表,是通過雜湊函式將任意Key變成了索引,可以看成是索引的一種應用。

連結串列的優勢在於定點刪除/插入元素,因為連結串列影響的最多就是給定元素的左右的兩個鏈,但是陣列卻做不到,陣列由於大小固定,刪除操作會移動所有的元素。

這裡就有個trick, 由於改變右邊鏈的時候,如果不先儲存右邊的結點,那麼右邊的結點的元素就找不到了,所以改變結點的指標的時候,會先暫存下一個結點
另外單鏈表找不到它的父親結點(上一個結點),所以會經常用prev來暫存上一個結點。

總而言之,連結串列這一資料結構和陣列的差別還是挺大的,屬於兩種不同的思維方式。

相關推薦

連結串列資料結構特點

引言 最近在重溫連結串列的演算法題,發現很久沒做,竟毫無思路。其中的一些基本套路都已經忘了,其實我想到其實是自己沒有總結連結串列這個資料結構的一些tricks. 連結串列資料結構的特點 為了簡便,這裡以單鏈表為例子說明,為了便於讀者理解,這裡和陣列作為對比

連結串列資料結構

  第五章 連結串列      連結串列資料結構      建立連結串列      雙向連結串列      迴圈連結串列      小結      這一章你將會學會如何實現和使用連結串列這種動態的資料結構,這意味著我們可以從中任意新增或移除項,它會按需進行擴張。      本章內容      連結串

外部類與內部類之間的訪問(程式碼是連結串列資料結構為例)

外部類與內部類之間的訪問 內部類相當於外部類的一個成員,和其它成員處於同一個級別,因此可以在內部類中直接訪問外部類的各個成員(包括私有屬性)。 需要注意的是在外部類中要想訪問內部類的各個成員(這裡也包括內部類的私有屬性)就必須先例項化內部類,然後才能訪問。對

另類的連結串列資料結構以及演算法

一般情況下,我們使用連結串列無非就是在連結串列結點中儲存該連結串列中下一個元素的指標.如果為了刪除方便,可能需要儲存前一個元素的指標,也就是雙向連結串列,這樣在刪除一個結點的時候就可以很快的定位到前面和後面的結點,並且改變它們相應的指向.在這些操作裡面,指向連結串列元素的指標無疑是最關鍵的資料.考慮這

"雙向連結串列"-資料結構演算法-之通俗易懂,完全解析

1.概念的引入 相信大家都使用過各種集合來進行開發,但是較少的人會去研究其內部的儲存原理和呼叫方法,今天我就來帶大家一起學習資料結構演算法:雙向連結串列 首先我們先來了解什麼是快取,以及資料在記憶體中的儲存方式. 1.快取是什麼 如果cup讀取資料時

redis list 連結串列資料結構

List (連結串列) Redis 連結串列是簡單的字串列表,按照插入順序排序,在使用時,可以新增一個元素到列表的頭部(左邊)或者尾部(右邊),list 最多可儲存 232 - 1 個元素 (4294967295, 每個列表可儲存40多億)。 redis list 常用命令

java 陣列與連結串列的巢狀使用(陣列連結串列--資料結構)

用處:連結串列陣列一般用於在不借用資料庫的情況下,對於大量資料的臨時儲存,來實現快速查詢的功能。 巢狀實現思想:上一篇中已經講了連結串列的建立和操作,借用上一篇中的部分來進行說明。上一篇中的類LinkList 是連結串列類,類中有對連結串列的各種操作,要把連結串列和陣列聯絡

NOJ-建立二叉樹的二叉連結串列儲存結構-西工大資料結構

    今天上課講完二叉樹的第一節之後,回到宿舍就把二叉樹的第一道題做了。如有錯誤,請務必指正。    題目如下:    分析一下題目,就是用遞迴建立一個二叉樹,在按照先序遍歷輸出。這裡我採用的方法是每次讀入兩個資料,當第一個資料是字母,若第二個資料是‘(’,說明這個根有左支

java 連結串列的氣泡排序,排序之後連結串列結構是已經發生變化的,可以直接根據head+temp +next節點列印全部

package interview.datastructure; /** * 實現連結串列的插入和刪除結點的操作 */ public class Link_list { //定義一個結點 class Node { Node next = null; int d

二叉樹-連結串列儲存結構及其簡單演算法

適用於層次結構的資料(大部分演算法用遞迴思想) #include <stdio.h> #define Max 100 結構體 typedef struct TNode{ int data; struct Node * lchild;//左孩子結點

利用棧的資料結構特點完成加減乘除四則運算

// // main.cpp // 利用棧的資料結構特點完成表示式的運算 // // Created by 柯木超 on 2018/12/4. // Copyright © 2018 柯木超. All rights reserved. // #include <iostream&g

藍橋杯:連結串列資料求和操作

題目描述 讀入10個複數,建立對應連結串列,然後求所有複數的和。  輸入 無 輸出 無 樣例輸入 1 2 1 3 4 5 2 3 3 1 2 1 4 2 2 2 3 3 1 1 樣例輸出 23+23i 程式設計程式碼

【菜鳥進階】連結串列_C 結構體 共用體 列舉_遞推遞迴

座右銘 這些年我一直提醒自己一件事情,千萬不要自己感動自己。大部分人看似的努力,不過是愚蠢導致的。什麼熬夜看書到天亮,連續幾天只睡幾小時,多久沒放假了,如果這些東西也值得誇耀,那麼富士康流水線上任何一個人都比你努力多了。人難免天生有自憐的情緒,唯有時刻保持清醒,才能看清

ALGO-107演算法訓練 9-7連結串列資料求和操作 (c++)

  演算法訓練 9-7連結串列資料求和操作   時間限制:1.0s   記憶體限制:512.0MB        讀入10個複數,建立對應連結串列,然後求所有複數的和。 樣例輸入 1 2 1 3 4 5 2

單鏈表定義-(線性表的連結串列儲存結構)

線性表分為:順序儲存結構和連儲存結構 順序儲存結構的優點:     1.空間利用率高,幾乎不需要額外的空間開銷.     2.資料的邏輯結構和物理結構完全一致.     3.結點地址計算的時間和線性表的規模大小無關.     4.可以用一維陣列實現儲存. 但是有兩個致命的缺

C語言實現的連結串列結構

#include"stdlib.h" //棧是一種先進後出的結構,如果用順序儲存結構來實現,進來的元素插入尾端 //出去的元素從尾端刪除,由於順序結構可以隨機訪問,比較容易實現。 //如果用連結串列來實現,會增大額外的指標開銷,進來的元素插入頭端,出去的元素從頭端刪除 //兩者入棧和出棧的時

PAT乙級 1025. 反轉連結串列 (25)--結構體、容器vector、容器pair

給定一個常數K以及一個單鏈表L,請編寫程式將L中每K個結點反轉。例如:給定L為1→2→3→4→5→6,K為3,則輸出應該為3→2→1→6→5→4;如果K為4,則輸出應該為4→3→2→1→5→6,即最後不到K個元素不反轉。 輸入格式: 每個輸入包含1個測試用例。每個測試用例第1行給出第1個結點的地址、結

圖的十字連結串列儲存結構

圖的儲存不外乎一個記錄圖中頂點的陣列,一個表示弧的結構.十字連結串列的表示如下: typedef char Graph_style; typedef struct Graph_node{ //弧結點 int itail; //該弧的尾頂點所在頂點陣列中的位置 st

二叉樹的二叉連結串列儲存結構構建以及先序遍歷

#include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR -1 typedef int TElemTyp

連結串列資料輸入與輸出的問題

程式碼如下: #include<stdio.h> struct Node { int data; struct Node *next; }*Head,*p,*q; typedef struct Node *LinkList; void main() { in