[數據結構]2. 順序表

順序表

  • 1. 介紹
    • 基本概念
    • 存儲方式
    • 優點
    • 缺點
    • 應用場景
  • 2. 順序表操作
    • SeqList.h
    • Seqlist.c

1. 介紹

基本概念

順序表是用一組地址連續的存儲單元依次存儲線性表的數據元素。線性表是具有相同數據類型的 n 個數據元素的有限序列,在順序表中,元素之間的邏輯順序與其物理存儲順序是一致的。
順序表一般可以分為:

  1. 靜態順序表:使用定長數組存儲元素
  2. 動態順序表:使用動態開辟的數組存儲

存儲方式

順序表一般采用數組來實現。數組在內存中占據連續的存儲區域,每個元素都有唯一的索引,通過索引可以快速訪問到對應的元素。例如,一個包含整數元素的順序表可以用一個整型數組來存儲。

優點

  • 隨機訪問效率高:可以通過數組下標直接訪問任意位置的元素,時間復雜度為 (O(1))。
  • 存儲密度高:每個存儲單元只存儲數據元素本身,沒有額外的指針等開銷。

缺點

  • 插入和刪除操作效率低:在插入或刪除元素時,需要移動大量元素,平均時間復雜度為 (O(n))。
  • 空間分配不靈活:需要預先分配固定大小的存儲空間,可能會造成空間浪費或不足。

應用場景

靜態順序表只適用于 確定知道需要存多少數據的場景。靜態順序表的定長數組導致N定大了,空間開多了浪費,開少了不夠用。所以現實中基本都是使用動態順序表,根據需要動態的分配空間大小。

2. 順序表操作

SeqList.h

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>typedef int SLDatatype;
typedef struct SeqList
{SLDatatype* a;int size;//num of dataint capacity;
}SL;void SLInit(SL* psl);
void SLDestory(SL* psl);
void SLPrint(SL* psl);
//STL naming style
void SLPushBack(SL* psl, SLDatatype x);
void SLPushFront(SL* psl, SLDatatype x);
void SLPopBack(SL* psl);
void SLPopBack(SL* psl);
void SLInsert(SL* psl, int pos, SLDatatype x);
void SLErase(SL* psl, int pos);
int SlFind(SL* psl, SLDatatype x);
void SLModify(SL* psl, int pos, SLDatatype x);

Seqlist.c

