当前位置: 首页 > news >正文

数据结构(一):顺序表详解

在正式介绍顺序表之前,我们有必要先了解一个名词:线性表。

线性表:

线性表是,具有n个相同特性的数据元素的有限序列。常见的线性表:顺序表、链表、栈、队列、数组、字符串...

线性表在逻辑上是线性结构,但在物理结构上并不一定是连续的。


1. 顺序表概念

顺序表是用一段物理地址连续的储存单元、依次存储数据元素的线性结构,一般情况下采用数组存储。

 

2. 顺序表定义

typedef int SLDataType;// 顺序表数据类型typedef struct SeqList
{SLDataType* arr; // 指向动态开辟的数组int size;        // 有效数据个数int capacity;    // 容量
}SL;

3. 顺序表的初始化

顺序表的初始化,是使用 动态内存管理 开辟空间构造一个空的顺序表

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>#define DefaultCapacity 4 // 默认初始化空间大小void SLInit(SL* ps)
{assert(ps);SLDataType* tmp = (SLDataType*)malloc(sizeof(SLDataType) * DefaultCapacity);if (tmp == NULL){perror("malloc");exit(-1);}ps->arr = tmp;ps->capacity = DefaultCapacity;ps->size = 0;
}

4. 在pos位置插入元素

在pos位置插入数据之前,要检查动态顺序表的容量是否足够 ,

不够则利用 realloc函数 开辟一块更大的空间给顺序表。

检查容量/扩容:
void SLCapacityCheck(SL* ps)
{assert(ps);if (ps->size == ps->capacity){SLDataType* tmp = (SLDataType*)realloc(ps->arr, ps->capacity * 2 * sizeof(SLDataType));if (tmp == NULL){perror("realloc");exit(-1);}ps->capacity *= 2;ps->arr = tmp;}
}
插入:
void SLInsert(SL* ps, int pos, SLDataType x)
{assert(ps);SLCapacityCheck(ps);for (int i = ps->size - 1; i >= pos; i--){ps->arr[i + 1] = ps->arr[i];}ps->arr[pos] = x;ps->size++;
}

5. 删除pos位置元素

void SLErase(SL* ps, int pos)
{assert(ps);for (int i = pos + 1; i < ps->size; i++){ps->arr[i - 1] = ps->arr[i];}ps->size--;
}

6. 顺序表查找(按值查找)

int SLFind(SL* ps, SLDataType x)
{assert(ps);for (int i = 0; i < ps->size; i++){if (ps->arr[i] == x)return i;}// 找不到所查找的元素return -1;
}

在主函数中使用 SLFind函数 时,应检验 “返回值” 是否为非 -1,再使用

7. 顺序表的打印

void SLPrint(SL* ps)
{assert(ps);for (int i = 0; i < ps->size; i++){printf("%d ", ps->arr[i]);}printf("\n");
}

8. 顺序表销毁

void SLDestroy(SL* ps)
{assert(ps);free(ps->arr);ps->capacity = 0;ps->size = 0;
}

销毁 arr 所指向的空间,将空间还给操作系统。

相关文章:

数据结构(一):顺序表详解

在正式介绍顺序表之前&#xff0c;我们有必要先了解一个名词&#xff1a;线性表。 线性表&#xff1a; 线性表是&#xff0c;具有n个相同特性的数据元素的有限序列。常见的线性表&#xff1a;顺序表、链表、栈、队列、数组、字符串... 线性表在逻辑上是线性结构&#xff0c;但…...

【周末闲谈】人工智能热潮下的AIGC到底指的是什么?

生成式人工智能AIGC&#xff08;Artificial Intelligence Generated Content&#xff09;是人工智能1.0时代进入2.0时代的重要标志。 个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️周末闲谈】 系列目录 ✨第一周 二进制VS三进制 ✨第二周 文心一…...

sklearn垃圾邮件分类

在Python中&#xff0c;可以使用机器学习算法来进行垃圾邮件分类。下面是一个简单的示例&#xff0c;使用朴素贝叶斯算法进行垃圾邮件分类&#xff1a; import pandas as pd from sklearn.feature_extraction.text import CountVectorizer from sklearn.model_selection impor…...

UI美工设计岗位的工作职责

UI美工设计岗位的工作职责1 职责&#xff1a; 1、负责软件界面的美术设计、创意工作和制作工作; 2、根据各种相关软件的用户群&#xff0c;提出构思新颖、有高度吸引力的创意设计; 3、对页面进行优化&#xff0c;使用户操作更趋于人性化; 4、维护现有的应用产品; 5、收集和…...

ES6链判断运算符(?.)的正确打开方式

在实际应用中&#xff0c;如果读取对象内部 的某个属性&#xff0c;往往需要判断一下&#xff0c;属性的上层对象是否存在。比如&#xff0c;读取message.body.user.firstName这个属性&#xff0c;安全的写法是写成下下面这样&#xff1a; // 错误的写法 const firstName mes…...

