基础数据结构-顺序表

news2024/9/20 18:36:48

顺序表

  • 顺序表定义
    • 结构体定义
    • 初始化
    • 扩容函数
    • 打印函数
    • 尾插和尾删
    • 头插和头删
    • 查找函数
    • 指定位置插入和删除
    • 顺序表销毁

在这里插入图片描述

顺序表定义

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

顺序表又分为:静态顺序表和动态顺序表。

结构体定义

结构体定义:

//定义变量类型
#define DataType int
#define MAX 100
//顺序表结构声明


静态顺序表
//struct SeqList {
//	DataType data[MAX];
//	int size;
//};


//动态顺序表
typedef struct SeqList
{
	DataType* data;
	int size;	//顺序表当前大小
	int capacity; //容量
}SeqList;

本文主要实现动态结构体

初始化

在使用数据之前,我们需要将数据进行初始化:

//顺序表初始化
void SeqListInit(SeqList* psl)
{
	assert(psl);
	psl->data = NULL;
	psl->capacity = 0;
	psl->size = 0;
}

扩容函数

动态顺序表有随时扩容的优点,因此当容量不足时,要能随时扩容

//空间不足,开辟空间
void CheckCapacity(SeqList* psl)
{
	//空间满了
	if (psl->capacity == psl->size)
	{
		//首次开辟默认4,以后开辟会多2倍
		int newcapacity = psl->capacity == 0 ? 4 : psl->capacity * 2;
		DataType* tem = realloc(psl->data, sizeof(DataType) * newcapacity);
		if (tem == NULL)
		{
			//开辟失败,中止程序
			printf("开辟空间失败");
			//开辟不足直接中止函数
			exit(-1);
		}
		psl->data = tem;
		psl->capacity = newcapacity;
	}
}

打印函数

为了方便观察代码的逻辑还写了一个打印函数

//打印顺序表
void SeqListPrint(SeqList* psl)
{
	//断言的作用:防止传进来的指针为空!
	assert(psl);
	for (int i = 0; i < psl->size; i++)
	{
		printf("%d ", psl->data[i]);
	}
	printf("\n");
}

尾插和尾删

直接在尾部插入和删除数据。

//尾插
void SeqListPushBack(SeqList* psl, DataType x)
{
	//断言的作用:防止传进来的指针为空!
	assert(psl);
	//空间不够开辟空间
	CheckCapacity(psl);
	psl->data[psl->size] = x;
	psl->size++;
}

//尾删
void SeqListPopBack(SeqList* psl)
{
	//断言的作用:防止传进来的指针为空!
	assert(psl);
	assert(psl->size > 0);
	psl->size--;
}

头插和头删

在头部插入和删除数据。

//头插
void SeqListPushFront(SeqList* psl, DataType x)
{
	//断言的作用:防止传进来的指针为空!
	assert(psl);
	CheckCapacity(psl);
	//尾坐标
	int end = psl->size - 1;
	while (end >= 0)
	{
		psl->data[end + 1] = psl->data[end];
		end--;
	}
	psl->data[0] = x;
	psl->size++;
}


//头删
void SeqListPopFront(SeqList* psl)
{
	//断言的作用:防止传进来的指针为空!
	assert(psl);
	assert(psl->size > 0);
	int end = 1;
	while (end < psl->size)
	{
		psl->data[end - 1] = psl->data[end];
		end++;
	}
	psl->size--;
}

查找函数

按值查找,查找成功返回下标,查找失败返回-1.

//顺序表查找
int SeqListFind(SeqList* psl, DataType x)
{
	//成功找到返回下标
	for (int i = 0; i < psl->size; i++)
	{
		if (psl->data[i] == x)
		{
			return i;
		}
	}
	//找不到返回-1
	return -1;
}

指定位置插入和删除

在指定的位置插入和删除数据

//在pos位置插入
void SeqListInsert(SeqList* psl, int pos, DataType x)
{
	//断言的作用防止指针为空,防止传进来的pos非法!
	assert(psl);
	assert(pos >= 0 && pos <= psl->size);
	CheckCapacity(psl);
	int end = psl->size - 1;
	while (end >= pos)
	{
		psl->data[end + 1] = psl->data[end];
		end--;
	}
	psl->data[pos] = x;
	psl->size++;
}


