C语言---顺序表(二)

文章目录

  • 前言
  • 1.准备工作
  • 2.代码的实现
    • 2.1.顺序表的创建、销毁和打印
    • 2.2.顺序表的扩容、头插\删、尾插\删
      • 2.2.1.扩容
      • 2.2.2.尾插
      • 2.2.3.头插
      • 2.2.3.尾删
      • 2.2.4.头删
    • 2.3.指定位置之前插入/删除数据/查找数据
      • 2.3.1.指定位置之前插入数据
      • 2.3.2.指定位置之前删除数据
      • 2.3.3.查找特定数据
  • 总结


前言

上一篇,我们认识到了顺序表,以及实现顺序表操作的相关函数,下面我们来一一实现。


1.准备工作

示例:
打开vs2022,创建三个文件在这里插入图片描述
其中SeqList.h头文件是用来记录的,相当于一本书的目录
SeqList.c文件是用来实现函数的,相当于各种公式
test.c是用来测试的。
记住:一个好的习惯是,写完一个函数,要测试一个函数。

2.代码的实现

2.1.顺序表的创建、销毁和打印

//初始化
void SLInit(SL* ps)
{
	ps->arr = NULL;
	ps->size = ps->capacity = 0;
}

//销毁
void SLDestroy(SL* ps)
{
	if (ps->arr)
	{
		free(ps->arr);
	}
	ps->capacity = ps->size = 0;
}
//打印
void SLPrint(SL* ps)
{
	for (int i = 0; i < ps->size; i++)
	{
		printf("%d ", ps->arr[i]);
	}
	printf("\n");
}

这个代码较为简单。
思考:为什么向函数中传递形参时,是用指针,如果不是指针,会发生什么,大家可以试试。

2.2.顺序表的扩容、头插\删、尾插\删

2.2.1.扩容

//扩容
void SLCheckCapacity(SL* ps)
{
	if (ps->capacity == ps->size)
	{
		int newCapacity = ps->capacity == 0 ? 4 : 2 * ps->capacity;
		SeqDataType* tmp = (SeqDataType*)realloc(ps->arr,sizeof(SeqDataType) * newCapacity);
		if (tmp == NULL)
		{
			perror("realloc fail!");
			exit(1);
		}
		ps->capacity = newCapacity;
		ps->arr = tmp;
	}
}

2.2.2.尾插

void SLPushBack(SL* ps, SeqDataType x)
{
	assert(ps);
	//要判断arr空间是否充足
	SLCheckCapacity(ps);
	ps->arr[ps->size++] = x;
	
}

2.2.3.头插

void SLPushFront(SL* ps, SeqDataType x)
{
	assert(ps);
	SLCheckCapacity(ps);
	//要将原来数组的每一个数,移动到前面
	for (int i = ps->size; i>0; i--)
	{
		ps->arr[i] = ps->arr[i - 1];//arr[1]=arr[0]
	}
	ps->arr[0] = x;
	ps->size++;
}

2.2.3.尾删

尾删可能是最简单的,但是可能第一次想象不到,只需要size–即可,在输出的结果上一看,便是少了一个,并且也是最后一个。

void SLPopBack(SL* ps)
{
	assert(ps);
	assert(ps->arr);//删着删着,最后要是顺序表为空,要报警
	ps->size--;
}

2.2.4.头删

void SLPopFront(SL* ps)
{
	assert(ps && ps->arr);
	//删除第一个数字后,将后面的数字,移动到前面
	for (int i=0; i<ps->size-1; i++)
	{
		ps->arr[i] = ps->arr[i+1];//arr[size-2]=arr[size-1]
	}
	ps->size--;
}

2.3.指定位置之前插入/删除数据/查找数据

2.3.1.指定位置之前插入数据

void SLInsert(SL* ps, int pos, SeqDataType x)
{
	assert(ps && ps->arr);
	assert(pos >= 0 && pos < ps->size);
	SLCheckCapacity(ps);
	for (int i = ps->size; i>pos; i--)
	{
		ps->arr[i] = ps->arr[i-1];
	}
	ps->arr[pos] = x;
	ps->size++;
}