删除块参照 删除块定义

删除块参照 void CDwgDatabaseUtil::DeleteBlockReference(CString strBlockName) {// 锁定文档acDocManager->lockDocument(acDocManager->curDocument());AcDbObjectId objRecId;if (...

机器学习笔记:李宏毅ChatGPT:生成式学习的两种策略

1 策略1 “各个击破”——autoregressive model “各个击破”——一个一个生成出来 2 策略2 &#xff1a; “一次到位”——non-autoregressve model 一步到位&#xff0c;全部生成出来 2.1 non-autoregressive model 如何确定长度&#xff1f; 两种策略 策略1&#xff1a;始…...

React 组件防止冒泡方法

背景 在使用 antd 组件库开发时&#xff0c;发现点击一个子组件&#xff0c;却触发了父组件的点击事件&#xff0c;比如&#xff0c;我在一个折叠面板里面放入一个下拉框或者对下拉框列表渲染做定制&#xff0c;每个下拉框候选项都有一个子组件… 解决 其实这就是 Javascri…...

MAUI+Blazor 如何开启浏览器调试工具

文章目录 前言如何开启调试模式输入快捷键打开浏览器有什么意义&#xff1f; 前言 MAUIBlazor其实就是浏览器套壳&#xff0c;我觉得很有意义&#xff0c;因为现在性能已经不是主要的限制了&#xff0c;很多时候讲究的快速开发。而且MAUIBlazor跨平台的未来感觉实在是太香了。…...

【Spring MVC】Spring MVC基于注解的程序开发

目录 一、什么是Spring MVC 二、Spring MVC项目的创建和使用 1、实现客户端和服务器端之间的连接 1.1、RequsestMapping注解 1.2、RequestMapper的简单使用 1.3、使用GetMapping和POSTMapping注解来实现HTTP连接 三、获取参数 1、实现获取单个参数 2、实现获取对象 3…...

前端探索之旅

目录 简介:内容大纲:第一章 前端开发简介1.1 前端开发的定义和作用1.2 前端开发的职责1.3 前端开发的技能要求1.4 前端开发的发展前景总结&#xff1a; 第二章 HTML基础2.1 HTML基本结构2.2 常见HTML标签和元素 第三章 CSS基础3.1 CSS基本语法3.2 常见CSS选择器3.3 常见CSS属性…...

“冰箭卫士·IP发布会”首次亮相第14届海峡两岸(厦门)文博会

2023年8月6日,“冰箭卫士IP发布会”首次亮相海峡两岸文博会思明馆。此次发布会由厦门市文化创意产业协会、厦门理工&#xff08;集美区&#xff09;政产学研基地主办&#xff0c;厦门市文化创意产业协会IP设计研究院、厦门一笔之上文化发展有限公司、冰箭应急安全科技研究院承办…...

数学建模学习(9):模拟退火算法

模拟退火算法(Simulated Annealing, SA)的思想借 鉴于固体的退火原理&#xff0c;当固体的温度很高的时候&#xff0c;内能比 较大&#xff0c;固体的内部粒子处于快速无序运动&#xff0c;当温度慢慢降 低的过程中&#xff0c;固体的内能减小&#xff0c;粒子的慢慢趋于有序&a…...

带你认识储存以及数据库新技术演进

01经典案例 1.0 潜在问题 02存储&数据库简介 2.1 存储器层级架构 2.1 数据怎么从应用到存储介质 2.1 RAID技术 2.2 数据库 数据库分为 关系型数据库 和 非关系型数据库 2.2.2 非关系型 2.2.1 关系型 2.3 数据库 vs 经典存储-结构化数据管理 2.3.1 数据库 vs 经典存储-事务能…...

腾讯云服务器镜像操作系统大全_Linux_Windows清单

腾讯云CVM服务器的公共镜像是由腾讯云官方提供的镜像&#xff0c;公共镜像包含基础操作系统和腾讯云提供的初始化组件&#xff0c;公共镜像分为Windows和Linux两大类操作系统&#xff0c;如TencentOS Server、Windows Server、OpenCloudOS、CentOS Stream、CentOS、Ubuntu、Deb…...

基于k8s job设计与实现CI/CD系统

方案一&#xff1a;Jenkinsk8sCICD 方案二&#xff1a;kanikok8s jobCICD CICD 基于K8s Job设计流水线 CI方案 工具镜像 云原生镜像打包工具 kaniko的使用 与Jenkins对比 可用性与易用性...

⌈算法进阶⌋图论::并查集——快速理解到熟练运用

目录 一、原理 1. 初始化Init 2. 查询 find 3. 合并 union 二、代码模板 三、练习 1、 990.等式方程的可满足性&#x1f7e2; 2、 1061. 按字典序排列最小的等效字符串&#x1f7e2; 3、721.账户合并 &#x1f7e1; 4、 839.相似字符串组&#x1f7e1; 5、 2812.找出最安全…...

【ROS】fsd_algorithm架构学习与源码分析(致敬)

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍fsd_algorithm架构学习与源码分析。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&am…...

PHP最简单自定义自己的框架定义常量自动生成目录(三)

1、框架入口增加模块定义&#xff0c;实现多模块功能 index.php 定义模块 <?php //定义当前请求模块 define("MODULE",index); require "./core/KJ.php"; 创建后台模块admin.php <?php define("MODULE",admin); require "./cor…...

栈和队列详解

目录 栈 栈的概念及结构&#xff1a; 栈的实现&#xff1a; 代码实现&#xff1a; Stack.h stack.c 队列&#xff1a; 概念及结构&#xff1a; 队列的实现&#xff1a; 代码实现&#xff1a; Queue.h Queue.c 拓展&#xff1a; 循环队列&#xff08;LeetCode题目链接&#xff0…...

React 性能优化实战:10个让页面快3倍的核心技巧

一、前言React 性能优化实战&#xff1a;10个让页面快3倍的核心技巧直接影响用户体验和系统成本。本文从React和性能优化出发&#xff0c;给出可量化的优化方案。二、性能分析2.1 性能瓶颈定位// 性能分析 API const perf performance.getEntriesByType(navigation)[0]; conso…...

gt-checksum 2.0.0 版本重磅升级:多维度优化,让数据库校验更高效精准!

gt-checksum 2.0.0 版本迎来重大升级&#xff0c;围绕三大核心方向全面提升&#xff0c;修复多项关键问题&#xff0c;完善测试覆盖&#xff0c;使数据库结构与数据一致性校验更高效精准稳定。 核心功能新增 此次升级实现了 Oracle ->MySQL 全模式兼容落地&#xff0c;支持 …...

具微科技完成A+++轮融资,聚焦特种场景,欲打造具身智能发展新范式

36氪获悉&#xff0c;全域移动智能机器人公司具微科技近期完成A轮融资&#xff0c;总融资金额达数亿元。资金将用于技术研发与场景落地&#xff0c;其产品聚焦特种场景&#xff0c;优势显著。融资情况与团队实力具微科技此次A轮融资由滨州国投等联合领投&#xff0c;和达控股等…...

CoolProp架构深度解析:开源热力学计算库的技术实现

CoolProp架构深度解析&#xff1a;开源热力学计算库的技术实现 【免费下载链接】CoolProp Thermophysical properties for the masses 项目地址: https://gitcode.com/gh_mirrors/co/CoolProp CoolProp是一个基于现代C架构的开源热力学性质计算库&#xff0c;为工程师和…...

手把手教你用Python解析中科微/泰斗GNSS模块的NMEA数据(附完整代码)

Python实战&#xff1a;GNSS模块NMEA数据解析全流程指南 当你第一次从GNSS模块的串口接收到类似$GNGGA,024725.000,3642.98201,N,11707.89084,E,1,08,3.6,-5.3,M,0.0,M,,*5E这样的数据时&#xff0c;是否感到无从下手&#xff1f;本文将带你从硬件连接到数据可视化的完整流程&a…...

机器人协议设计核心:架构、安全与性能优化

1. 机器人协议设计概述在自动化系统开发领域&#xff0c;机器人协议&#xff08;Bot Protocol&#xff09;是决定系统间通信质量和效率的核心要素。一个设计良好的机器人协议需要兼顾可扩展性、安全性和易用性&#xff0c;就像为不同语言使用者设计一套通用交流规则。我在金融交…...

指定文件夹批量带密码压缩工具:功能详解与使用指南

在日常办公中&#xff0c;需要给多个文件夹分别设置密码并压缩的场景并不少见。本文介绍一款专门解决这类需求的工具&#xff0c;包含核心功能解析和操作流程说明。工具能做什么一句话总结&#xff1a;将文件夹批量压缩为独立的ZIP文件&#xff0c;每个文件&#xff08;夹&…...

为什么2025年每个网盘用户都需要LinkSwift直链助手?

为什么2025年每个网盘用户都需要LinkSwift直链助手&#xff1f; 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云…...

2025最权威的十大AI论文方案推荐榜单

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 要是针对维普检测系统的 AI 降重需求&#xff0c;那就得从文本特征调整这方面着手。首先呢&a…...

无人机飞控、游戏角色旋转:聊聊卡尔丹角顺序(Yaw-Pitch-Roll)的那些坑

无人机飞控与游戏开发中的旋转顺序陷阱&#xff1a;Yaw-Pitch-Roll实战指南 第一次在无人机飞控项目中遇到姿态解算问题时&#xff0c;我盯着屏幕上疯狂跳动的欧拉角数值百思不得其解——理论上完美的控制算法&#xff0c;在实际飞行中却导致无人机像醉汉一样失控旋转。直到凌晨…...