//在pos位置删除	
void SeqListErase(SeqList* psl, int pos)
{
	//断言的作用防止指针为空,防止传进来的pos非法!
	assert(psl);
	assert(pos >= 0 && pos < psl->size);
	int end = pos + 1;
	while (end < psl->size)
	{
		psl->data[end - 1] = psl->data[end];
		end++;
	}
	psl->size--;
}

顺序表销毁

在使用完之后,要及时销毁顺序表。

//顺序表销毁
void SeqListDestory(SeqList* psl)
{
	assert(psl);
	free(psl->data);
	psl->data = NULL;
	psl->size = psl->capacity = 0;
}

以上是顺序表实现的相关接口,如有问题,恳请大佬们指点!💞

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

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

相关文章

图像预处理方法

图像预处理 膨胀腐蚀概述 两个基本的形态学操作是腐 和膨胀。他们 的变体构成了开运算 &#xff0c;闭运算&#xff0c; 梯度等。 根据卷积核的大小前景的所有像素会腐 掉 变为 0 &#xff0c;所以前景物体会变小整幅图像的白色区域会减少。 对于去除白噪声很有用 也可以用来…

推荐系统搭建全程图文攻略

推荐系统搭建全程图文攻略 推荐系统架构简介 整体推荐架构图&#xff1a; 推荐整体从数据处理开始&#xff0c;默认数据从关系型数据到每天增量导入到hive&#xff0c;在hive中通过中间表和调用python文件等一系列操作&#xff0c;将数据处理为算法数学建模的入口数据&#x…

【SVN】在Windows系统上进行SVN的基本操作(检出,更新,提交,分支合并分支,还原,制造冲突以及解决冲突,忽略)

介绍 这里是小编成长之路的历程&#xff0c;也是小编的学习之路。希望和各位大佬们一起成长&#xff01; 以下为小编最喜欢的两句话&#xff1a; 要有最朴素的生活和最遥远的梦想&#xff0c;即使明天天寒地冻&#xff0c;山高水远&#xff0c;路远马亡。 一个人为什么要努力&a…

其实苹果知道自己离不开中国制造,因此悄悄给自己留了后路

苹果在加速离开中国&#xff0c;不过从苹果的做法却又可以看到它其实很清醒地认识到无法离开中国制造&#xff0c;因此它在力推印度制造的时候&#xff0c;其实并没拼尽全力&#xff0c;深刻认识到印度制造和印度市场与中国的差距。 一、印度制造和印度市场与中国的差距 2022年…

防雷知识:什么是雷电浪涌

浪涌是突然发生并超过典型工作电压的过电压。一般来说&#xff0c;浪涌是电路中短暂的电流、电压或功率波。今天我们就来科普一下什么是雷电浪涌。 什么是浪涌&#xff1f; 浪涌&#xff0c;顾名思义&#xff0c;是一种突然发生并超过典型工作电压的过电压。一般来说&#xf…

工具链和其他-异步模块加载

