C语言进阶|顺序表

news2025/9/19 19:46:03

✈顺序表的概念及结构

线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使
用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串..
线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,
线性表在物理上存储时,通常以数组和链式结构的形式存储。
案例:蔬菜分为绿叶类、瓜类、菌菇类。线性表指的是具有部分相同特性的一类数据结构的集合
如何理解逻辑结构和物理结构?

✈顺序表分类

🚀顺序表和数组的区别

顺序表的底层结构是数组,对数组的封装,实现了常用的增删改查等接口

🚀顺序表分类

🛸静态顺序表

概念:使用定长数组存储元素

🛸动态顺序表 

✈动态顺序表的实现 

typedef int SLTYPE;

typedef struct
{
	SLTYPE* sqlist;
	int size;//有效数据个数
	int capacity;//空间容量
}SL;
//变量的初始化
void SLInit(SL* sl);

//变量的销毁
void SLDestroy(SL* sl);

//打印顺序表
void SLPrint(SL* sl);

//插入数据
//1.头插
void SLPushHead(SL* sl, SLTYPE data);
//2.尾插
void SLPushBack(SL* sl, SLTYPE data);
//3.中间插
void SLInsert(SL* sl, SLTYPE data, int pos);

//删除数据
//1.头删
void SLPopHead(SL* sl);
//2.尾删
void SLPopBack(SL* sl);
//中间删
void SLErase(SL* sl,int pos);
//查找数据
int SLFind(SL* sl, SLTYPE data);

 🚀变量的初始化

//变量的初始化
void SLInit(SL* sl)
{
	sl->size = 0;
	sl->capacity = 0;
	sl->sqlist = NULL;
}

🚀变量的销毁

//变量的销毁
void SLDestroy(SL* sl)
{
	free(sl->sqlist);
	sl->sqlist = NULL;
	sl->size = sl->sqlist = 0;
}

打印顺序表

//打印顺序表
void SLPrint(SL* sl)
{
	for (int i = 0; i < sl->size; i++)
	{
		printf("%d ", *(sl->sqlist+i));
	}
	printf("\n");
}

插入数据

//插入数据
//1.头插
void SLPushHead(SL* sl,SLTYPE data)
{
	//先判断是否要扩容
	if (sl->size == sl->capacity)
	{
		int newcapacity = sl->capacity == 0 ? 4 : 2 * sl->capacity;
		SLTYPE* tmp = (SLTYPE*)realloc(sl->sqlist, newcapacity * sizeof(SLTYPE));
		if (tmp == NULL)
		{
			perror("realloc");
			exit(1);
		}
		sl->sqlist = tmp;
	}
	sl->sqlist[sl->size++] = data;
}
//2.尾插
void SLPushBack(SL* sl, SLTYPE data)
{
	if (sl->size == sl->capacity)
	{
		int newcapacity = sl->capacity == 0 ? 4 : 2 * sl->capacity;
		SLTYPE* tmp = (SLTYPE*)realloc(sl->sqlist, newcapacity * sizeof(SLTYPE));
		if (tmp == NULL)
		{
			perror("realloc");
			exit(1);
		}
		sl->sqlist = tmp;
	}
	for (int i = sl->size; i > 0 ; i--)
	{
		*(sl->sqlist + i) = *(sl->sqlist + i - 1);
	}
	sl->sqlist[0] = data;
	sl->size++;
}
//中间插
void SLInsert(SL* sl, SLTYPE data, int pos)
{
	if (sl->size == sl->capacity)
	{
		int newcapacity = sl->capacity == 0 ? 4 : 2 * sl->capacity;
		SLTYPE* tmp = (SLTYPE*)realloc(sl->sqlist, newcapacity * sizeof(SLTYPE));
		if (tmp == NULL)
		{
			perror("realloc");
			exit(1);
		}
		sl->sqlist = tmp;
	}
	for (int i = sl->size; i > pos; i--)
	{
		*(sl->sqlist + i) = *(sl->sqlist + i - 1);
	}
	sl->sqlist[pos] = data;
	sl->size++;
}

删除数据

