數據結構——線性表

文章目錄

  • 線性表的定義和基本操作
    • 順序表
    • 線性表的鏈式表示

線性表的定義和基本操作

線性表是具有相同數據類型的(n≥0)個數據元素的有限序列,其中n為表長,當n=0時線性表是一個空表。若用L命名線性表,則其中一般表示為:L=(a1,a2,a3,··· ,an)。除第一個元素外,每個元素有且僅有一個直接前驅。除最后一個元素外,每個元素有且僅有一個直接后繼。
注意: 線性表是一種邏輯結構,表示元素之間一對一的相鄰關系。順序表和鏈表是指存儲結構

順序表

順序表的定義
線性表的順序存儲又稱順序表。它是用一組地址連續的存儲單元依次存儲線性表中的數據元素,從而使得邏輯上相鄰的兩個元素在物理位置上也相鄰。順序表的特點是表中元素的邏輯順序與其物理順序相同

  • 特點:
    1. 順序表最主要的特點是隨機訪問,即通過首地址和元素序號可在時間O(1)內找到指定的元素
    2. 順序表的 存儲密度高 ,每個結點只存儲數據元素
    3. 順序表邏輯上相鄰的元素物理上也相鄰,所以插入和刪除操作需要移動大量元素

順序表的基本操作

  • 插入操作
    1. 最好情況:在表尾插入,元素后移語句將不執行,時間復雜度為O(1)
    2. 最壞情況:在表頭插入,元素后移語句將執行n次,時間復雜度為O(n)
    3. 平均情況:在長度為n的線性表中插入一個結點時,所需要移動結點的平均次數為n/2,時間復雜度為O(n)
  • 刪除操作:
    1. 最好情況:刪除表尾元素,無須移動元素,時間復雜度為O(1)
    2. 最壞情況:刪除表頭元素,需移動除表頭元素外的所有元素,時間復雜度為O(n)
    3. 平均情況:在長度為n的線性表中刪除一個結點時,所需要移動結點的平均次數為(n-1)/2,線性表刪除算法的平均時間復雜度為O(n)
  • 按值查找
    1. 最好情況:查找的元素就在表頭,僅需比較一次,時間復雜度為O(1)
    2. 最壞情況:查找的元素在表尾或不存在時,需要比較n次,時間復雜度為O(n)
    3. 平均情況:在長度為n的線性表中查找e元素的平均比較次數為(n+1)/2,時間復雜度為O(n)

線性表的鏈式表示

順序表可以隨時存取表中的任意一個元素,但插入和刪除操作需要移動大量元素。鏈式存儲線性表時,不需要使用地址連續的存儲單元,即不要求邏輯上相鄰的元素在物理位置上也相鄰,他通過“鏈”建立起數據元素之間的邏輯關系因此插入和刪除操作不需要移動元素,而只修改指針,但也會失去順序表可隨機存儲取的有優點

單鏈表的定義
線性表的鏈式存儲又稱為單鏈表,它是指通過一組任意的存儲單元來存儲線性表中的數據元素。為了建立數據元素之間的線性關系,對每個鏈表結點,除存放元素自身的信息外,還需要存放一個指向后繼的指針
在這里插入圖片描述

  • 其中data為數據域,存放數據元素。為指針域,存放其后后繼結點的地址
  • 利用單鏈表可以解決順序表需要大量連續存儲單元的缺點,但單鏈表附加指針域,也存在浪費存儲空間的缺點,由于單鏈表的元素離散地分布在存儲空間中,所以 單鏈表是非隨機存取的存儲結構 ,不能直接找到表中某個特點的節點。查找某個特定的結點時,需要從表頭開始遍歷,依次查找
  • 通常用頭指針來標識一個單鏈表,單鏈表L,頭指針為NULL時表示一個空表。為了操作上的方便,在單鏈表第一個結點之前附加一個結點,稱為頭結點。頭結點的數據域可以不設任何信息,也可以記錄表長等信息。頭結點的指針域指向線性表的第一個元素結點

判斷單鏈表是否為空的判斷條件:

  • 帶頭結點:L—>next==NULL
  • 不帶頭結點:L==NULL

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

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

相關文章