#include"SeqList.h"
void SLInit(SL *psl) {assert(psl);psl->a = (SLDatatype*)malloc(sizeof(SLDatatype) * 4);if (psl->a == NULL) {perror("malloc fail");return 0;}psl->capacity = 4;psl->size = 0;
}void SLDestory(SL* psl) {assert(psl);free(psl->a);psl->a = NULL;psl->size = 0;psl->capacity = 0;
}void SLPrint(SL* psl) {assert(psl);for (int i = 0; i < psl->size; i++) {printf("%d ", psl->a[i]);}printf("\n");
}void SLCheckCapacity(SL* psl) {assert(psl);if (psl->size == psl->capacity) {SLDatatype* tmp = realloc(psl->a, sizeof(SLDatatype) * psl->capacity * 2);if (tmp == NULL) {perror("realloc fail");return 0;}psl->a = tmp;psl->capacity *= 2;}
}//Insert data from the back
void SLPushBack(SL* psl, SLDatatype x) {assert(psl);//SLCheckCapacity(psl);//psl->a[psl->size] = x;//psl->size++;//---->SLInsert(psl, psl->size, x);
}//Insert data from the front
void SLPushFront(SL* psl, SLDatatype x) {assert(psl);/*SLCheckCapacity(psl);*///int end = psl->size - 1;//move data//while (end >= 0) {//	psl->a[end + 1] = psl->a[end];//	--end;//}//psl->a[0] = x;//psl->size++;//---->SLInsert(psl, 0, x);
}//Delete data from the back
void SLPopBack(SL* psl) {assert(psl);//if (psl->size == 0)//	return;//assert(psl->size > 0);//psl->size--;SLErase(psl, psl->size - 1);}//Delete data from the front
void SLPopFront(SL* psl) {assert(psl);//assert(psl->size > 0);//int start = 0;//while (start < psl->size - 1) {//	psl->a[start] = psl->a[psl->size + 1];//	start++;//}//psl->size--;SLErase(psl, 0);
}//Inserting data into a data structure
void SLInsert(SL* psl, int pos, SLDatatype x) {assert(psl);assert(pos >= 0 && pos <= psl->size);SLCheckCapacity(psl);int end = psl->size - 1;while (end >= pos) {psl->a[end + 1] = psl->a[end];--end;}psl->a[pos] = x;psl->size++;
}//Removing data from a data structure
void SLErase(SL* psl, int pos) {assert(psl);assert(pos >= 0 && pos < psl->size);//Cannot be inserted after 'size'int start = pos;while (start < psl->size) {psl->a[start - 1] = psl->a[start];++start;}psl->size--;
}//Returns the subscript if found, or -1 if not.
int SlFind(SL* psl, SLDatatype x) {assert(psl);for(int i = 0; i < psl->size; i++) {if (psl->a[i] == x) {return i;}}return -1;
}void SLModify(SL* psl, int pos, SLDatatype x) {assert(psl);assert(0 <= pos && pos < psl->size);psl->a[pos] = x;
}

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

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

相關文章

o3和o4-mini的升級有哪些亮點?

ChatGPT是基于OpenAI GPT系列的高性能對話生成AI&#xff0c;經過多代迭代不斷提升自然語言理解和生成能力。 在過去的一年中&#xff0c;OpenAI先后發布了GPT-4、GPT?4.1及多種mini版本&#xff0c;為不同使用場景提供靈活選擇。? 隨著用戶需求向更高效、更精準的推理和視覺…

Chrome漏洞可竊取數據并獲得未經授權的訪問權限

在發現兩個關鍵漏洞后,谷歌發布了Chrome瀏覽器的緊急安全更新。這些漏洞可能允許攻擊者竊取敏感數據并未經授權訪問用戶系統。 這些缺陷被識別為CVE-2025-3619和CVE-2025-3620,在Windows和Mac的135.0.7049.95/.96之前影響Chrome版本,影響Linux的135.0.7049.95/.96。該更新將在…

力扣面試150題--兩數之和 和 快樂數

Day 25 題目描述 思路 創建一個hashmap從前向后遍歷數組如果存在target-nums[i]在map中&#xff0c;記錄它們兩個的序號返回即可不存在&#xff0c;就將該元素放入map中&#xff0c;存放序號 注意&#xff1a;題目說的是必然存在唯一解 class Solution {public int[] twoSum…

Flutter_學習記錄_狀態管理之GetX

Flutter GetX 狀態管理框架全面解析 1. 狀態管理與 Flutter GetX 介紹 1.1 狀態管理 通俗理解&#xff1a;當我們需要在多個頁面&#xff08;組件/Widget&#xff09;之間共享狀態&#xff08;數據&#xff09;&#xff0c;或者在一個頁面中的多個子組件之間共享狀態時&…

ASP.NET常見安全漏洞及修復方式

Microsoft IIS 版本信息泄露 查看網頁返回的 Header 信息&#xff0c;默認會包含 IIS&#xff0c;ASP.NET 版本信息&#xff1a; 隱藏 Server 標頭 編輯 web.config 文件&#xff0c;在 system.webServer 節點中配置 requestFiltering 來移除Server標頭&#xff1a; <sec…

深入解析Java日志框架Logback:從原理到最佳實踐

Logback作為Java領域最主流的日志框架之一,由Log4j創始人Ceki Glc設計開發,憑借其卓越的性能、靈活的配置以及與SLF4J的無縫集成,成為企業級應用開發的首選日志組件。本文將從架構設計、核心機制、配置優化等維度全面剖析Logback的技術細節。 一、Logback的架構設計與核心模…

OpenStack Yoga版安裝筆記(22)Swift筆記20250418

一、官方文檔 https://docs.openstack.org/swift/yoga/admin/objectstorage-components.html#https://docs.openstack.org/swift/yoga/admin/objectstorage-components.html# 二、對象存儲簡介&#xff08;Introduction to Object Storage&#xff09; OpenStack 對象存儲&a…

Spring Boot日志系統詳解:Logback與SLF4J的默認集成

大家好呀&#xff01;&#x1f44b; 今天我們來聊聊Spring Boot中一個超級重要但又經常被忽視的功能——日志系統&#xff01; 一、日志系統的重要性 首先&#xff0c;咱們得明白為什么日志這么重要&#xff1f;&#x1f937;?♂? 想象一下&#xff0c;你正在玩一個超級復…

【AI提示詞】退休規劃顧問專家

提示說明 隨著人口老齡化的加劇&#xff0c;越來越多的人開始關注退休規劃問題。一個專業的退休規劃顧問可以幫助用戶合理規劃退休生活&#xff0c;確保退休后的生活質量。 提示詞 # 角色 退休規劃顧問專家## 注意 1. 專家設計應符合退休規劃的專業性和可靠性&#xff0c;幫…

樓梯上下檢測數據集VOC+YOLO格式5462張2類別

數據集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路徑的txt文件&#xff0c;僅僅包含jpg圖片以及對應的VOC格式xml文件和yolo格式txt文件) 圖片數量(jpg文件個數)&#xff1a;5462 標注數量(xml文件個數)&#xff1a;5462 標注數量(txt文件個數)&#xff1a;5462 …

docker 部署服務工具記錄

一、場景 項目需要使用dify和向量庫milvus, 這兩個工具都是使用docker 部署&#xff0c;因此需要安裝docker. 二、docker安裝 系統為debian , 剛開始安裝不是超時&#xff0c;就是依賴版本沖突&#xff0c;查看系統鏡像源文件&#xff1a; cat /etc/apt/sources.list 覺得可…

Oracle、MySQL、PostgreSQL三大數據庫對比分析

Oracle、MySQL、PostgreSQL 三大數據庫的對比分析&#xff0c;結合 Java SpringBoot 項目開發 的實際場景&#xff0c;重點說明分庫分表、主從復制的實現難度及案例。 一、數據庫核心對比 1. 核心區別與適用場景 維度OracleMySQLPostgreSQL定位企業級商業數據庫輕量級開源數據…

Stable Diffusion LoRA模型加載實現風格自由

對于模型微調來說&#xff0c;直接進行微調需要的硬件配置和時間都是相當夸張的&#xff0c;但要想實現風格切換自由&#xff0c;也不是只有模型微調一個方式&#xff0c;LoRA技術可以說很完美的解決了這個難題。無論是二次元畫風還是復古膠片質感&#xff0c;都只需要加載小巧…

貪心算法day10(無重疊區間)

1.無重疊區間 435. 無重疊區間 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 代碼&#xff1a; class Solution {public static int eraseOverlapIntervals(int[][] intervals) {Arrays.sort(intervals,(v1,v2)->{return v1[0]-v2[0];});int left interva…

Python語言基礎教程(上)4.0

?博客主頁&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客內容》&#xff1a;.NET、Java.測試開發、Python、Android、Go、Node、Android前端小程序等相關領域知識 &#x1f4e2;博客專欄&#xff1a; https://blog.csdn.net/m0_63815035/cat…

PyTorch 浮點數精度全景:從 float16/bfloat16 到 float64 及混合精度實戰

PyTorch 在深度學習中提供了多種 IEEE 754 二進制浮點格式的支持&#xff0c;包括半精度&#xff08;float16&#xff09;、Brain?float&#xff08;bfloat16&#xff09;、單精度&#xff08;float32&#xff09;和雙精度&#xff08;float64&#xff09;&#xff0c;并通過統…

在conda環境下使用pip安裝庫無法import

安裝seleniumwire包&#xff0c;conda環境沒有&#xff0c;pip之后安裝不到當前conda環境 網上的方法都試過了&#xff0c;包括強制安裝等 python -m pip install --upgrade --force-reinstall selenium-wire 最后定位應該是沒有安裝到當前conda的環境下&#xff0c;使用list…

【k8s系列4】工具介紹

1、虛擬機軟件 vmware workstation 2、shell 軟件 MobaXterm 3、centos7.9 下載地址 &#xff08;https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/?spma2c6h.25603864.0.0.374bf5adOaiFPW&#xff09; 4、上網軟件

ApiHug 前端解決方案 - M1 內側

背景 ApiHug UI 解決方案 - ApiHug前后端語義化設計&#xff0c;節約80%以上時間https://apihug.github.io/zhCN-docs/ui 現代前端框架日趨SPA(Single Page Application)化&#xff0c;給前后協同都帶來了挑戰&#xff0c;ApiHug試圖減少多人在前后協同帶來的理解難度&#x…

【人工智能】DeepSeek 與 RAG 技術:構建知識增強型問答系統的實戰

《Python OpenCV從菜鳥到高手》帶你進入圖像處理與計算機視覺的大門! 解鎖Python編程的無限可能:《奇妙的Python》帶你漫游代碼世界 本文深入探討了如何利用 DeepSeek R1 模型結合檢索增強生成(RAG)技術,構建一個高效的知識增強型問答系統。RAG 技術通過結合信息檢索與生…