assert(pos >= 0 && pos < ps->size);为什么不是<=呢,是因为咱们得目的是让数据插入到指定位置之前,如果传入的位置是ps->size的话,最后的代码将会是在ps->size之后插入的,不符合需要的功能,所以是<

2.3.2.指定位置之前删除数据

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

2.3.3.查找特定数据

int SLFind(SL* ps, SeqDataType x)
{
	for (int i = 0; i < ps->size; i++)
		if (ps->arr[i] == x)
			return i;
	return -1;
}

总结

上面便是顺序表的常见的操作,大家可以根据代码,自己理解,并掌握。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT基础(二) ChatGPT的使用和调优

文章目录 ChatGPT的特性采用关键词进行提问给ChatGPT指定身份提升问答质量的策略1.表述方式上的优化2.用"继续"输出长内容3.营造场景4.由浅入深&#xff0c;提升问题质量5.预设回答框架和风格 ChatGPT的特性 1.能够联系上下文进行回答 ChatGPT回答问题是有上下文的&…

Samba实现windows和Linux共享文件,环境搭建

​ 搭建步骤 安装sambad sudo apt-get install samba samba-common 创建samba用户和密码 此处使用 Linux 账号和密码作为 samba 的账号和密码。Linux 账号为 shelmean shelmeanmachine:[~] $ sudo smbpasswd -a shelmean New SMB password: Retype new SMB password: Add…

MongoDB副本集部署(windows)

环境准备 本教程演示mongodb4.4 副本集部署&#xff08;一主两从&#xff0c;伪分布式&#xff09; 节点配置主节点localhost:27017从节点1localhost:27018从节点2localhost:27019 每一个节点&#xff08;实例&#xff09;都创建对应的数据文件&#xff08;data&#xff09;…

记一次空迭代器导致的崩溃分析

一. 崩溃代码&#xff1a; class EasySelect::Impl { public:Impl() default;std::vector<int> waitForReadable ();void addFd (int fd);void removeFd (int fd);void stopWait ();private:std::vector<int> m_fds;std::mutex m_fdsMutex;std::mutex m_pipeMute…

MySQL数据导出导出的三种办法(13/16)

数据导入导出 基本概述 目前常用的有3中数据导入与导出方法&#xff1a; 使用mysqldump工具&#xff1a; 优点&#xff1a; 简单易用&#xff0c;只需一条命令即可完成数据导出。可以导出表结构和数据&#xff0c;方便完整备份。支持过滤条件&#xff0c;可以选择导出部分数据…

python知识点汇总(十一)

python知识点总结 1、当Python退出时&#xff0c;是否会清除所有分配的内存&#xff1f;2、Python的优势有哪些&#xff1f;3、什么是元组的解封装4、Python中如何动态获取和设置对象的属性&#xff1f;5、创建删除操作系统上的文件6、主动抛出异常7、help() 函数和 dir() 函数…

数据结构-----枚举、泛型进阶(通配符?)

文章目录 枚举1 背景及定义2 使用3 枚举优点缺点4 枚举和反射4.1 枚举是否可以通过反射&#xff0c;拿到实例对象呢&#xff1f; 5 总结 泛型进阶1 通配符 ?1.1 通配符解决什么问题1.2 通配符上界1.3 通配符下界 枚举 1 背景及定义 枚举是在JDK1.5以后引入的。主要用途是&am…

加速杂交水稻走向世界 政协委员建议在湖南设立一“协会”一“中心”

中新网北京3月8日电 (刘曼)针对中国杂交水稻海外“飘香”的现象&#xff0c;全国政协委员、湖南省政协副主席、民盟湖南省委会主委何寄华建议&#xff0c;在湖南建立杂交水稻国际合作交流协会、设立杂交水稻国际科技合作技术转移中心&#xff0c;支持杂交水稻走向世界。 全国政…

计算机基础知识-第7章-程序的本质(2)——算法与数据结构概论