.NET實現解析字符串表達式

一、引子功能需求 我們創建了一個 School 對象&#xff0c;其中包含了教師列表和學生列表。現在&#xff0c;我們需要計算教師平均年齡和學生平均年齡。 //創建對象 School school new School() {Name "小菜學園",Teachers new List<Teacher>(){new Teach…

CCLINK轉MODBUS-TCP網關cclink通訊接線圖 終端電阻

大家好&#xff0c;今天我們要聊的是生產管理系統中的CCLINK和MODBUS-TCP協議&#xff0c;它們的不同使得數據互通比較困難&#xff0c;但捷米JM-CCLK-TCP網關的出現改變了這一切。 1捷米JM-CCLK-TCP是一款自主研發的CCLINK從站功能的通訊網關&#xff0c;它的主要功能是將各種…

后端開發5.Redis的搭建

使用docker安裝 Redis【redis】(6379) 拉取Redis鏡像 docker pull redis:6.2.6 啟動Redis容器 docker run -di --name=redis -p 6379:6379 redis:6.2.6 啟動Redis容器并設置密碼 docker run -di --name=redis -p 6379:6379 redis:6.2.6 --requirepass "密碼" 測…

D455+VINS-Fusion+surfelmapping 稠密建圖(三)

繼續&#xff0c;由surfelmapping建立的點云生成octomap八叉樹柵格地圖 一、安裝OctomapServer 建圖包 安裝插件 sudo apt-get install ros-melodic-octomap-ros sudo apt-get install ros-melodic-octomap-msgs sudo apt-get install ros-melodic-octomap-server sudo apt-…

cubemx hal stm32 舵機 可減速 任意位置停止 驅動代碼

CubeMX配置 對于 STM32 F407VE 這里的84是來自APB1那路2倍頻得到&#xff1a; 代碼部分 兩個舵機都是180度的 servo.c #include "servo.h" #include "tim.h" #include "stdio.h"__IO uint32_t g_SteerUWT[2] {0}; uint16_t g_SteerDeg[…

React Native Maps的使用

介紹 React Native Maps是一個用于在React Native應用中顯示地圖的庫。它提供了許多功能&#xff0c;如顯示地圖、標記位置、繪制多邊形等。以下是React Native Maps的使用步驟&#xff1a; 使用 首先&#xff0c;你需要在你的React Native項目中安裝React Native Maps庫。可…

青大數據結構【2014】

一、單選 二、簡答 為了解決順序隊列的假溢出問題&#xff0c;提出了循環隊列&#xff0c;即把存儲隊列的表從邏輯上看成一個環 判別隊列空和滿有三種方法&#xff1a; 1&#xff09;采用計數器判別&#xff0c;空時&#xff0c;計數器為0&#xff1b;滿時&#xff0c;計數器…

【設計模式——學習筆記】23種設計模式——中介者模式Mediator(原理講解+應用場景介紹+案例介紹+Java代碼實現)

文章目錄 案例引入案例一普通實現中介者模式 案例二 介紹基礎介紹登場角色尚硅谷 《圖解設計模式》 案例實現案例一&#xff1a;智能家庭類圖實現 案例二&#xff1a;登錄頁面邏輯實現說明類圖實現 總結文章說明 案例引入 案例一 普通實現 在租房過程中&#xff0c;客戶可能…

css 實現 html 元素內文字水平垂直居中的N種方法

上一篇博文寫了div 中元素居中的N種常用方法&#xff0c;那么單個html元素&#xff1a;div&#xff08;塊級元素代表&#xff09;&#xff0c;span&#xff08;行內元素代表&#xff09;中的文字如何水平垂直都居中呢&#xff1f;實現方法如下&#xff1a; 本文例子使用的 html…

WebAPIs 第二天

DOM事件基礎 事件監聽事件類型事件對象 一.事件監聽 ① 概念&#xff1a;就是讓程序檢測是否有事件發生&#xff0c;一旦有事件觸發&#xff0c;就立即調用一個函數做出響應&#xff0c;也成為綁定事件或者注冊事件 ② 語法&#xff1a;元素對象.addEventListener(事件類型&…

機器學習---對數幾率回歸

