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

C语言_数据结构总结1:静态分配方式的顺序表

   纯C语言代码,不涉及C++   

1. 初始化   

#define MaxSize 50
typedef int ElemType;

typedef struct SQList {
    ElemType data[MaxSize];    //定义一个数组存放顺序表元素
    int length;                            //顺序表当前的长度(元素个数)
}SqList;                                   //给顺序表SQList起别名为SqList

void InitSqList(SqList* L) {  //初始化操作
    L->length = 0;  //顺序表初始化长度为0
}

2. 插入   

即:在第pos个位置插入value值,即在数组下标pos-1的位置插入value值

int InsertSqList(SqList* L, int pos, ElemType value) {//1.判断插入位置是否合法if (pos < 1 || pos > L->length + 1) {return -1; // 插入位置不合法}//2.判断顺序表存储空间是否满了if (L->length >= MaxSize) {return -2; // 顺序表空间已满}//3.将第pos个位置及往后的元素都后移一个位置,空出第pos个位置(这里采用逆序遍历)for (int i = L->length; i >= pos; i--) {L->data[i] = L->data[i - 1];}//4.插入数据L->data[pos - 1] = value;//5.表长加1L->length++;return 0; // 插入成功
}

3. 按位查找   

即:即返回第pos个位置(数组下标为pos-1)对应的value值

int findValueByPos(SqList* L, int pos, ElemType* value) {//1.判断要查找的位置是否合理if (pos < 1 || pos > L->length) {return -1; // 查找位置不合法}//2.查找第pos个位置对应的value值*value = L->data[pos - 1];return 0; // 查找成功
}

4. 按值查找   

即:即返回value值的位序,即第几个,下标加1

int findPosByValue(SqList* L, ElemType value) {for (int i = 0; i < L->length; i++) {if (L->data[i] == value) {return i + 1;}}return -1; // 未找到该值
}

5. 删除   

即:将第pos个的值赋值给value后腾开第pos个位置
然后将第pos个后的数据都往前移一个位置,填补第pos个位置

