【數據結構】順序表的定義和運算

目錄

1.初始化

2.插入

3.刪除

4.查找

5.修改

6.長度

7.遍歷

8.完整代碼


🌈嗨!我是Filotimo__🌈。很高興與大家相識,希望我的博客能對你有所幫助。

💡本文由Filotimo__??原創,首發于CSDN📚。

📣如需轉載,請事先與我聯系以獲得授權??。

🎁歡迎大家給我點贊👍、收藏??,并在留言區📝與我互動,這些都是我前進的動力!

🌟我的格言:森林草木都有自己認為對的角度🌟。

在C語言中,線性表的順序存儲結構可以使用數組來實現。順序表是一種將元素按照順序存儲在連續的存儲空間中的線性結構。

順序表可以使用結構體來定義,例如:

#define MAXSIZE 100  // 線性表的最大長度typedef struct {int data[MAXSIZE];  // 存儲線性表元素的數組int length;         // 當前線性表長度
} List;

以下是順序表的基本運算:

1.初始化

初始化一個空的順序表:

void initList(List *L) {L->length = 0;
}

L:指向順序表的指針。

將順序表的長度length賦值為0,相當于清空了順序表,使得順序表L中不再有任何元素。

2.插入

在某個位置插入一個元素,使得該位置原來的元素和之后的元素往后移動:

