【數據結構】線性表--順序表(二)

文章目錄

        • 1、什么是線性表
        • 2、線性表的基本操作
        • 3、順序表
          • 3.1、順序表的定義
          • 3.2、順序表的實現方式:靜態分配
          • 3.3、順序表的實現方式:動態分配
          • 3.4、順序表的特點
          • 3.5、順序表的初始化與插入操作
          • 3.6、順序表的刪除與查詢

1、什么是線性表

? 線性表是具有相同數據類型的n(n>=0)個數據元素的有限序列,其中n為表長,當n=0時線性表是一個空表,若用L命名線性表,則其一般表示為

? L = (a1,a2,…,ai,ai+1,…,an

如圖所示:

image-20240506222820628

每個數據類型都相同,也意味著每個數據元素所占空間一樣大

重要概念:

  1. ai是線性表中的“第i個”元素線性表中的位序
  2. a1是表頭元素;an是表尾元素
  3. 除第一個元素外,每個元素有且僅有一個直接前驅;除最后一個元素外,每個元素有且僅有一個直接后繼
2、線性表的基本操作

常用操作:

  • InitList(&L):初始化表。構造一個空的線性表L,分配內存空間
  • DestroyList(&L):銷毀操作。銷毀線性表,并釋放線性表L所占用的內存空間。
  • ListInsert(&Li,e):插入操作。在表L中的第i個位置上插入指定元素e。
  • ListDelete(&L,i,&e):刪除操作。刪除表L中第i個位置的元素,并用e返回刪除元素的值。
  • LocateElem(L,e):按值查找操作。在表L中查找具有給定關鍵字值的元素
  • GetElem(L,i):按位查找操作。獲取表L中第i個位置的元素的值。

其他常用操作:

  • Length(L):求表長。返回線性表L的長度,即L中數據元素的個數
  • PrintList(L):輸出操作。按前后順序輸出線性表L的所有元素值。
  • Empty(L):判空操作。若L為空表,則返回true,否則返回false。

Tips:

  1. 數據元素的位序是從1開始,而程序數組下標是0開始
  2. 在實際開發中,可根據實際需求定義其他的基本操作
3、順序表
3.1、順序表的定義

? 順序表指的是用順序存儲的方式來實現線性表的順序存儲。把邏輯上相鄰的元素存儲在物理位置上也相鄰的存儲單元中,元素之間的關系由存儲單元的鄰接關系來體現。

image-20240507105149070

3.2、順序表的實現方式:靜態分配
#define MaxSize 10		//定義最長長度
typedef struct{ElemType data[MaxSize];	//用靜態的數組存放數據int length;				//順序表當前長度
}SqList;		//順序表的類型定義(靜態分配方式)

**問題:**如果數組數組存滿了呢?

  • 直接放棄治療,順序表的表長剛開始就確定后,無法更改(存儲空間是靜態的)

**思考:**如果剛開始就聲明一個很大的內存空間呢?存在什么問題?

  • 過于浪費
3.3、順序表的實現方式:動態分配
#define InitSize 10		//順序表的初始長度
typedef struct{ElemType *data;	//指示動態分配數組的指針int MaxSize;	//順序表的最大容量int length;		//順序表的當前長度
}SeqList;		//順序表的類型定義(動態分配方式)
3.4、順序表的特點
  1. 隨機訪問,即可以在o(1)時間內找到第i個元素
  2. 存儲密度高,每個節點只存儲數據元素
  3. 拓展容量不方便(即便采用動態分配的方式實現,拓展長度的時間復雜度也比較高)
3.5、順序表的初始化與插入操作

初始化順序表

#define MaxSize 50
typedef int ElemType; //讓順序表存儲其他類型元素時,可以快速改變代碼
//靜態分配
typedef struct {ElemType data[MaxSize];int length; //順序表長度
}SqList;

順序表插入

//順序表插入,因為L會改變,所以要引用
bool ListInsert(SqList &L,int pos,ElemType elemType){//判斷pos是否合法if(pos <= 1 || pos >= L.length + 1){return false;}//如果順序表滿了,也不能進行插入if(L.length == MaxSize){return false;}//將元素依次往后面移動for (int i = L.length; i >= pos; i--) {L.data[i] = L.data[i-1];}L.data[pos-1] = elemType; //存入數據L.length++;       //順序表長度+1return true;}

打印順序表

//打印順序表
void PrintList(SqList L){for (int i = 0; i < L.length; ++i) {printf("%3d",L.data[i]);}
}

在主函數中調用

//順序表的初始化與插入
int main() {SqList L;  //定義一個順序表bool result;L.data[0] = 1;  //放置元素L.data[1] = 2;L.data[2] = 3;L.length = 3; //設置順序表元素為3result = ListInsert(L,2,2);if(true == result){printf("success");} else{printf("error");}PrintList(L);return 0;
}
3.6、順序表的刪除與查詢

刪除元素

//刪除順序表中的元素
bool ListDelete(SqList &L,int pos,ElemType &del){//判斷刪除元素位置是否合法if(pos < 1 || pos > L.length ){return false;}del = L.data[pos-1];  //保存刪除元素的值//從當前下標開始,往前移動for (int i = pos;  i < L.length; i++) {L.data[i - 1] = L.data[i];}L.length--;return true;
}

查詢元素

//查詢元素位置
int LocateElem(SqList L,ElemType elemType){//遍歷順序表for (int i = 0; i < L.length; ++i) {if(L.data[i] == elemType){  //如果元素相同return i+1; //返回下標+1}}return 0;
}

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

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

相關文章

【Python快速上手(二十二)】

目錄 Python快速上手&#xff08;二十二&#xff09;Python3 使用數據庫-pymysql1. 創建數據庫連接2. 創建數據表3. 插入數據4. 查詢數據5. 使用 WHERE 條件語句6. 排序7. 刪除記錄8. 更新表數據9. 刪除表10.異常處理總結 Python快速上手&#xff08;二十二&#xff09; Pytho…

通過EXCEL控制PLC啟停電機的一種方法

概述 本例將介紹用微軟EXCEL電子表格控制西門子S7-1200 PLC實現電機啟停的一種方法。 第1步&#xff1a; 添加PLC設備&#xff0c;選擇西門子S7-1214C CPU&#xff0c;設置IP地址&#xff1a;192.168.18.18&#xff0c;子網掩碼&#xff1a;255.255.255.0。 第2步&#xff1a…

vue3中通過自定義指令實現loading加載效果

前言 在現代Web開發中&#xff0c;提升用戶體驗一直是開發者們追求的目標之一。其中&#xff0c;一個常見的場景就是在用戶與應用程序進行交互時&#xff0c;特別是當進行異步操作時&#xff08;如網絡請求&#xff09;&#xff0c;為用戶提供即時的反饋&#xff0c;避免用戶因…

Flet初體驗:Python跨平臺開發新選擇

文章目錄 ?? 介紹 ???? 演示環境 ???? 初識Flet ???? 安裝與配置?? 構建第一個Flet應用?? Flet打包:跨平臺的魔法?? Flet與FastAPI的結合?? 總結?? 相關鏈接 ???? 介紹 ?? “探索未知,擁抱創新,Flet讓我在應用開發的世界中找到了新的航標。”…

02 | 該如何選擇消息隊列?

RabbitMQ RabbitMQ 一個比較有特色的功能是支持非常靈活的路由配置&#xff0c;和其他消息隊列不同的是&#xff0c;它在生產者&#xff08;Producer&#xff09;和隊列&#xff08;Queue&#xff09;之間增加了一個 Exchange 模塊&#xff0c;你可以理解為交換機。 問題 Ra…

【循環程序設計-譚浩強適配】(適合專升本、考研)

無償分享學習資料&#xff0c;需要的小伙伴評論區或私信dd。。。 無償分享學習資料&#xff0c;需要的小伙伴評論區或私信dd。。。 無償分享學習資料&#xff0c;需要的小伙伴評論區或私信dd。。。 完整資料如下&#xff1a;純干貨、純干貨、純干貨&#xff01;&#xff01;…

淺談電動汽車充電站的電氣安全

1 引言 1月14日日上午10點左右&#xff0c;青島市市北區遼寧路63號公交停車場內&#xff0c;一輛報廢公交車突然起火&#xff0c;由于大風天氣&#xff0c;大火很快引燃了停在旁邊的幾輛報廢車。消防人員快速趕到&#xff0c;迅速控制住火勢。11時30分&#xff0c;停車場內的…

鴻蒙內核源碼分析(ELF格式篇) | 應用程序入口并不是main

閱讀之前的說明 先說明&#xff0c;本篇很長&#xff0c;也很枯燥&#xff0c;若不是絕對的技術偏執狂是看不下去的.將通過一段簡單代碼去跟蹤編譯成ELF格式后的內容.看看ELF究竟長了怎樣的一副花花腸子&#xff0c;用readelf命令去窺視ELF的全貌&#xff0c;最后用objdump命令…

Image to Music V2 :只需上傳一張照片,自動轉換成與圖片內容匹配的音頻!

前言 我們之前肯定已經見過了很多文本生成圖片、文本生成聲音以及AI翻唱歌曲 等多種AI產品&#xff08;模型&#xff09;。 其實音樂和圖片從某種意義上來說都是藝術創作的一種形式&#xff0c;它們可以相互配合&#xff0c;共同呈現出一種更加豐富、感性的表達方式。 將圖片…

弘君資本:人形機器人概念走強,盛通股份漲停,怡合達、鼎智科技等拉升

人形機器人概念14日盤中拉升走高&#xff0c;到發稿&#xff0c;盛通股份漲停&#xff0c;怡合達、鼎智科技漲約6%&#xff0c;索辰科技、偉創電氣、豐立智能等漲超4%。 音訊面上&#xff0c;5月13日&#xff0c;宇樹發布人形智能體Unitree G1&#xff0c;身高127cm,體重35kg&…

[240514] OpenAI 發布 GPT-4o,人機交互的歷史性時刻 | 蘋果芯片進軍服務器劍指AI? | 谷歌大會以AI為主

目錄 OpenAI 發布 GPT-4o&#xff0c;人機交互的歷史時刻蘋果芯片進軍服務器&#xff0c;劍指生成式 AI2024年谷歌開發者大會將圍繞 AI 展開 OpenAI 發布 GPT-4o&#xff0c;人機交互的歷史時刻 OpenAI 發布了 GPT-4o&#xff0c;大家一直都想要現在終于等到的語音助手 : 勿需…

618值得入手的數碼產品怎么選?2024 買過不后悔的數碼好物分享

在數字時代的浪潮中&#xff0c;每一次的購物狂歡節都如同一場科技盛宴&#xff0c;讓我們有機會接觸到最前沿、最實用的數碼產品&#xff0c;而“618”無疑是這場盛宴中最為引人矚目的日子之一。面對琳瑯滿目的商品&#xff0c;如何選擇那些真正值得入手的數碼好物&#xff0c…

易寶OA-ExecuteQueryForDataSetBinary處sql注入

免責聲明&#xff1a; 本文內容為學習筆記分享&#xff0c;僅供技術學習參考&#xff0c;請勿用作違法用途&#xff0c;任何個人和組織利用此文所提供的信息而造成的直接或間接后果和損失&#xff0c;均由使用者本人負責&#xff0c;與作者無關&#xff01;&#xff01;&#…

Centos 安裝jenkins 多分支流水線部署前后端項目

1、安裝jenkins 1.1 安裝jdk 要求&#xff1a;11及以上版本 yum install yum install java-11-openjdk 1.2 安裝jenkins 導入鏡像 sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo出現以下錯誤 執行以下命令 sudo yum …

前端使用原生JS怎么上傳本地路徑的文件到后端【附源碼】

本文不使用<input type"file">等前端上傳組件 一、為什么不能使用本地文件路徑上傳&#xff1f; 前端不能直接根據本地文件路徑&#xff08;例如 C:\Users\Username\Documents\image.jpg&#xff09;上傳文件到后端服務器&#xff0c;原因主要在于瀏覽器的安全…

使用java遠程提交flink任務到yarn集群

使用java遠程提交flink任務到yarn集群 背景 由于業務需要&#xff0c;使用命令行的方式提交flink任務比較麻煩&#xff0c;要么將后端任務部署到大數據集群&#xff0c;要么弄一個提交機&#xff0c;感覺都不是很離線。經過一些調研&#xff0c;發現可以實現遠程的任務發布。…

LOTO示波器軟件PC緩存(波形錄制與回放)功能

當打開PC緩存功能后, 軟件將采用先進先出的原則排隊對示波器采集的每一幀數據, 進行幀緩存。 當發現屏幕中有感興趣的波形掠過時, 鼠標點擊軟件的(暫停)按鈕, 可以選擇回看某一幀的波形。一幀數據的量 是 當前用戶選擇時基檔位緩沖區總數據大小。不同時基檔位緩沖區大小不同&am…

談談std::map的lower_bound

我們知道std::map內部是一個紅黑樹&#xff0c;放到std::map里的數據等有一個能比較大小的方法。它相當于java里面的TreeMap。 它里面有個lower_bound方法&#xff0c;返回一個迭代器&#xff0c;它指向map里第一個大于等于參數的元素。 方法的簽名很簡單&#xff0c;但是在不同…

富格林:有效預防黑幕阻撓被騙

富格林指出&#xff0c;在投資領域&#xff0c;現貨黃金是一種備受推崇的貴金屬投資品種。倘若能有效預防黑幕阻撓被騙的情況&#xff0c;事實上現貨黃金是很多投資者的“理想型”。然而要想有效地預防黑幕阻撓被騙&#xff0c;就需要掌握足夠多的投資技巧。為此&#xff0c;富…

Milvus 基本概念

Milvus 是一個開源的向量數據庫&#xff0c;專門用于高效地存儲、管理和檢索大規模向量數據。它基于 Apache 許可證 2.0 版本發布&#xff0c;由 Zilliz 公司開源并維護。 Milvus 的設計理念是為了解決向量數據存儲和檢索的挑戰。在許多應用中&#xff0c;向量數據是一種重要的…