int deleteSqList(SqList* L, int pos, ElemType* value) {//1.判断要删除的位置是否合理,即是否在存有数据的范围里if (pos < 1 || pos > L->length) {return -1; // 删除位置不合法}//2.判断空间是否为空if (L->length == 0) {return -2; // 顺序表空间为空}//3.将被删除的元素赋值给value*value = L->data[pos - 1];//4.将第pos个位置往后的元素都前移一个位置for (int i = pos; i < L->length; i++) {L->data[i - 1] = L->data[i];}

6. 注销   

注意:由于顺序表采用的是静态分配方式,L->data 是一个数组,并非动态分配的内存,所以不能使用 free(L->data) 来释放内存。同时,L 是在栈上分配的,也不能使用 free(L) 释放。

void  destroySqList(SqList* L) {//静态分配无需释放内存if (L != NULL){L->length = 0;}
}

7. 打印顺序表

void printSqList(SqList* L) {  //让打印的最后一个元素末尾没有空格if (L->length == 0) {printf("当前顺序表为空!\n");}else {for (int i = 0; i < L->length; i++) {if (i == L->length - 1) {printf("%d", L->data[i]);}else {printf("%d ", L->data[i]);}}printf("\n");}printf("--------------------------------------------------\n");
}

9. 测试代码   

int main() {SqList L;InitSqList(&L);//插入数据测试InsertSqList(&L, 1, 18);InsertSqList(&L, 2, 7);InsertSqList(&L, 3, 34);printSqList1(&L);  //18 7 34//删除数据测试ElemType value;deleteSqList(&L, 2,&value);printSqList1(&L);  //18 34//查找位置1的值是什么ElemType val = findValueByPos(&L, 1);  printf("%d\n",val);  //18//查找值18在顺序表的第几个位置int pos = findPosByValue(&L,18);printf("%d\n", pos);  //1//销毁顺序表destroySqList(&L);return 0;
}

10. 完整代码   

#include <stdio.h>
#include <stdlib.h>/*静态分配的顺序表
*/#define MaxSize 50
typedef int ElemType;typedef struct SQList {ElemType data[MaxSize];  //定义一个数组存放顺序表元素int length;              //顺序表当前的长度(元素个数)
} SqList; //给顺序表SQList起别名为SqList//操作1——初始化
void InitSqList(SqList* L) {L->length = 0;  //顺序表初始化长度为0
}//操作2——插入:在第pos个位置插入value值,即在数组下标pos-1的位置插入value值
int InsertSqList(SqList* L, int pos, ElemType value) {//1.判断插入位置是否合法if (pos < 1 || pos > L->length + 1) {return -1; // 插入位置不合法}//2.判断顺序表存储空间是否满了if (L->length >= MaxSize) {return -2; // 顺序表空间已满}//3.将第pos个位置及往后的元素都后移一个位置,空出第pos个位置(这里采用逆序遍历)for (int i = L->length; i >= pos; i--) {L->data[i] = L->data[i - 1];}//4.插入数据L->data[pos - 1] = value;//5.表长加1L->length++;return 0; // 插入成功
}//操作3——按位查找,即返回第pos个位置对应的value值
int findValueByPos(SqList* L, int pos, ElemType* value) {//1.判断要查找的位置是否合理if (pos < 1 || pos > L->length) {return -1; // 查找位置不合法}//2.查找第pos个位置对应的value值*value = L->data[pos - 1];return 0; // 查找成功
}//操作4——按值查找,即返回value值的位序,即第几个,下标加1
int findPosByValue(SqList* L, ElemType value) {for (int i = 0; i < L->length; i++) {if (L->data[i] == value) {return i + 1;}}return -1; // 未找到该值
}//操作5——删除:将第pos个的值赋值给value后腾开第pos个位置
// 然后将第pos个后的都数据往前移一个位置,填补第pos个位置
int deleteSqList(SqList* L, int pos, ElemType* value) {//1.判断要删除的位置是否合理,即是否在存有数据的范围里if (pos < 1 || pos > L->length) {return -1; // 删除位置不合法}//2.判断空间是否为空if (L->length == 0) {return -2; // 顺序表空间为空}//3.将被删除的元素赋值给value*value = L->data[pos - 1];//4.将第pos个位置往后的元素都前移一个位置for (int i = pos; i < L->length; i++) {L->data[i - 1] = L->data[i];}//4.表长减1L->length--;return 0; // 删除成功
}//操作6——注销
void destroySqList(SqList* L) {//静态分配无需释放内存if (L != NULL) {L->length = 0;}
}//操作7——打印顺序表里存放的数据
void printSqList(SqList* L) {if (L->length == 0) {printf("当前顺序表为空!\n");}else {for (int i = 0; i < L->length; i++) {if (i == L->length - 1) {printf("%d", L->data[i]);}else {printf("%d ", L->data[i]);}}printf("\n");}printf("--------------------------------------------------\n");
}//测试
int main() {SqList L;InitSqList(&L);//插入数据测试if (InsertSqList(&L, 1, 18) != 0) {printf("插入失败!\n");}if (InsertSqList(&L, 2, 7) != 0) {printf("插入失败!\n");}if (InsertSqList(&L, 3, 34) != 0) {printf("插入失败!\n");}printSqList(&L);  //18 7 34//删除数据测试ElemType value;if (deleteSqList(&L, 2, &value) != 0) {printf("删除失败!\n");}printSqList(&L);  //18 34//查找位置1的值是什么ElemType val;if (findValueByPos(&L, 1, &val) == 0) {printf("%d\n", val);  //18}else {printf("查找失败!\n");}//查找值18在顺序表的第几个位置int pos = findPosByValue(&L, 18);if (pos != -1) {printf("%d\n", pos);  //1}else {printf("未找到该值!\n");}//销毁顺序表destroySqList(&L);return 0;
}

11. 运行截图

如有问题,欢迎指出!

谢谢!

相关文章:

C语言_数据结构总结1:静态分配方式的顺序表

纯C语言代码&#xff0c;不涉及C 1. 初始化 #define MaxSize 50 typedef int ElemType; typedef struct SQList { ElemType data[MaxSize]; //定义一个数组存放顺序表元素 int length; //顺序表当前的长度&#xff08;元素个数…...

C语言--简单排序算法(冒泡、选择、插入)

实现三种简单的排序算法 文章目录 冒泡排序改进改进2 选择排序插入排序执行结果 冒泡排序 每次外层循环&#xff0c;排出一个最大值 void bubbleSort(int arr[], int len) {for (int i 0; i < len - 1; i) {for (int j 0; j < len - i - 1; j) {if (arr[j] > arr[…...

【文献阅读】The Efficiency Spectrum of Large Language Models: An Algorithmic Survey

这篇文章发表于2024年4月 摘要 大语言模型&#xff08;LLMs&#xff09;的快速发展推动了多个领域的变革&#xff0c;重塑了通用人工智能的格局。然而&#xff0c;这些模型不断增长的计算和内存需求带来了巨大挑战&#xff0c;阻碍了学术研究和实际应用。为解决这些问题&…...

MySQL-高级查询

查询处理 排序&#xff08;默认不是按主键排序的&#xff09; order by 字段1[&#xff0c;字段2] [asc|desc] 默认是升序排序也可以指定 select 列表中列的序号进行排序如果是多个字段&#xff0c;那么在上一个字段排序完的基础上排序下一个 限制数量 limit 行数&#xff0…...

Netty笔记10:LengthFieldBasedFrameDecoder很简单,请看

Netty笔记1:线程模型 Netty笔记2:零拷贝 Netty笔记3:NIO编程 Netty笔记4:Epoll Netty笔记5:Netty开发实例 Netty笔记6:Netty组件 Netty笔记7:ChannelPromise通知处理 Netty笔记8:ByteBuf使用介绍 Netty笔记9:粘包半包 Netty笔记10:LengthFieldBasedFrameDec…...

linux 安装Mysql无法远程访问问题的排查

宝塔面板安装了mysql5.6后 只能本地访问 firewall 在使用宝塔面板&#xff08;BT Panel&#xff09;安装 MySQL 5.6 后&#xff0c;如果你发现 MySQL 只能本地访问&#xff0c;而不能从其他机器或服务访问&#xff0c;这通常是由于防火墙设置或 MySQL 配置的问题。以下是一些步…...

DeepSeek搭配Excel,制作自定义按钮,实现办公自动化!

今天跟大家分享下我们如何将DeepSeek生成的VBA代码&#xff0c;做成按钮&#xff0c;将其永久保存在我们的Excel表格中&#xff0c;下次遇到类似的问题&#xff0c;直接在Excel中点击按钮&#xff0c;就能10秒搞定&#xff0c;操作也非常的简单. 一、代码准备 代码可以直接询问…...

英文生物信息学技术社区Top10推荐:基本情况、评介和网页链接

英文生物信息学技术社区Top10推荐&#xff1a;基本情况、评介和网页链接 李升伟 一、思考与分析 生物信息学涉及生物数据分析和计算工具&#xff0c;所以相关的社区可能包括论坛、问答平台、资源库等等。 首先&#xff0c;我想到Biostars&#xff0c;这是一个比较知名的生物信…...

Lumerical INTERCONNECT 中的自相位调制 (SPM)

一、自相位调制的数学介绍 A.非线性薛定谔方程&#xff08;NLSE&#xff09;&#xff1a; NLSE 是光学中的一个关键方程。它告诉我们光脉冲在具有非线性和色散特性的介质中的行为方式。该方程如下所示&#xff1a; i ∂A/∂z β2/2 ∂A/∂t γ|A|A 0 其中&#xff1a; - …...

每日定投40刀BTC(6)20250227 - 20250302

定投 得而复失 《得而复失》初得明珠喜欲狂&#xff0c;转瞬即逝心彷徨。得失之间悟真谛&#xff0c;淡看浮华守本常。...

leetcode 230. 二叉搜索树中第 K 小的元素

题目如下 数据范围 利用一个全局的计数器每过一个节点就加一&#xff0c;再利用中序遍历的特性&#xff08;即遍历到的节点是从小到大的&#xff09;通过代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeN…...

华为hcia——Datacom实验指南——配置手工模式以太网链路聚合

什么是以太网链路聚合&#xff08;Eth-trunk&#xff09; 是一种将多个物理链路捆绑在一起&#xff0c;让设备以为是一条大链路&#xff0c;能够增加带宽&#xff0c;增加冗余度&#xff0c;提升可靠性&#xff0c;实现负载平衡。 传输方式有两种 基于数据流传输和基于数据包…...

Metal学习笔记十一:贴图和材质

在上一章中&#xff0c;您设置了一个简单的 Phong 光照模型。近年来&#xff0c;研究人员在基于物理的渲染 &#xff08;PBR&#xff09; 方面取得了长足的进步。PBR 尝试准确表示真实世界的着色&#xff0c;真实世界中离开表面的光量小于表面接收的光量。在现实世界中&#xf…...

VirtualBox虚拟机MacOS从Big Sur升级到Sequoia(失败)

VirtualBox虚拟机里安装好Big Sur版本&#xff0c;尝试升级到Sequoia&#xff0c;但是最终失败了。 软件升级 直接在系统偏好-软件更新里可以看到提示&#xff0c;提示可以升级到15版本Sequoia 点击同意&#xff0c;看能不能升级到Sequoia吧。升级前先用时光做了备份。 升级…...

*算法中的数据结构(3)

持续更新 1.单调栈 它依旧是⼀个栈结构&#xff0c;只不过⾥⾯存储的数据是递增或者递减的。 2. 单调栈解决的问题 *寻找当前元素左侧&#xff0c;离它最近&#xff0c;并且⽐它⼤的元素在哪&#xff1b; • 寻找当前元素左侧&#xff0c;离它最近&#xff0c;并且⽐它⼩的元素…...

【大模型系列篇】国产开源大模型DeepSeek-V3技术报告解析

DeepSeek-V3技术报告 目录 DeepSeek-V3技术报告 1. 摘要 2. 引言 3. DeepSeek V3 架构 3.1 基础架构 3.1.1. 多头潜在注意力 3.1.2. DeepSeekMoE和无辅助损失的负载均衡 3.2 多令牌预测 4. 基础设施 4.1 计算集群 4.2 训练框架 4.2.1. DualPipe算法与计算通信协同优…...

MyBatisPlus搭建教程

简介 搭建MyBatisPlus2.x 构建项目 配置Maven 引入依赖 springboot <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>com.alibaba</groupId>&l…...

【商城实战(2)】商城架构设计:从底层逻辑到技术实现

【商城实战】专栏重磅来袭&#xff01;这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建&#xff0c;运用 uniapp、Element Plus、SpringBoot 搭建商城框架&#xff0c;到用户、商品、订单等核心模块开发&#xff0c;再到性能优化、安全加固、多端适配&#xf…...

数据序列化协议 Protobuf 3 介绍(Go 语言)

Protobuf 3 入门 1. 什么是序列化&#xff1f; 1.1 概念 序列化&#xff08;Serialization 或 Marshalling&#xff09; 是指将数据结构或对象的状态转换成可存储或传输的格式。反向操作称为反序列化&#xff08;Deserialization 或 Unmarshalling&#xff09;&#xff0c;它…...

从芯片到光网络:解密平面光波导技术(PLC)核心优势

关键词&#xff1a;PLC、OFDR、光链路检测 平面光波导技术&#xff08;Planar Lightwave Circuit, PLC&#xff09;是一种基于平面波导结构的光学器件制造技术。它通过在平面基底上制作光波导&#xff0c;实现光信号的传输、分路、耦合、调制等功能。PLC技术的核心在于利用光波…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

Leetcode33( 搜索旋转排序数组)

题目表述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...

02.运算符

目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&&#xff1a;逻辑与 ||&#xff1a;逻辑或 &#xff01;&#xff1a;逻辑非 短路求值 位运算符 按位与&&#xff1a; 按位或 | 按位取反~ …...

Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解

文章目录 一、开启慢查询日志&#xff0c;定位耗时SQL1.1 查看慢查询日志是否开启1.2 临时开启慢查询日志1.3 永久开启慢查询日志1.4 分析慢查询日志 二、使用EXPLAIN分析SQL执行计划2.1 EXPLAIN的基本使用2.2 EXPLAIN分析案例2.3 根据EXPLAIN结果优化SQL 三、使用SHOW PROFILE…...

从零手写Java版本的LSM Tree (一):LSM Tree 概述

&#x1f525; 推荐一个高质量的Java LSM Tree开源项目&#xff01; https://github.com/brianxiadong/java-lsm-tree java-lsm-tree 是一个从零实现的Log-Structured Merge Tree&#xff0c;专为高并发写入场景设计。 核心亮点&#xff1a; ⚡ 极致性能&#xff1a;写入速度超…...

在Spring Boot中集成RabbitMQ的完整指南

前言 在现代微服务架构中&#xff0c;消息队列&#xff08;Message Queue&#xff09;是实现异步通信、解耦系统组件的重要工具。RabbitMQ 是一个流行的消息中间件&#xff0c;支持多种消息协议&#xff0c;具有高可靠性和可扩展性。 本博客将详细介绍如何在 Spring Boot 项目…...