什么是鏈表

鏈表是一種物理存儲單元上非連續、非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。鏈表由一系列結點(鏈表中每一個元素稱為結點)組成,結點可以在運行時動態生成。每個結點包括兩個部分:一個是存儲數據元素的數據域,另一個是存儲下一個結點地址的指針域。 相比于線性表順序結構,操作復雜。由于不必須按順序存儲,鏈表在插入的時候可以達到O(1)的復雜度,比另一種線性表順序表快得多,但是查找一個節點或者訪問特定編號的節點則需要O(n)的時間,而線性表和順序表相應的時間復雜度分別是O(logn)和O(1)。
使用鏈表結構可以克服數組鏈表需要預先知道數據大小的缺點,鏈表結構可以充分利用計算機內存空間,實現靈活的內存動態管理。但是鏈表失去了數組隨機讀取的優點,同時鏈表由于增加了結點的指針域,空間開銷比較大。鏈表最明顯的好處就是,常規數組排列關聯項目的方式可能不同于這些數據項目在記憶體或磁盤上順序,數據的存取往往要在不同的排列順序中轉換。鏈表允許插入和移除表上任意位置上的節點,但是不允許隨機存取。鏈表有很多種不同的類型:單向鏈表,雙向鏈表以及循環鏈表。鏈表可以在多種編程語言中實現。像Lisp和Scheme這樣的語言的內建數據類型中就包含了鏈表的存取和操作。程序語言或面向對象語言,如C,C++和Java依靠易變工具來生成鏈表。
特點
線性表的鏈式存儲表示的特點是用一組任意的存儲單元存儲線性表的數據元素(這組存儲單元可以是連續的,也可以是不連續的)。因此,為了表示每個數據元素與其直接后繼數據元素 之間的邏輯關系,對數據元素 來說,除了存儲其本身的信息之外,還需存儲一個指示其直接后繼的信息(即直接后繼的存儲位置)。由這兩部分信息組成一個"結點"(如概述旁的圖所示),表示線性表中一個數據元素。線性表的鏈式存儲表示,有一個缺點就是要找一個數,必須要從頭開始找起,十分麻煩。
根據情況,也可以自己設計鏈表的其它擴展。但是一般不會在邊上附加數據,因為鏈表的點和邊基本上是一一對應的(除了第一個或者最后一個節點,但是也不會產生特殊情況)。不過有一個特例是如果鏈表支持在鏈表的一段中把前和后指針反向,反向標記加在邊上可能會更方便。
對于非線性的鏈表,可以參見相關的其他數據結構,例如樹、圖。另外有一種基于多個線性鏈表的數據結構:跳表,插入、刪除和查找等基本操作的速度可以達到O(nlogn),和平衡二叉樹一樣。
其中存儲數據元素信息的域稱作數據域(設域名為data),存儲直接后繼存儲位置的域稱為指針域(設域名為next)。指針域中存儲的信息又稱做指針或鏈。
由分別表示,,…,的N 個結點依次相鏈構成的鏈表,稱為線性表的鏈式存儲表示,由于此類鏈表的每個結點中只包含一個指針域,故又稱單鏈表或線性鏈表。

轉載于:https://www.cnblogs.com/shadowduke/p/4886533.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/272839.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/272839.shtml
英文地址,請注明出處:http://en.pswp.cn/news/272839.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C# 基礎:Sealed、new、virtual、abstract、override的理解

目錄 1、sealed 2、new 3、virtual 4、abstract 5、override 1、sealed 密封類不能被繼承,密封方法可以重寫基類中的方法,但其本身不能在任何派生類(子類)中 進一步重寫。當應用于屬性或者方法時,sealed 修飾符必須始終…

梁興珍 java_數據結構與算法_Java語言

第1章 綜述1.1 數據結構和算法能起到什么作用?1.2 數據結構的概述1.3 算法的概述1.4 一些定義1.5 面向對象編程1.6 軟件工程1.7 對于C程序員的Java1.8 Java數據結構的類庫第2章 數組2.1 Array專題Applet2.2 Java中數組的基礎知識2.3 將程序劃分成類2.4 類接口2.5 Or…

Yii 2.0: yii2-highcharts-widget創建餅狀圖

安裝 The preferred way to install this extension is through composer. 項目根目錄下執行: php composer.phar require --prefer-dist miloschuman/yii2-highcharts-widget "*"或者在composer.json中添加 "miloschuman/yii2-highcharts-widget&qu…

【原創】C#中的抽象類(abstract class)和接口(interface)的比較

在C#中抽象類和接口是兩個相當重要的概念,深入理解對C#程序員是非常必要的,現總結如下:一、抽象類的特點:1、抽象方法只用于方法的聲明并不包含方法的實現,可以看作沒有實現實體的虛方法。2、抽象類不能進行實例化。3、…

U3D 腳本添加和獲得對象

有時候,一開始可能沒有對象,而是由于某種觸發,產生的一個對象,這里講解下,如何通過腳本來創建一個對象: 這是通過腳本創建一個立方體: using UnityEngine; using System.Collections;public cla…

50條超精辟的經典語錄:嘩眾,可以取寵,也可以失寵!

