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

数据结构与算法-顺序表

数据结构

顺序表

基本概念

  • 顺序表:顺序存储的线性表
  • 链式表:链式存储的线性表,简称链表

顺序存储就是将数据存储到一片连续的内存中,在C语言环境下,可以是具名的栈数组,也可以是匿名的堆数组。

存储方式不仅仅只是提供数据的存储空间,而是必须要体现数据之间的逻辑关系。当采用顺序存储的方式来存放数据时,唯一能用来表达数据间本身的逻辑关系的就是存储位置。

基本操作

顺序表设计

一般而言,为了方便操作顺序表,需要一个专门管理顺序表的“管理结构体”,结构体中一般包含:

  1. 顺序表总容量
  2. 顺序表当前最末元素下标位置
  3. 顺序表指针

下面是管理结构体的代码:

typedef int DATA;typedef struct
{int capacity;  //顺序表容量int last;      //最末元素下标DATA *data;     //顺序表数据
} SequenceList;

其中,DATA是定义的数据类型,可以更改为其他数据类型。

初始化顺序表

所谓初始化就是建立一个不包含任何元素的顺序表,设置好管理结构体中的表的总容量、末元素下标,申请好顺序表内存空间等系列准备工作。

/*** 初始化顺序表* @param cap 初始化容量*/
SequenceList *init_seqlist(int cap)
{SequenceList *list = (SequenceList *)malloc(sizeof(SequenceList));if(list != NULL){//给顺序表中的元素分配存储空间(顺序表就是数组,数据是存储在元素中的)list->data = malloc(sizeof(int) * cap);if (list->data == NULL){free(list);return NULL;}//初始化list->capacity = cap;list->last = -1;}return list;
}
增删遍历节点

在顺序表中增加一个数据,可以有多种方式,比如在原数组的末尾增加,或者在原数组的头部增加,或者在数组中间任意一个位置增加,根据实际需要来定。


/*** 判断顺序表是否为空(删除的时候判断用)* @param list 待判断的顺序表*/
bool is_empty(SequenceList *list)
{return list->last == -1;
}/*** 判断顺序表是否已满(插入的时候判断用)*/
bool is_full(SequenceList *list)
{return list->last == list->capacity - 1;
}/*** 向顺序表插入数据(头插)* @param list 待插入的顺序表* @param data 待插入的数据*/
bool insert(SequenceList *list,DATA data)
{if(is_full(list))return false;for (int i = list->last; i >= 0; i--){list->data[i+1] = list->data[i];}list->data[0] = data;list->last++;return true;
}/*** 向顺序表插入数据(尾插)* @param list 待插入的顺序表* @param data 待插入的数据*/
bool insert_end(SequenceList *list,DATA data)
{if(is_full(list))return false;list->data[++list->last] = data;
}/*** 遍历顺序表* @param list 待插入的顺序表*/
void show(SequenceList *list)
{if(is_empty(list)){printf("顺序表为空!\n");return;}printf("顺序表中的元素:");for(int i = 0; i <= list->last; i++){printf("%d ", list->data[i]);}printf("\n");
}/*** 删除顺序表数据* @param list 待删除的顺序表* @param data 待删除的数据*/
bool remove_node(SequenceList *list,DATA data)
{if(is_empty(list))return false;for(int i = 0; i <= list->last; i++){if(memcmp(&(list->data[i]),&data,sizeof(DATA)) == 0){for (int j = i; j < list->last; j++){list->data[j] = list->data[j+1];}list->last--;return true;}}return false;
}
销毁顺序表

一个顺序表最后不再需要,应当要释放其所占用的内存空间,这被称为顺序表的销毁。

/*** 释放内存* @param list 待释放的顺序表*/
void destory(SequenceList *list)
{if (list == NULL){return;}free(list->data);free(list);list = NULL;
}

相关文章:

数据结构与算法-顺序表

数据结构 顺序表 基本概念 顺序表&#xff1a;顺序存储的线性表链式表&#xff1a;链式存储的线性表&#xff0c;简称链表 顺序存储就是将数据存储到一片连续的内存中&#xff0c;在C语言环境下&#xff0c;可以是具名的栈数组&#xff0c;也可以是匿名的堆数组。 存储方式…...

OpenAI CEO 奥特曼发长文《反思》

OpenAI CEO 奥特曼发长文《反思》 --- 引言&#xff1a;从 ChatGPT 到 AGI 的探索 ChatGPT 诞生仅一个多月&#xff0c;如今我们已经过渡到可以进行复杂推理的下一代模型。新年让人们陷入反思&#xff0c;我想分享一些个人想法&#xff0c;谈谈它迄今为止的发展&#xff0c;…...

Shell编程详解

文章目录 一、Linux系统结构二、Shell介绍1、Shell简介2、Shell种类3、Shell查询和切换 三、Shell基础语法1、注释2、本地变量3、环境变量3.1、查看环境变量3.2、临时设置环境变量3.3、永久设置环境变量 4、特殊变量5、控制语句5.1、shell中的中括号5.2、if语句5.3、for循环5.4…...

跨站脚本攻击(XSS)详解

跨站脚本攻击&#xff08;XSS&#xff09;详解 跨站脚本攻击&#xff08;XSS&#xff0c;Cross-Site Scripting&#xff09;是一种通过在网页中注入恶意脚本&#xff0c;攻击用户浏览器的漏洞。攻击者可以利用XSS窃取用户敏感信息、劫持会话、或在受害者浏览器中执行恶意操作。…...

03-QT中的QMainWindow+对话框QDialog

文章目录 1.QMainWindow1.1菜单栏1.2 工具栏1.3 状态栏1.4 铆接部件1.5 核心部件&#xff08;中心部件&#xff09;1.6 资源文件 2.对话框2.1 基本概念2.2 标准对话框2.3 自定义消息框2.4 消息对话框2.5 标准文件对话框 1.QMainWindow QMainWindow是一个为用户提供主窗口程序的…...

c# 中Parallel.ForEach 对其中一个变量进行赋值 引发报错

在 C# 中使用 Parallel.ForEach 方法时&#xff0c;如果你尝试在并行循环中对共享变量进行赋值&#xff0c;很可能会遇到线程安全问题或竞争条件&#xff08;race conditions&#xff09;&#xff0c;这可能导致数据不一致、程序崩溃或其他不可预测的行为。 问题描述 假设你有…...

ElasticSearch备考 -- 整体脉络梳理

1、 search 、Update、reindex ElasticSearch 备考 -- 查询&高亮&排序 ElasticSearch 备考 -- 聚合查询 ElasticSearch 备考 -- 异步检索 2、search temple ElasticSearch备考 -- Search template 3、custom analyzer ElasticSearch 备考 -- 自定义分词 2、…...

vue Element Ui Upload 上传 点击一个按钮,选择多个文件后直接上传,使用防抖解决多次上传的问题。

问题&#xff1a; 在使用Element Ui Upload 上传文件时&#xff0c;选择多个文件上传时&#xff0c;on-change事件会一个一个返回上传的文件&#xff0c;导致前端不知道什么时候可以拿到全部上传的文件&#xff0c;再一起调后台接口。 解决方法&#xff1a; 上传文件后&…...

【HF设计模式】05-单例模式

声明&#xff1a;仅为个人学习总结&#xff0c;还请批判性查看&#xff0c;如有不同观点&#xff0c;欢迎交流。 摘要 《Head First设计模式》第5章笔记&#xff1a;结合示例应用和代码&#xff0c;介绍单例模式&#xff0c;包括遇到的问题、采用的解决方案、以及达到的效果。…...

运维人员的Python详细学习路线

以下是一条适合运维人员的Python详细学习路线&#xff1a; 一、基础入门阶段&#xff08;第1 - 2个月&#xff09; 环境搭建与基础语法&#xff08;第1个月&#xff09; 安装与配置 在运维常用的操作系统&#xff08;如Linux或Windows&#xff09;上安装Python。对于Linux系统…...

软件体系结构与设计模式

在软件开发中&#xff0c;软件体系结构和设计模式是两个至关重要的概念。它们帮助开发者设计出易于理解、可扩展、可维护的系统。尽管这两个概念密切相关&#xff0c;但它们分别关注系统的不同方面&#xff1a;软件体系结构关注的是系统整体结构的设计&#xff0c;而设计模式则…...

安徽省地图arcgis数据美化后mxd文件shp格式下载后内容测评

标题中的“安徽省地图arcgis数据美化后mxd文件shp格式”揭示了这个压缩包的内容是经过GIS处理的、针对安徽省地图数据。ArcGIS是一款由Esri公司开发的专业地理信息系统软件&#xff0c;用于处理、分析和展示地理空间数据。MXD文件是ArcGIS的项目文件&#xff0c;包含了地图布局…...

MySQL数据库备份与恢复策略

数据是企业和应用的核心资产,可靠的备份和恢复策略是确保数据安全性和业务连续性的关键。在本篇文章中,我们将详细介绍 MySQL 数据库的备份和恢复方法,包括逻辑备份、物理备份、自动化备份,以及常见问题的处理方法。 一、逻辑备份 逻辑备份是通过导出数据库的结构和数据生…...

go语言zero框架中教务crm系统的在职继承和离职交接的设计与实践

在GoZero中实现一个在职继承和离职交接的通用模块&#xff0c;涉及到顾问离职交接客户、领导离职交接审批单据等功能。为了使这个模块通用且易于扩展&#xff0c;我们可以分成几个部分&#xff1a; 1. **数据模型设计**&#xff1a;我们首先需要设计离职交接相关的数据模型。 …...

C# 设计模式(结构型模式):桥接模式

C# 设计模式&#xff08;结构型模式&#xff09;&#xff1a;桥接模式 在软件设计中&#xff0c;我们经常会遇到系统的变化频繁&#xff0c;或者需要灵活扩展功能的场景。这时&#xff0c;桥接模式&#xff08;Bridge Pattern&#xff09;便显得尤为重要。桥接模式是一个结构型…...

C# 设计模式(行为型模式):解释器模式

C# 设计模式&#xff08;行为型模式&#xff09;&#xff1a;解释器模式 (Interpreter Pattern) 什么是解释器模式&#xff1f; 解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为型设计模式&#xff0c;用于定义一种语言的语法表示&#xff0c;并提供一个解释…...

如何 cURL Elasticsearch:进入 Shell

作者&#xff1a;来自 Elastic Philipp Krenn Kibana 的控制台是开始使用 Elasticsearch 的 REST API 的最简单方法 - 语法突出显示、自动完成、格式化、导出 cURL、JavaScript 或 Python。而且你不必担心正确的端点、身份验证等。但是有时&#xff0c;如果 Kibana 不可用、你…...

深信服云桌面系统的终端安全准入设置

深信服的云桌面系统在默认状态下没有终端的安全准入设置&#xff0c;这也意味着同样的虚拟机&#xff0c;使用云桌面终端或者桌面套件都可以登录&#xff0c;但这也给系统带来了一些安全隐患&#xff0c;所以&#xff0c;一般情况下需要设置终端的安全准入策略&#xff0c;防止…...

Node.js 模块系统

Node.js 模块系统 1. 引言 Node.js,作为一个轻量级、高效的服务器端 JavaScript 运行环境,其模块系统是其最核心的特性之一。Node.js 的模块系统允许开发者将代码组织成多个文件,每个文件都是一个模块,这样可以提高代码的可维护性和可重用性。本文将详细介绍 Node.js 的模…...

数据结构知识收集尊享版(迅速了解回顾相关知识)

1、单链表、循环链表、双向链表&#xff0c;存储、逻辑结构 单链表、循环链表和双向链表都是线性表的链式存储结构&#xff0c;它们在存储和逻辑结构上有一些共同点和不同点。 存储结构 单链表&#xff1a;每个节点包含一个数据域和一个指针域&#xff0c;指针域指向下一个节…...

迎接范式革命:最新、最全的大模型Latent Space综述,NUS、复旦、清华等联合出品

从 2024 年底的关于潜在空间的早期探索&#xff0c;再到 2025 年底和 2026 年初的相关研究爆发&#xff0c;潜空间范式正在彻底重塑大模型 (LLMs, VLMs, VLAs 等延伸模型) 的底层设计逻辑。当大部分大模型还在依靠显式空间 (Explicit Space) 或者说语言空间 (Verbal Space) 完成…...

新手必看!SGLang结构化生成语言入门指南,从安装到第一个案例

新手必看&#xff01;SGLang结构化生成语言入门指南&#xff0c;从安装到第一个案例 1. SGLang是什么&#xff1f; SGLang全称Structured Generation Language&#xff08;结构化生成语言&#xff09;&#xff0c;是一个专门为大语言模型设计的推理框架。它主要解决两个核心问…...

Qwen3-Embedding-4B保姆级教程:知识库多行输入规范与非法字符过滤逻辑

Qwen3-Embedding-4B保姆级教程&#xff1a;知识库多行输入规范与非法字符过滤逻辑 1. 项目简介与核心价值 今天给大家带来一个特别实用的工具——基于阿里通义千问Qwen3-Embedding-4B大模型构建的语义搜索演示服务。这个项目最大的特点就是真正理解你的意思&#xff0c;而不是…...

qclaw 如何接入第三方大模型 API 中转站

如果你正在搜索 qclaw 如何接入第三方大模型 api 中转站&#xff0c;可以先按一个最小思路理解&#xff1a;QClaw 这类智能体工具接第三方大模型 API&#xff0c;通常只需要准备三个参数&#xff0c;分别是 Base URL、API Key 和 Model。不同版本的 QClaw 入口可能叫“自定义模…...

嵌入式系统开发流程

嵌入式系统开发流程&#xff1a;从概念到产品的技术之旅 在智能设备无处不在的今天&#xff0c;嵌入式系统作为其核心“大脑”&#xff0c;驱动着从智能家居到工业控制的各类应用。开发一个高效可靠的嵌入式系统&#xff0c;需要严谨的流程和跨学科协作。本文将带你深入探索这…...

AndroRAT客户端架构揭秘:Java实现远程控制的终极指南

AndroRAT客户端架构揭秘&#xff1a;Java实现远程控制的终极指南 【免费下载链接】AndroRAT A Simple android remote administration tool using sockets. It uses java on the client side and python on the server side 项目地址: https://gitcode.com/gh_mirrors/an/And…...

2026年毕业季论文写作:我踩过的坑和用过的工具

又到一年毕业季&#xff0c;朋友圈里不少人开始熬夜改论文。回想自己写毕业论文那段时间&#xff0c;最头疼的不是内容本身&#xff0c;而是“不知道怎么下手”——选题定了又改、改了又定&#xff1b;框架搭起来总觉得哪里不对&#xff1b;好不容易写出初稿&#xff0c;参考文…...

黄山派LVGL8实战:用Gui Guider的MultiLanguage模板快速做个多语言Demo

黄山派LVGL8多语言界面开发实战&#xff1a;基于Gui Guider的高效解决方案 在嵌入式设备开发中&#xff0c;用户界面的多语言支持一直是让开发者头疼的问题。传统方法需要手动管理字符串资源&#xff0c;不仅效率低下&#xff0c;还容易出错。本文将带你使用Gui Guider的MultiL…...

【毕设】毕业生实习与就业管理系统

&#x1f49f;博主&#xff1a;程序员俊星&#xff1a;CSDN作者、博客专家、全栈领域优质创作者 &#x1f49f;专注于计算机毕业设计&#xff0c;大数据、深度学习、Java、小程序、python、安卓等技术领域 &#x1f4f2;文章末尾获取源码数据库 &#x1f308;还有大家在毕设选题…...

别让一颗小电阻毁了你的时钟!手把手教你搞定有源晶振的匹配电阻(附LVDS/CMOS选型表)

有源晶振匹配电阻实战指南&#xff1a;从信号异常到稳定时钟的完整解决方案 时钟信号如同电子系统的心跳&#xff0c;而有源晶振则是这颗心脏的核心。在实际项目中&#xff0c;一颗不起眼的匹配电阻往往成为决定系统稳定性的关键因素。我曾亲眼见证过因匹配电阻设计不当导致整批…...