目录 CMD/AMD Asynchronous Module Definition(AMD异步模块定义&#xff0c;语法风格) Common Module Definition ES6/CommonJS CommonJS ES6 Module 加载器示例 总结 cmd和amd的区别 现在有哪些异步加载方式 整体结构 编程&#xff1a;commonjs es6 module (有可能解…

基于STM32和oneNET云平台的数据采集系统(MQTT协议)

文章目录 前言一、onenet云平台产品创建二、硬件选择三、设计理念四、实战编程1. 传感器部分2. ESP82663. 定时器4. 串口5. MQTT 五、进阶练习 前言 该篇为基于stm32esp8266通过mqtt协议连接onenet物联网云平台&#xff0c;单片机部分将采集到的数据(温湿度、光照强度、压强等…

DX云音乐(安卓)

首先&#xff0c;软件安装好不用注册登录就可以直接使用&#xff0c;在首页这里有很多推荐的热门歌单&#xff0c;比如&#xff0c;有年度热门的DJ歌曲&#xff0c;有抖音热门DJ&#xff0c;有各种跨年晚会&#xff0c;有运动必备的DGM&#xff0c;有90后的经典旋律等等。 还有…

php+vue 校友交流平台

1.普通用户功能分析 &#xff08;1&#xff09;用户注册&#xff1a;用于注册校友录用户。 &#xff08;2&#xff09;用户登录&#xff1a;供校友录用户登录。 &#xff08;3&#xff09;资料修改&#xff1a;修改当前登录使用者信息。 &#xff08;4&#xff09;…

MQTT 5协议中的基础更改(一)

01 协议的基础性变化 MQTT 5是对现有协议规范的重大更新&#xff0c;新版本协议具有以下特征&#xff1a;轻量级、易用性、极强的可扩展性、对移动网络的适用性以及通信参与者的解耦。 02 MQTT仍然是MQTT 如果您熟悉MQTT3.1.1&#xff0c;那么您之前知道的关于MQTT的所有原则…

通用策略03丨RUMI魔改+krange自适应第3版

量化策略开发&#xff0c;高质量社群&#xff0c;交易思路分享等相关内容 正 文 大家好&#xff0c;今天我们分享2023年度第3期策略——RUMI魔改krange自适应离场第3版迭代。 本期策略是2023年通用系列第3篇。本期主要内容有对RUMI原版的逻辑魔改&#xff0c;其次重点针对kra…

关于Open Shift(OKD) 中 用户认证、权限管理、SCC 管理的一些笔记

写在前面 因为参加考试&#xff0c;会陆续分享一些 OpenShift 的笔记博文内容为 openshift 用户认证和权限管理以及 scc 管理相关笔记学习环境为 openshift v3 的版本&#xff0c;有些旧这里如果专门学习 openshift &#xff0c;建议学习 v4 版本理解不足小伙伴帮忙指正 对每个…

数据库管理新定义:一款纯Web化免费SQL开发工具,免安装

SQL Studio是一款由麦聪软件研发的多数据库管理工具&#xff0c;提供Windows、Linux 和 MacOS三种版本的软件包&#xff0c;支持中英文两种语言。SQL Studio是用Java编写的&#xff0c;默认使用 JDK 8进行编译。 下载看这里: [SQLStudio] (http://www.maicongs.com/#/home/web)…

云HIS(二级医院,乡镇医院,民营医院,标准化HIS医院信息管理系统源码)

传统 HIS&#xff08;基于医院信息系统&#xff09; 和云 HIS&#xff08;基于云计算的医院信息系统&#xff09;各有优缺点&#xff0c;选择哪种系统需要根据具体情况进行权衡。 传统 HIS 系统通常由医院自行开发和维护&#xff0c;适用于医院内部信息化程度较高、数据安全性…

Sql 优化工具

1、背景 对于正在运行的mysql 性能如何&#xff1f;参数设置的是否合理&#xff1f;账号设置的是否存在安全隐患&#xff1f; 对于Sql执行效率又如何&#xff1f;如何了然于胸&#xff1f; show profile, explain&#xff0c;slow query log &#xff0c;索引优化&#xff0…

【切负荷】计及切负荷和直流潮流(DC-OPF)风-火-储经济调度模型研究【IEEE24节点】(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Qt实现滑动条平滑效果

效果图 基于QPropertyAnimation实现 代码部分 //设置滑动条动画 m_scrollAnimationnew QPropertyAnimation; m_scrollAnimation->setTargetObject(this); m_scrollAnimation->setPropertyName("value"); m_scrollAnimation->setEasingCurve(QEasingCurve:…

如何在已创建的SpringBoot项目基础上添加依赖

假设此时已经创建了一个SpringBoot项目&#xff0c;在使用的时候发现缺少 lombok 依赖&#xff0c;此时如何在不创建新项目的基础上添加该依赖&#xff1f;有两种方式&#xff1a; 通过Maven中央仓库导入依赖使用插件EditStarters导入依赖 1&#xff0c;通过Maven中央仓库导入依…

CVE-2023-21839 Weblogic远程代码执行漏洞复现

目录 0x01 声明&#xff1a; 0x02 简介&#xff1a; 0x03 漏洞概述&#xff1a; 0x04 影响版本&#xff1a; 0x05 环境搭建&#xff1a; Docker环境搭建&#xff1a; 漏洞环境搭建&#xff1a; 1、编辑docker-compose.yml 2、启动docker 3、访问页面&#xff1a; 0x…