一、算法数据结构程序 提出这一公式并以此作为其一本专著的书名的瑞士计算机科学家尼克劳斯沃思&#xff08;Niklaus Wirth&#xff09;由于发明了多种影响深远的程序设计语言&#xff0c;并提出结构化程序设计这一革命性概念而获得了1984年的图灵奖。他是至今惟一获此殊荣的瑞…

Python爬取链家数据

技术&#xff1a;requests、BeautifulSoup、SQLite 解析页面&#xff0c;存数据到SQLite数据库&#xff0c;到时候你用navicat导出成csv什么的就行 1、确定城市 以天津为例&#xff0c;网页是https://tj.lianjia.com/ershoufang/rs/ 把上面这些地区名字复制 2、爬取数据内容…

三天做完pandas数据分析50题第一天

三天做完pandas数据分析50题第一天 第1题 将python的list转换为Series第2题 将字典转换为Series第3题 将Series转换成python的list第4题 使用numpy创建series。第5题 如何为Series添加新的元素&#xff1f;第6题 使用字典创建DataFrame第7题 给DataFrame设置索引列第8题 生成一…

每日一题---OJ题: 合并两个有序链表

嗨!小伙伴们,好久不见啦! 今天我们来看看一道很有意思的一道题---合并两个有序链表 嗯,题目看上去好像不难,我们一起画图分析分析吧! 上图中,list1有3个结点,分别为1,2,3 ; list2中有3个结点,分别为1,3,4, 题目要求我们要将这两个链表合并到一起,并且是升序,最后将链表返回。 …

光威神策PRO PCIe 5.0 SSD发布,国产固态硬盘进入10G俱乐部

全球半导体供应链的紧张局势和闪存资源的短缺让许多行业都面临着不小的压力 &#xff0c; 连带的也让消费者难以获取物美价廉的闪存产品 。但是&#xff0c;总有一些企业能够逆流而上&#xff0c; 像是 光威科技这家国产存储品牌&#xff0c; 最近就给国内消费者 带来了一个惊喜…

mybatis05:复杂查询:(多对一,一对多)

mybatis05&#xff1a;复杂查询&#xff1a;&#xff08;多对一&#xff0c;一对多&#xff09; 文章目录 mybatis05&#xff1a;复杂查询&#xff1a;&#xff08;多对一&#xff0c;一对多&#xff09;前言&#xff1a;多对一 &#xff1a; 关联 &#xff1a; 使用associatio…

Echarts-实现地图并轮播地图信息

目录 ./map-geojson/jinhua.json./CenterMap.vue./center.vue 使用地图组件效果 ./map-geojson/jinhua.json {"type":"FeatureCollection","features":[{"type":"Feature","properties":{"adcode":330…

力扣—2024 春招冲刺百题计划

矩阵 1. 螺旋矩阵 代码实现&#xff1a; /** param matrix int整型二维数组 * param matrixRowLen int matrix数组行数* param matrixColLen int* matrix数组列数* return int整型一维数组* return int* returnSize 返回数组行数 */ int* spiralOrder(int **matrix, int matri…

网工内推 | 网络工程师,13薪,周末双休,华三、华为认证优先

01 路邦远大 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1、配合市场销售人员&#xff0c;做好产品的售后服务工作&#xff1b; 2、负责项目方案安装调试指导以及日常客户使用培训&#xff0c;对客户提出的问题提出解决方案&#xff1b; 3、为客户提供专业、规范的…

图片作为背景的闪白问题,6种基础方案, 不会不知道吧

前言 关于【SSD系列】&#xff1a; 前端一些有意思的内容&#xff0c;旨在3-10分钟里&#xff0c; 500-1500字&#xff0c;有所获&#xff0c;又不为所累。 某天&#xff0c;发现有背景图片的弹出框&#xff0c;会出现闪白现象&#xff0c;这&#xff0c;兄弟们&#xff0c;你…

导入芯片原厂SDK Mirror源码到gerrit

下载镜像代码 repo init --mirror --repo-url ssh://xx/repo.git -u ssh://xx/manifests.git -m manifest.xml repo sync 创建AOSP project 对All Project权限修改 创建repo 在刚才下载的codebase根目录执行如下命令&#xff1a; repo forall -c echo $REPO_PROJECT; ssh -p 29…