int listInsert(List *L, int i, int elem) {int j;if (i < 1 || i > L->length + 1) {return 0; // 越界}if (L->length >= MAXSIZE) {return 0; // 線性表已滿}for (j = L->length; j >= i; j--) {L->data[j] = L->data[j-1];}L->data[i-1] = elem;L->length++;return 1;
}

函數的目的是將一個元素elem插入到順序表L的第i個位置。

i:要插入的位置

elem:要插入的元素的值

代碼的邏輯:

(1)判斷要插入的位置i是否越界,即是否小于1或大于線性表的長度加1。如果越界則返回0,表示失敗。

(2)判斷順序表L是否已滿,即順序表的長度是否達到了最大容量MAXSIZE。如果已滿則返回0,表示失敗。

(3)通過一個循環,將從位置i開始的元素都向后移動一位,為要插入的元素留出空位。

(4)將要插入的元素elem賦值給位置i-1的元素。

(5)增加順序表的長度。

(6)返回1,表示插入成功。

3.刪除

刪除某個位置的元素,使得該位置后面的元素往前移動:

int listDelete(List *L, int i) {int j;if (i < 1 || i > L->length) {return 0; // 越界}for (j = i; j < L->length; j++) {L->data[j-1] = L->data[j];}L->length--;return 1;
}

i:要刪除的元素的位置

代碼的邏輯:

(1) 判斷要刪除的位置i是否越界,即是否小于1或大于順序表的長度。如果越界則返回0,表示失敗。

(2)通過一個循環,將從位置i+1開始的元素都向前移動一位,覆蓋了要被刪除的元素。

(3)減少順序表的長度。

(4)返回1,表示刪除成功。

4.查找

根據值或位置查找一個元素:

int locateElem(List *L, int elem) {int i;for (i = 0; i < L->length; i++) {if (L->data[i] == elem) {return i+1;}}return 0; // 沒找到
}

elem:要查找的元素的值

代碼的邏輯:

(1)通過一個循環,遍歷順序表L中的每個元素。

(2)在循環中,判斷當前元素是否等于要查找的元素elem。如果相等,則返回當前元素的位置(即i+1)。

(3)如果循環結束還沒有找到相等的元素,則返回0,表示沒有找到。

5.修改

根據位置修改某個元素的值:

int setElem(List *L, int i, int elem) {if (i < 1 || i > L->length) {return 0; // 越界}L->data[i-1] = elem;return 1;
}

?i:要設置元素的位置

-elem:要設置的新值

代碼的邏輯:

(1)判斷要設置的位置i是否越界,即是否小于1或大于線性表的長度。如果越界則返回0,表示失敗。

(2)將線性表L的第i個位置的元素值設置為elem。

(3)返回1,表示設置成功。

6.長度

返回順序表的長度:

int listLength(List *L) {return L->length;
}

直接返回順序表L的長度L->length。

7.遍歷

依次訪問順序表中的每個元素:

void traverseList(List *L) {int i;for (i = 0; i < L->length; i++) {printf("%d ", L->data[i]);}printf("\n");
}

代碼的邏輯:

(1)通過一個循環,遍歷順序表L中的每個元素。

(2)在循環中,使用printf函數依次將每個元素的值輸出到屏幕上,并在元素之間添加一個空格。

(3)在循環結束后,輸出一個換行符,以便下一行輸出。

8.完整代碼

這里順序表中的元素均設為 int 類型:

#include <stdio.h>#define MAXSIZE 100  // 線性表的最大長度typedef struct {int data[MAXSIZE];  // 存儲線性表元素的數組int length;         // 當前線性表長度
} List;// 初始化線性表
void initList(List *L) {L->length = 0;
}// 在第 i 個位置插入元素 elem
int listInsert(List *L, int i, int elem) {int j;if (i < 1 || i > L->length + 1) {return 0; // 越界}if (L->length >= MAXSIZE) {return 0; // 線性表已滿}for (j = L->length; j >= i; j--) {L->data[j] = L->data[j-1];}L->data[i-1] = elem;L->length++;return 1;
}// 刪除第 i 個元素
int listDelete(List *L, int i) {int j;if (i < 1 || i > L->length) {return 0; // 越界}for (j = i; j < L->length; j++) {L->data[j-1] = L->data[j];}L->length--;return 1;
}// 查找第一個等于 elem 的元素
int locateElem(List *L, int elem) {int i;for (i = 0; i < L->length; i++) {if (L->data[i] == elem) {return i+1;}}return 0; // 沒找到
}// 返回第 i 個元素的值
int getElem(List *L, int i) {if (i < 1 || i > L->length) {return 0; // 越界}return L->data[i-1];
}// 修改第 i 個元素的值為 elem
int setElem(List *L, int i, int elem) {if (i < 1 || i > L->length) {return 0; // 越界}L->data[i-1] = elem;return 1;
}// 返回線性表的長度
int listLength(List *L) {return L->length;
}// 遍歷線性表
void traverseList(List *L) {int i;for (i = 0; i < L->length; i++) {printf("%d ", L->data[i]);}printf("\n");
}int main() {List L;initList(&L);listInsert(&L, 1, 1);listInsert(&L, 2, 2);listInsert(&L, 3, 3);printf("插入 1, 2, 3 后的線性表:");traverseList(&L);  // 打印:1 2 3listDelete(&L, 2);printf("刪除第 2 個元素后的線性表:");traverseList(&L);  // 打印:1 3int elem = getElem(&L, 2);printf("第 2 個元素的值為%d\n", elem);  // 打印:第 2 個元素的值為3setElem(&L, 1, 4);printf("修改第 1 個元素的值為 4 后的線性表:");traverseList(&L);  // 打印:4 3printf("線性表的長度為 %d\n", listLength(&L)); // 打印:線性表的長度為 2int pos = locateElem(&L, 3);if (pos) {printf("元素 3 的下標為 %d\n", pos);  // 打印:元素 3 的下標為 2} else {printf("元素 3 沒有找到\n");}return 0;
}

輸出結果如下:

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

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

相關文章

web前端開發html/css練習

目標圖&#xff1a; 素材&#xff1a; 代碼&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"…

使用RSA工具進行對信息加解密

我們在開發中需要對用戶敏感數據進行加解密&#xff0c;比如密碼 這邊科普一下RSA算法 RSA是非對稱加密算法&#xff0c;與對稱加密算法不同;在對稱加密中&#xff0c;相同的密鑰用于加密和解密數據,因此密鑰的安全性至關重要;而在RSA非對稱加密中&#xff0c;有兩個密鑰&…

【USRP】5G / 6G OAI 系統 5g / 6G OAI system

面向5G/6G科研應用 USRP專門用于5G/6G產品的原型開發與驗證。該系統可以在實驗室搭建一個真實的5G 網絡&#xff0c;基于開源的代碼&#xff0c;專為科研用戶設計。 軟件無線電架構&#xff0c;構建真實5G移動通信系統 X410 采用了目前流行的異構式系統&#xff0c;融合了FP…

SQLite基本使用

目錄 1. 概述2. 引入SQLite3. 連接數據庫創建游標4. 創建數據庫文件5. 新增單條數據6. 批量新增數據7. 查詢單條數據8.查詢全部數據9. 查詢指定條數的數據10. 修改數據11. 刪除數據12. 事務回滾13. 關閉數據庫關閉游標1. 概述 SQLite是一個進程內的庫,實現了自給自足的、無服務…

【嵌入式開發 Linux 常用命令系列 4.2 -- .repo 各個目錄介紹】

文章目錄 概述.repo 目錄結構manifests/default.xmlManifest 文件的作用default.xml 文件內容示例linkfile 介紹 .repo/projects 子目錄配置和管理configHEADhooksinfo/excludeobjectsrr-cache 工作區中的對應目錄 概述 repo 是一個由 Google 開發的版本控制工具&#xff0c;它…

使用 OMSA 和 OME 工具管理多個服務器

文章目錄 Dell Remote Access Controller (iDRAC)OpenManage Server Administrator&#xff08;OMSA&#xff09;OpenManage EnterpriseSupportAssist Enterprise推薦閱讀 在DELL服務器的管理工具中&#xff0c;有多個管理工具&#xff0c;今天我們將分享這幾個工具的關聯性以及…

2023-12-08 工作心得

1 別名不能作為 同一個sql里的where里條件約束 因為別名是在查詢結果生成后才得到的&#xff0c;而 WHERE 子句是在查詢結果生成前進行的篩選操作&#xff0c;所以別名不能直接用于 WHERE 子句中的條件篩選。 2 jpa sql里如果是刪除或修改&#xff0c;加注解 modifying transa…

STM32的幾個深入功能

STM32的幾個深入功能 目錄 1、時鐘源2、鎖相環3、備份SRAM4、low power mode5、DMA Flash RAM6、復位類型7、CMSIS8、STM32F4學習方法9、中斷10、8080 并行接口11、FSMC12、ADC13、IIC14、SPI15、48516、CAN17、MPU6050六軸傳感器18、NRF24L01 2.4G無線模塊19、FLASH20、外部SR…

【Git系列】branch和tag

&#x1f49d;&#x1f49d;&#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

將單體應用程序遷移到微服務

多年來&#xff0c;我處理過多個單體應用&#xff0c;并將其中一些遷移到了微服務架構。我打算寫下我所學到的東西以及我從經驗中用到的策略&#xff0c;以實現成功的遷移。在這篇文章中&#xff0c;我將以AWS為例&#xff0c;但基本原則保持不變&#xff0c;可用于任何類型的基…

云原生系列1

1、虛擬機集群環境準備 VirtualBox類似vmware的虛擬化軟件&#xff0c;去官網https://www.virtualbox.org/下載最新版本免費的&#xff0c;VirtualBox中鼠標右ctrl加home跳出鼠標到wins中。 VirtualBox安裝步驟 https://blog.csdn.net/rfc2544/article/details/131338906 cent…

微信小程序:button微信開放能力打開客服會話分享到聊天框

文檔 https://developers.weixin.qq.com/miniprogram/dev/component/button.html 打開客服會話 按鈕關鍵屬性 open-type"contact"功能按鈕 <button class"mo-open-type"open-type"contact"> </button>分享 <button class&q…

Hive HWI 配置

前言 1、下載安裝好hive后&#xff0c;發現hive有hwi界面功能&#xff0c;研究下是否可以運行&#xff0c;于是使用hive –service hwi命令啟動hwi界面報錯。 啟動hwi功能 2、訪問192.168.126.110:9999/hwi&#xff0c;發現訪問錯誤 一、HWI介紹 HWI&#xff08;Hive Web Int…

【前端】CSS基礎(學習筆記)

一、簡介 1、HTML局限性 HTML只關注內容的語義&#xff0c;但是丑&#xff01; 2、CSS概要 CSS 是層疊樣式表 ( Cascading Style Sheets ) 的簡稱&#xff0c;有時我們也會稱之為 CSS 樣式表或級聯樣式表。 CSS 是也是一種標記語言 CSS 主要用于設置 HTML 頁面中的文本內…

blender 粒子系統 roughness 屬性

粒子系統中的Roughness是一種用來控制粒子的隨機性和不規則性的屬性&#xff0c;它可以影響粒子的發射方向、速度、大小、旋轉等。Roughness有以下幾個子屬性&#xff1a; - **Uniform**&#xff1a;這個屬性用來控制粒子的發射方向的隨機性&#xff0c;即粒子在法線方向上的偏…

托盤四向穿梭車自動化密集庫供應|單機智能向系統智能跨越的HEGERLS托盤四向車系統

隨著物流產業的迅猛發展&#xff0c;托盤四向穿梭式自動化密集倉儲系統可認為是在穿梭車貨架系統基礎上提出的一種新倉儲概念。托盤四向穿梭式立體庫因其在流通倉儲體系中所具有的高效密集存儲功能優勢、運作成本優勢與系統化智能化管理優勢&#xff0c;已發展為倉儲物流的主流…

喜訊:加速度商城系統全系列產品品牌全新升級為Shopfa

2月1日訊&#xff1a;經過1年多的品牌文化塑造&#xff0c;深圳市加速度軟件開發有限公司經過研究決定&#xff0c;將旗下的多商戶商城系列、小程序商城系列、B2B商城系列、供應商集采系列、電子元器件商城系列、跨境獨立站商城系列、MRO工業品商城系列、外賣商城系列、智慧零售…

重寫 AppiumService 類,添加默認啟動參數,并實時顯示啟動日志

一、前置說明 在Appium的1.6.0版本中引入了AppiumService類&#xff0c;可以很方便的通過該類來管理Appium服務器的啟動和停止。經過測試&#xff0c;使用該類的實例執行關閉server時&#xff0c;并沒有釋放端口號&#xff0c;會導致第二次啟動時失敗。另外&#xff0c;使用該…

6.2 U-boot 頂層 Makefile

一、U-boot工程目錄分析 如果要分析uboot源碼&#xff0c;首先要將uboot源碼進行編譯&#xff0c;編譯需要在Ubuntu進行&#xff0c;把uboot文件放在一個目錄下。 編譯完成后的文件是這樣&#xff1a; 我們需要看的文件夾如下。 1. arch 文件夾 從上圖可以看出有很多架構&…

geolife筆記:整理處理單條軌跡

以 數據集筆記 geolife &#xff08;操作篇&#xff09;_geolife數據集-CSDN博客 軌跡為例 1 讀取數據 import pandas as pd data pd.read_csv(Geolife Trajectories 1.3/Data//000/Trajectory/20081023025304.plt,headerNone, skiprows6,names[Latitude, Longitude, Not_Im…