数据结构:(c实现)顺序表的 输入,输出,插入,删除,查找。(内附超详细代码)

2023-05-16

目录:

一:什么是顺序表

二:如何创建一个好的顺序表

      (1)动态和静态版本顺序表比较。

三:顺序表的基本操作

      (1)数据存入任意位置。

      (2)任意位置数据的删除。

       (3)顺序表中元素的修改

一:什么是顺序表

使用一段的物理地址连续的存储单元,依次存储数据元素的线性结构,一般的情况下用数组存储,在数组上完成 增 改 删 查等操作。(顺序表要求数据的存储必须是连续的

二:如何创建一个好的顺序表!!!!

(1)静态版本的顺序表

静态版本的顺序表,创建起来会比较简单,直接创建一个该种类型的长数组即可。但是在使用起来,会比较呆板,不够灵活,当存储的数据较少时,会造成内存浪费,当需要存储的数据较多时,会出现存满的情况。

(2)动态版本的顺序表

动态版本的顺序表,可以根据需要存储数据的量,去自动的增加存储空间(动态内存开辟)。这样在使用时,会比较灵活。当需要存储的数据较少时,不会造成内存的浪费,随着需要存储的数据增加,会自动增加存储空间。

(3)typedef  int  SQdataty;

将int类型重命名为SQdataty ,当需要存储的数据类型是其他类型时,可以直接修改在这个重命名处进行修改,可以大大增加程序的可维护性。如果现在需要创建一个char类型的顺序表,那么我们直接替换这个定义就可以了。

每次存储一个数据,size都加一,当size==capacity时,使用realloc扩容就可以实现动态版本的顺序表了。

//判断是否需要扩容


void SQlist_capacityadd(SQ* ps)
{
	assert(ps);
	if (ps->size == ps->capacity)
	{//说明需要开辟空间了
		SQdataty* ptr = (SQdataty*)realloc(ps->a, ps->capacity * 2 * sizeof(SQdataty));
		if (ptr == NULL)
		{//开辟空间失败
			perror(realloc);
			return;
		}
		else
		{//开辟空间成功,将新开辟的空间交给ps->a维护
			ps->a = ptr;
            ps->capacity *= 2;
		}
	}
}

综上,我们创建出了一个好的动态版本的顺序表,并对其进行了初始化。

 三:顺序表的基础操作 

(1)顺序表中数据的存储

我们定义了一个向顺序表中增加数据的函数(可以添加到顺序表的任意位置)

但是要注意该位置不能大于size

 当然我们在将数据存储到顺序表中的任意指定位置时,我们需要将该位置以后的数据向后移动一位。不然会将该位置的数据覆盖掉。(增加完成后ps->size需要++)

//将指定i位置的数据向后移动一位
void SQlistafter(SQ* ps, int i)
{
	int m = ps->size;
	if (i <= ps->size &&ps->size != 0)
	{
		for (m -= 1; m >= i; --m)
		{
			ps->a[m + 1] = ps->a[m];
		}
	}
	else  return;
}

//顺序表的增加   任意位置增加
void SQlistanyadd(SQ* ps,SQdataty tmp,int i)
{
	if (i > ps->size)
	{
		printf("不能跳跃存储\n");
		return;
	}
	else//   i<=ps->size
	{
		SQlistafter(ps, i);
		ps->a[i] = tmp;
		ps->size++;
		SQlist_capacityadd(ps);//判断是否需要扩容
	}
}

 (2)顺序表中任意位置数据的删除

和任意位置数据的添加一样,删除任意位置的一个数据,也需要将该位置后的数据向前移动一位。(因为顺序表需要连续存储)完成后ps->size需要--。

//顺序表的删除 任意位置
void SQlistanydelay(SQ* ps, int i)
{
	if (i > ps->size)
	{
		return;
	}
	else
	{
		for (int min = i - 1; min < ps->size; ++min)
		{
			ps->a[min] = ps->a[min + 1];
		}
		ps->size--;
	}
}

(3)顺序表中数据的查找

我们将顺序表的地址,与需要查找的元素作为参数,设计一个函数历遍该顺序表,如果查找到了该数据,便返回该元素的下标。找不到就返回  -1.

//顺序表中数据的查找
int SQlistcheck(SQ* ps, SQdataty tmp)
{
	for (int i = 0; i < ps->size; i++)
	{
		if (ps->a[i] == tmp)
		{
			return i;
		}
	}
	return -1;
}

//查找到的数据进行显示
void SQcheckPrin(SQ* ps, SQdataty tmp)
{
	if (SQlistcheck(ps, tmp) == -1)
	{
		printf("表中没有这个元素\n");
	}
	else
		printf("该元素在 %d号位置", SQlistcheck(ps, tmp)+1);
}

(4)顺序表中元素的修改

我们将顺序表的地址,与需要修改的元素,更改后的数据。作为参数,设计一个函数历遍该顺序表,如果查找到了该数据,就自动修改该数据。(这里还需要调用查找元素的函数)

//顺序表中数据的查找
int SQlistcheck(SQ* ps, SQdataty tmp)
{
	for (int i = 0; i < ps->size; i++)
	{
		if (ps->a[i] == tmp)
		{
			return i;
		}
	}
	return -1;
}


//顺序表中数据的修改
void SQlistchage(SQ* ps, SQdataty tmp, SQdataty tmp1)
{
	int i = SQlistcheck(ps, tmp);
	if (i == -1)
	{
		printf("没有该数据\n");
	}
	else
		ps->a[i] = tmp1;
}

下面我们来测试一个整个程序各种功能 

可以看到,测试的结果如预期一样。各种函数的功能也可以实现。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构:(c实现)顺序表的 输入,输出,插入,删除,查找。(内附超详细代码) 的相关文章

  • nginx 代理 负载均衡 网站转接的用法

    反向代理 1 xff0c 准备两台nginx真实服务器 a nginx 1 启动网站 内容 xff08 作为网站服务器 xff09 b nginx 2 启动代理程序 一 编辑nginx 2的配置文件 root 64 nginx server
  • LVS_Director + KeepAlived 部署

    1 xff0c 准备四台net机器 其中两台做主 备调度 别外两台做web机器 主 备调度器安装软件 root 64 lvs keepalived master yum y install ipvsadm keepalived 主 root
  • tomcat 详情介绍与部署

    1 xff0c 部署tomcat 安装JDK JDK下载面页 xff1a http www oracle com technetwork java javase downloads index html 下载jdk1 8到服务器 安装jdk
  • Redis 部署及介绍

    1 安装单机版redis root 64 redis master mkdir p data application 创建工作目录 root 64 redis master wget http download redis io relea
  • shenyu中logback替换成log4j2

    一 背景 shenyu框架默认使用的是logback处理日志 xff0c 压测发现写入日志存在瓶颈 基于log4j2优秀的性能 xff0c 使用log4j2替换logback 二 如何替换logback 1 删除logback的依赖项 sp
  • 图片项目部署

    1 xff0c 准备 mysql 主从 43 读写分离 3台 nginx 43 uwsgi 43 python3 6 1台 redis 哨兵 3台 A nginx uwsgi python3 上传代码包 xff0c 调试 B mysql r
  • Git 构建分布式版本控制系统详解

    安装git要4G以上内存 安装和配置必要的依赖关系 root 64 localhost yum install curl policycoreutils openssh server openssh clients 安装邮件程序 root
  • jenkins 详细部署

    部署jenkins需要以下的步骤 环境需要4G内存 1 xff0c 部署git 安装依赖环境 root 64 localhos yum install curl devel expat devel gettext devel openssl
  • RabbitMQ消息队列的部署

    RabbitMQ消息队列的用处 对于一个大型的软件系统来说 xff0c 它会有很多的组件或者说模块或者说子系统 xff08 subsystem or Component or submodule xff09 那么这些模块的如何通信 xff1
  • Docker 基础使用命令

    Docker下载 配置阿里云Docker Yum源 root 64 xingdian yum install y yum utils device mapper persistent data lvm2 git root 64 xingdi
  • docker部署mysql AB复制-详细步骤

    docker部署mysql AB复制 详细步骤 1 安装docker 参考链接 xff1a https blog csdn net qq 50263172 article details 109640641 spm 61 1001 2014
  • mysql 查询特定时间内的操作数量

    查询某几个月中每天的操作量 命令格式 Select DATE FORMAT 字段 39 Y m d 39 AS 34 时间 34 COUNT 1 AS 34 数量 34 FROM 表名 WHERE 字段 gt 39 2021 01 01 0
  • zabbix 邮箱,钉钉报警详解

    1 zabbix部署环境说明 zabbix监控服务器 xff1a mastsc zabbix被监控服务器 xff1a slave 两台机器关闭 34 selinux 34 xff1a setenforce 0 两台机器关闭防火墙 xff1a
  • Centos7离线安装redis

    Centos7离线安装redis 参考文档 xff1a https www cnblogs com yy3b2007com p 10513752 html 1 下载redis安装包 在 opt redis 如没有这个目录需要手动建立 roo
  • zabbix监控使用ping来判断主机是否存活,向邮箱发送邮件报警

    1 安装zabbix监控服务 server 和被监控服务器 slave 安装zabbix参考文档 https blog csdn net qq 50263172 article details 115519613 spm 61 1001 2
  • Feign调用错误no suitable HttpMessageConverter found for response type

    Feign接口 span class token annotation punctuation 64 PostMapping span span class token punctuation span value span class t
  • ubuntu WPS字体缺失 解决方法

    前言 请保证您还有一台windows 文章目录 前言一 在windows复制字体二 复制到ubuntu三 重启WPS总结 一 在windows复制字体 首先在windows下载好WPS xff0c 然后找到字体 xff0c 复制 二 复制到
  • 将IMG等镜像文件转换VMware虚拟机

    先下载好qemu这个转换软件 然后这个软件是用鼠标点不开的 xff0c 先到软件的文件路径然后在路径栏打cmd 或者另一种打开方法 xff0c 在文件所在位置 xff0c 按shift 43 鼠标右键 我这里用第一种 xff0c 接下来两条
  • VNC访问阿里云服务器

    最近阿里云年终特惠 xff0c 新用户服务器只要38一年 xff0c 爱住了呀 xff01 xff01 xff01 果断下单 xff01 买它个一年 xff01 接下来介绍如何通过vnc访问阿里云服务器 一 先要对端口进行开放 在服务器的防
  • ISCSI的部署与安装

    iSCSI xff08 Internet Small Computer System Interface xff0c Internet小型计算机系统接口 xff09 是一种由IBM公司研究开发的IP SAN技术 该技术是将现有SCSI接口与

随机推荐