在人生道路上給自己定位很重要,不要苛求自己達到不可能達到的高度。我們能把每一件平凡的事做好就是不平凡,把每一件簡單的事做成功就是不簡單。1.我們只有一個地球,所以你要愛護地球;地球上只有一個我,所以你也要愛護…

java 時間工具類 大于_Java 時間工具類

1 /**2 * 格式化字符串為日期格式3 *4 *paramdateStr 需要格式化的字符串5 *paramformat 需要的日期格式,例如"yyyy-MM-dd HH:mm:ss"6 *return7 */8 public staticDate formatDate(String dateStr, String format) {9 SimpleDateFormat dateFormat newSi…

IP、TCP和DNS與HTTP的密切關系

看了上一篇博文的發表時間,是7月22日,現在是10月22日,已經有三個月沒寫博客了。這三個月里各種忙各種瞎折騰,發生了很多事情,也思考了很多問題。現在這段時間開始閑下來了,同時該思考的事情也思考清楚了&am…

C# 委托的理解

1、什么是委托委托可以理解為持有一個或多個方法的對象。如果執行委托的話,委托會執行它所"持有"的方法。委托可以避免程序中大量使用if-else語句,使程序擁有更好的擴展性。2、委托的本質委托和類一樣,是一種用戶自定義的類型&…

java基礎判斷題_java基礎知識周測試題帶答案

簡單題(每題5分,共計50分)簡述Java語言跨平臺的原理Java跨平臺的特性,也就是同一份字節碼文件可以在不同的系統上執行,由不同系統中的Java虛擬機負責翻譯成對應的機器指令。寫出以下名詞的概念和各自作用jre - Java運行時環境信息&#xff0c…

SQLSERVER 2008 R2版本密鑰(摘)

開發版32位:MC46H-JQR3C-2JRHY-XYRKY-QWPVM開發版64位:FTMGC-B2J97-PJ4QG-V84YB-MTXX8工組版:XQ4CB-VK9P3-4WYYH-4HQX3-K2R6QWEB版:FP4P7-YKG22-WGRVK-MKGMX-V9MTM數據中心版32位:PTTFM-X467G-P7RH2-3Q6CG-4DMYB數據中…

java conf_JAVA 解析、編輯nginx.conf

最近工程開發遇到一個需求:用Java去解析并編輯nginx.conf解析nginx.conf過程可以參考該項目的README.md下面舉個列子說明一下該如何編輯nginx.conf。定義一個pojoimportcom.alibaba.fastjson.JSONArray;importcom.google.common.base.Strings;importlombok.Data;Dat…

【原創】關于ASP.NET WebForm與ASP.NET MVC的比較

WebForm的理解1、 WebForm概念ASP.NETWebform提供了一個類似于Winform的事件響應GUI模型(event-drivenGUI),隱藏了HTTP、HTML、JavaScript等細節,將用戶界面構建成一個服務器端的樹結構控件(Control)&#…

對象的接口

Simula(模擬) 是一個很好的列子。正如這個名字鎖暗示的,它的作用是"模擬"像"銀行出納員"我們有一系列出納員,客戶,賬戶以及交易等 每類成員(元素)都有具有一些通用的特征,每個賬號都有一定的余額;每個出納都能接收客戶的存款,等等。…

java color類 藍色_java中Color類的簡單總結

標簽:java中Color類的簡單總結1.顏色的常識任何顏色都是由三原色組成(RGB),JAVA中支持224為彩色,即紅綠藍分量取值介于0-255之間(8位表示)2.Color類中的常量public final static Color black new Color(0,0,0);public final static Color bule new Col…

C#中幾種循環語法的比較

循環操作在程序開發當中使用非常的廣泛,當然循環也很容易成為整個程序運行的性能瓶頸,所以理解C#中幾種循環的用法,還是非常重要的。C#支持一下四種循環方式1、while循環2、do...while循環3、for 循環4、foreach循環前三種循環在C、Java中也是…

Eclipse基金會

昨天Eclipse基金會慶祝其成立十周年。2004年2月的新聞稿宣布該非盈利組織的正式成立,由包括開發者、消費者和插件提供商在內的各獨立團體組成的董事會,為Eclipse的長期發展負責。 基金會成立時,有19個項目和50個董事會成員,其開源…

.Net架構必備工具列表

原文N多年前微軟官網曾發了.Net下必備的十種工具,N多年過去了,世異時移,很多東西都已經變化了,那個列表也似乎陳舊了。而且,該文也只是對十種工具獨立的介紹,顯得有些羅列的感覺,是不是每個工具…

java scanner接收數組_java – 使用scanner將文件中的整數讀入數組

我正在為學校做一份復習工作.賦值是編寫一個類,它從標準輸入讀取一個包含幾個整數的文件,這些整數將被放入一個數組中.從這里開始,需要編寫方法來找出平均值,中位數,最大值,最小值和標準差.它讀起來像這樣:4556677889等等…所以,我假設我需要創建一個數組列表(因為長…

Asp.Net頁面傳值的方法簡單總結【原創】

1、QueryString當頁面上form按照get的方式向頁面發送請求數據的時候,web server會將請求數據放入一個QEURY_STRING的環境變量中,然后通過QeueryString方法從這個變量中獲取相應的參數。例如:發送參數頁面Test1.aspx 按鈕單擊代碼:…