//删除数据
//1.头删
void SLPopHead(SL* sl)
{
	sl->size--;
}
//2.尾删
void SLPopBack(SL* sl)
{
	for (int i = 0; i < sl->size-1; i++)
	{
		sl->sqlist[i] = sl->sqlist[i + 1];
	}
	sl->size--;
}
//中间删
void SLErase(SL* sl,int pos)
{
	for (int i = pos ; i < sl->size-1; i++)
	{
		sl->sqlist[i] = sl->sqlist[i + 1];
	}
	sl->size--;
}

查找数据

//查找数据
int SLFind(SL* sl, SLTYPE data)
{
	for (int i = 0; i < sl->size; i++)
	{
		if (data == sl->sqlist[i])
		{
			return i;
		}
	}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1584529.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

推荐学习什么编程语言?

选择编程语言学习时&#xff0c;除了就业因素外&#xff0c;还可以考虑以下几个方面来决定学习哪些编程语言&#xff1a; 个人兴趣与目标&#xff1a;如果你对某个特定领域感兴趣&#xff0c;比如游戏开发、数据分析、人工智能等&#xff0c;可以选择与该领域紧密相关的编程语言…

Python---【re库的使用】

目录&#xff1a; 一.re库简介 二.match方法 三.Match对象方法 四.使用search()方法进行匹配 五.使用findall()方法进行匹配 六.使用sub()方法替换字符串 七.使用split()方法分割字符串 一.re库简介 re库是Python用来实现“正则表达式”的库&#xff0c;并且re库在Pyth…

使用 nginx 服务器部署Vue项目

安装nginx 文本代理服务器 centos下载 注意需要root权限 在CentOS服务器上下载Nginx可以通过以下步骤完成&#xff1a; 更新系统软件包列表&#xff1a; yum update 安装EPEL存储库&#xff08;Extra Packages for Enterprise Linux&#xff09;&#xff1a; yum install…

分类预测 | Matlab实现KPCA-IDBO-LSSVM基于核主成分分析和改进蜣螂优化算法优化最小二乘支持向量机分类预测

分类预测 | Matlab实现KPCA-IDBO-LSSVM基于核主成分分析和改进蜣螂优化算法优化最小二乘支持向量机分类预测 目录 分类预测 | Matlab实现KPCA-IDBO-LSSVM基于核主成分分析和改进蜣螂优化算法优化最小二乘支持向量机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述…

Visual Studio C++ 正确创建项目与更改文件名

1、创建项目 1&#xff09;打开Visual Studio&#xff0c;选择创建新项目。 2&#xff09;创建空项目 3&#xff09;配置新项目&#xff0c;注意不要勾选 " 将解决方案和项目放在同一目录中 " 。并将位置的文件夹设为与解决方案同名&#xff0c;方便管理。项目名称则…

《零秒思考》像麦肯锡精英一样思考 - 三余书屋 3ysw.net

零秒思考&#xff1a;像麦肯锡精英一样思考 大家好&#xff0c;今天我们要深入探讨的著作是《零秒思考》。在领导提出问题时&#xff0c;我们常常会陷入沉思&#xff0c;却依然难以有所进展&#xff0c;仿佛原地踏步&#xff0c;但是身边的同事却能够立即给出清晰的回答。这种…

乡村智慧化升级:数字乡村打造农村生活新品质

目录 一、乡村智慧化升级的内涵与意义 二、乡村智慧化升级的具体实践 1、加强农村信息基础设施建设 2、推广智慧农业应用 3、提升乡村治理智慧化水平 4、丰富智慧乡村生活内容 三、数字乡村打造农村生活新品质的成果展现 1、农业生产效率与质量双提升 2、农民收入与消…

学习Rust的第二天:Cargo

We dive into Cargo, the powerful and convenient build system and package manager for Rust. 基于Steve Klabnik的《The Rust Programming Language》一书&#xff0c;我们深入了解Cargo&#xff0c;这是Rust强大而方便的构建系统和包管理器。 Cargo is a robust and effic…

Linux文件与目录的默认权限和隐藏权限

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Kubernetes航线图&#xff1a;从船长到K8s掌舵者》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、Linux的起源与发展 二、文件默认权限&#xf…

vitepress/vite vue3 怎么实现vue模版字符串实时编译

如果是vue模版字符串的话&#xff0c;先解析成模版对象 另一篇文章里有vue模版字符串解析成vue模版对象-CSDN博客 //vue3写法&#xff08;vue2可以用new Vue.extend(vue模版对象)来实现&#xff09;import { createApp, defineComponent } from vue;// 定义一个简单的Vue组件c…

【从浅学到熟知Linux】进程状态与进程优先级(含进程R/S/T/t/D/X/Z状态介绍、僵尸进程、孤儿进程、使用top及renice调整进程优先级)

&#x1f3e0;关于专栏&#xff1a;Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程及数据库等内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 进程状态进程状态查看R运行状态&#xff08;running&#xff09;S睡眠状态&#xff08;sleeping&a…

软考 系统架构设计师系列知识点之大数据设计理论与实践(2)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之大数据设计理论与实践&#xff08;1&#xff09; 所属章节&#xff1a; 第19章. 大数据架构设计理论与实践 第1节 传统数据处理系统存在的问题 最严重的问题是系统并没有对认为错误进行工程设计&#xff0c;仅靠备份是…

[C++]让C++的opencv库支持写出h264格式视频

当我们写下面测试代码时候&#xff1a; #include <opencv2/opencv.hpp>int main() {cv::VideoCapture cap("E:\\car.mp4"); // 打开默认摄像头if (!cap.isOpened()) {std::cout << "读取完毕!" << std::endl;return -1;}double fps ca…

HarmonyOS时区和语言设置-使用相关api实现系统语言和地区设置

介绍 本示例展示了i18n&#xff0c;intl&#xff0c;resourceManager在eTS中的使用&#xff0c;使用相关api实现系统语言和地区设置、时间和时区设置&#xff0c;展示了区域格式化示例。 效果预览 使用说明 1.启动应用&#xff0c;进入应用&#xff0c;首页分为三个按钮&…

Linux第87步_阻塞IO实验

阻塞IO是“应用程序”对“驱动设备”进行操作&#xff0c;若不能获取到设备资源&#xff0c;则阻塞IO应用程序的线程会被“挂起”&#xff0c;直到获取到设备资源为止。 “挂起”就是让线程进入休眠&#xff0c;将CPU的资源让出来。线程进入休眠后&#xff0c;当设备文件可以操…

nginx配置证书和私钥进行SSL通信验证

文章目录 一、背景1.1 秘钥和证书是两个东西吗&#xff1f;1.2 介绍下nginx配置文件中参数ssl_certificate和ssl_certificate_key1.3介绍下nginx支持的证书类型1.4 目前nginx支持哪种证书格式&#xff1f;1.5 nginx修改配置文件目前方式也会有所不同1.6 介绍下不通格式的证书哪…

Vue2.x实现商城购物车

1.实现购物车页面 在页面中显示购物车中的商品信息&#xff0c;并能进行数量增减及商品删除操作&#xff0c;购物车中金额也随商品数量的变化而变化 2.创建cart.html页面 创建cart.html页面&#xff0c;在其中创建Vue实例&#xff0c;实例中首先准备一些商品信息以供显示&a…

从TensorFlow到PyTorch:我为何选择后者开启深度学习之旅

在深度学习的浪潮中&#xff0c;TensorFlow和PyTorch无疑是两大最受欢迎的框架。它们各自拥有庞大的社区支持、丰富的文档资源和强大的功能&#xff0c;使得开发者们可以根据自己的需求选择合适的工具。然而&#xff0c;在我深入研究和实践之后&#xff0c;我最终选择了PyTorch…

Day20_学点儿JavaEE_基于Session的登录、数据库null值正确显示

1 登录 使用Session技术完成用户登录的功能&#xff1a; 登录功能会使用到Session&#xff0c;把用户登录的用户名和密码保存到Session&#xff0c;因为Session是属于每个用户独有的&#xff0c;就可以记录每个用户单独的登录信息。 当然&#xff0c;这仅仅是完成了一个简单的…

NL2SQL基础系列(1):业界顶尖排行榜、权威测评数据集及LLM大模型(Spider vs BIRD)全面对比优劣分析[Text2SQL、Text2DSL]

NL2SQL基础系列(1)&#xff1a;业界顶尖排行榜、权威测评数据集及LLM大模型&#xff08;Spider vs BIRD&#xff09;全面对比优劣分析[Text2SQL、Text2DSL] Text-to-SQL&#xff08;或者Text2SQL&#xff09;&#xff0c;顾名思义就是把文本转化为SQL语言&#xff0c;更学术一…