1. 邏輯回歸 邏輯回歸&#xff08;Logistic Regression&#xff09;的模型是一個非線性模型&#xff0c; sigmoid函數&#xff0c;又稱邏輯回歸函數。但是它本質上又是一個線性回歸模型&#xff0c;因為除去sigmoid映射函 數關系&#xff0c;其他的步驟&#xff0c;算法都是…

從零開始,貪吃蛇小游戲系列專欄完美收官!

&#x1f3ae; 從零開始&#xff0c;貪吃蛇小游戲系列專欄完美收官&#xff01; &#x1f40d; 各位游戲開發探索者們&#xff0c;大家好&#xff01;我是[億元程序員]&#xff0c;一位擁有8年游戲開發經驗的主程。經過一段時間的努力&#xff0c;我很高興地宣布&#xff0c;我…

阿里云預裝LAMP應用導致MySQL不顯示訪問密碼如何解決

&#x1f600;前言 本篇博文是關于阿里云云服務器ECS部署MySQL過程中出現的一下坑&#xff0c;希望能夠幫助到您&#x1f60a; &#x1f3e0;個人主頁&#xff1a;晨犀主頁 &#x1f9d1;個人簡介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以幫助到大家…

SUB-1G SOC芯片DP4306F 32 位 ARM Cortex-M0+內核替代CMT2380F32

DP4306F是一款高性能低功耗的單片集成收發機&#xff0c;集成MO核MCU&#xff0c;工作頻率可覆蓋200MHiz^ 1000MHz。 支持230/408/433/470/868/915頻段。該芯片集成了射頻接收器、射頻發射器、頻率綜合器、GFSK調制器、GFSK解調器等功能模塊。通過SPI接口可以對輸出功率、頻道選…

gitlab-Runner搭建

root wget https://packages.gitlab.com/runner/gitlab-runner/packages/fedora/29/gitlab-runner-12.6.0-1.x86_64.rpm/download.rpm rpm -ivh download.rpm ---- 安裝 rpm -Uvh download.rpm -----更新升級 然后運行&#xff1a; gitlab-runner register --url https://git…

RabbitMQ相關面試題

用到了哪些MQ?什么使用場景?MQ的組成部分?MQ宕機了怎么辦?如何進行持久化的? MQ的選型? Kafka:高吞吐量、低延遲的分布式消息隊列,主要用于大規模數據處理和流式處理 RocketMQ:RocketMQ是阿里巴巴開源的分布式消息隊列,具有高吞吐量、低延遲、高可靠性等特點 RabbitM…

【Go 基礎篇】Go語言浮點類型:探索浮點數的特點與應用

介紹 浮點數是計算機編程中用于表示實數的一種數據類型&#xff0c;用于處理具有小數部分的數值。Go語言&#xff08;Golang&#xff09;提供了兩種主要的浮點數類型&#xff1a;float32和float64&#xff0c;分別用于單精度和雙精度浮點數的表示。本篇博客將深入探討Go語言中…

38 | 浦發銀行股票分析案例

本文將通過一個浦發銀行股票分析案例,探討如何從多個維度對股票進行分析,包括基本面、技術面和市場環境等因素。我們將深入挖掘浦發銀行的財務數據、業務模式以及市場定位,以了解其內在價值和潛在風險。同時,我們還將考察技術面的指標,如價格走勢、均線形態等,以揭示市場…

linux 命令--常用關機命令

1.使用shutdown命令 shutdown命令是Linux系統下最常用的關機命令之一。它可以讓系統在指定時間內進行關機或者重啟操作。例如&#xff0c;下面的命令可以讓系統在5分鐘后進行關機操作&#xff1a; sudo shutdown -h5其中&#xff0c;“-h”表示關機&#xff0c;“5”表示5分鐘…

ThinkPHP8命名規范-ThinkPHP8知識詳解

本文主要講解thinkphp8的命名規范&#xff0c;主要包括&#xff1a;遵循PHP自身的PSR-2命名規范和PSR-4自動加載規范、目錄和文件命名規范、函數和類、屬性命名規范、常量和配置命名規范、數據表和字段命名規范、不能使用PHP保留字。 在使用thinkphp8開發項目之前&#xff0c;…