【数据结构】新篇章 -- 顺序表

这篇具有很好参考价值的文章主要介绍了【数据结构】新篇章 -- 顺序表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🌈 个人主页:白子寰
🔥 分类专栏:python从入门到精通,魔法指针,进阶C++,C语言,C语言题集,C语言实现游戏👈 希望得到您的订阅和支持~
💡 坚持创作博文(平均质量分80+),分享更多关于深度学习、C/C++,python领域的优质内  容!(希望得到您的关注~) 

【数据结构】新篇章 -- 顺序表,进阶C++,数据结构

目录

数据结构

概念

为什么需要数据结构 

使用数据结构的效果

线性表

概念

顺序表与数组的区别 

顺序表导图

动态顺序表 

typedef定义结构的两种方法

空间不够,扩容

尾部插入数据

头部插入数据

 尾部数据删除

头部数据删除

指定位置之前插入数据 

删除指定位置数据

查找顺序表中元素位置

销毁


数据结构

概念

数据结构是计算机存储组织数据的方式

为什么需要数据结构 

在这之前我们学过数组,数组是最基础的数据结构

那为什么学了数组还用学数据结构呢?

最基础的数据结构能够提供的操作已经不能完全满足复杂算法实现

使用数据结构的效果

1)能够将数据存储

     (顺序表、链表等结构)

2)方便查看存储的数据 

线性表

概念

线性表在逻辑上是线性结构,也就是说是连续的一条直线

                      但在物理结构上并不一定是连续的

线性表物理上存储时,通常以数组和链式结构的形式存储

常见的线性表:

顺序表、链表、栈、队列、字符串

顺序表与数组的区别 

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

顺序表导图

【数据结构】新篇章 -- 顺序表,进阶C++,数据结构

动态顺序表 

SX.h:定义顺序表的结构,顺序要实现的接口/方法

SX.c:具体实现顺序表里定义的接口/方法

test.c:测试顺序表

typedef定义结构的两种方法

//第一种方法

//数据类型
typedef int datatype;

//结构体
struct shunxu
{
	datatype* arr; //存储数据的底层结构:数组
	int size;      //顺序表空间大小
	int nowsize;   //顺序表有效数据个数
};

typedef struct shunxu SX;
//第二种方法

//数据类型
typedef int datatype;

//结构体
typedef struct shunxu
{
	datatype* arr; //存储数据的底层结构:数组
	int size;      //顺序表空间大小
	int nowsize;   //顺序表有效数据个数
}SX;

以下是在SX.c中实现顺序表 

空间不够,扩容

//空间不够,扩容
void publicKUOR(SX* ps)
{
    //如果顺序表空间大小 = 顺序表空间有效个数
	if (ps->size == ps->nowsize)
	{
		//三目操作符
		int newnowsize = ps->nowsize == 0 ? 4 : 2 * sizeof(datatype);
		//新建一个临时变量,因为如果realloc扩容失败,会造成技术事故
		datatype* tmp = (datatype*)realloc(ps->arr, newnowsize * sizeof(datatype));
		if (tmp == NULL)
		{
			perror("realloc");
			exit(1);
		}
		//扩容后的数组
		ps->arr = tmp;
		//扩容后的有效空间大小
		ps->nowsize = newnowsize;
	}
}

尾部插入数据

【数据结构】新篇章 -- 顺序表,进阶C++,数据结构

//顺序表的尾插
void CHARUback(SX* ps, datatype x)
{
	//方式一:断言 -- 暴力方式 --会报错且知道具体错误位置
	assert(ps);
	//方式二:断言 -- 温柔方式--会报错,不知道具体错误位置
	/*if (ps == NULL)
	{
		return;
	}*/

	//空间不够,扩容
	publicKUOR(ps);
	//空间足够,直接插入
	/*第一种写法*/
	//ps->arr[ps->size] = x;
	//ps->size++;
	/*第二种写法*/
	ps->arr[ps->size++] = x;

}

头部插入数据

【数据结构】新篇章 -- 顺序表,进阶C++,数据结构

//头插
void CHARUfront(SX* ps, datatype x)
{
    //判断ps是否为空指针
	assert(ps);
	//空间不够,扩容
	publicKUOR(ps);
	//空间足够,数据往后挪一位
	int i = 0;
	for (i = ps->size; i > 0; i--)
	{
		ps->arr[i] = ps->arr[i - 1];
	}
	ps->arr[0] = x;
	ps->size++;
}

 尾部数据删除

//尾部删除
void SXdestroyback(SX* ps)
{
    //判断ps是否为有效指针
	assert(ps);
    //判断顺序表中有无数据
	assert(ps->size);
	
	//顺序表不为空
	ps->size--;
}

头部数据删除

【数据结构】新篇章 -- 顺序表,进阶C++,数据结构

//头部删除
void SXdestroyfront(SX* ps)
{
	//判断ps是否为有效指针
	assert(ps);
	//判断顺序表是否有数据
	assert(ps->size);

	//顺序表不为空,往前挪
	for (int i = 0; i < ps->size-1; i++)
	{
		ps->arr[i] = ps->arr[i + 1];
	}
	ps->size--;
}

指定位置之前插入数据 

【数据结构】新篇章 -- 顺序表,进阶C++,数据结构

//指定位置之前插入数据
//顺序表下标位置pos
void SXpointfrontestroy(SX* ps,int pos,datatype x)
{
	//判断ps是否为有效指针
	assert(ps);
	//断言,保证下标pos>=0且pos小于等于顺序表空间大小size
	assert(pos >= 0 && pos <= ps->size);

	for (int i = ps->size; i < pos; i--)
	{
		ps->arr[i] = ps->arr[i - 1];
	}
	ps->arr[pos] = x;
	ps->size++;
}

删除指定位置数据

【数据结构】新篇章 -- 顺序表,进阶C++,数据结构

//删除指定位置数据
void SXpointdestroy(SX* ps, int pos)
{
	//判断ps是否为有效指针
	assert(ps);
	//断言,保证下标pos>=0且pos小于顺序表空间大小size
	assert(pos >= 0 && pos < ps->size);

	for (int i = pos; i < ps->size - 1; i++)
	{
		ps->arr[i] = ps->arr[i + 1];
	}
	ps->size--;
}

查找顺序表中元素位置

//查找顺序表元素位置
int SXfind(SX* ps, datatype x)
{
	for (int i = 0; i < ps->size; i++)
	{
		if (ps->arr[i] == x)
		{
			return i;
		}
	}
	return -1;
}

销毁

void SXdestroy(SX* ps)
{
	//保证指针有效
	assert(ps);

	if (ps->arr)
	{
		free(ps->arr);
	}
	ps->arr = NULL;
	ps->size = ps->nowsize = 0;
}

 ***********************************************************分割线*****************************************************************************
完结!!!
感谢浏览和阅读。

等等等等一下,分享最近喜欢的一句话:

“走过这场雾,就是柏林的冬”。

我是白子寰,如果你喜欢我的作品,不妨你留个点赞+关注让我知道你曾来过。
你的点赞和关注是我持续写作的动力!!! 
好了划走吧。文章来源地址https://www.toymoban.com/news/detail-844259.html

到了这里,关于【数据结构】新篇章 -- 顺序表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • GPT-4:智能语言模型的新篇章

    随着人工智能技术的飞速发展,智能语言模型已经成为了我们日常生活和工作中不可或缺的一部分。GPT-4,作为最新一代的语言模型,不仅继承了前代技术的优势,还在理解深度、生成连贯性和创造性方面实现了质的飞跃。本文将探讨GPT-4的创新特点以及它对未来的影响。 G

    2024年01月22日
    浏览(70)
  • 可视化技术:重塑城市管理新篇章

    随着科技的飞速发展, 数据可视化 已经成为各行业展示、分析和决策的重要工具。而在 城市管理领域 , 3D可视化技术 的运用更是为城市规划、建设和运营带来了革命性的变革。 山海鲸可视化 作为业界领先的3D可视化解决方案提供商,凭借其强大的技术实力和丰富的行业经

    2024年01月25日
    浏览(58)
  • Copilot插件:开启AI编程新篇章

    人不走空                                                                          目录         🌈个人主页:人不走空       💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨  一、引言 二、Copilot插件的安装与配置 1. 下载与安装教程 2. 插件与IDE的

    2024年02月03日
    浏览(44)
  • 外卖订餐系统源码:数字化餐饮新篇章

    在当今数字化时代,外卖订餐系统源码成为餐饮行业的一颗明星,为餐厅和顾客提供了无与伦比的便捷体验。在本文中,我们将一起探索一个简单的外卖订餐系统源码示例,了解它是如何将美食带到您的门口的。 这段简单的Python代码展示了一个基本的外卖订餐系统。用户可以

    2024年02月12日
    浏览(42)
  • 概念解析 | 电磁计算的新篇章:智能电磁计算

    注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:智能电磁计算。 随着人工智能的飞速发展,我们正处在一个信息爆炸的时代。各个领域,无论是自然科学还是社会科学,都在以前所未有的速度产生巨量的数据。这些

    2024年02月11日
    浏览(53)
  • Prompt Learning:人工智能的新篇章

    想象一下,你正在和一位智能助手对话,它不仅理解你的问题,还能提出引导性的问题帮助你更深入地思考。这正是prompt learning的魔力所在——它让机器学习模型变得更加智能和互动。在这篇博客中,我们将探索prompt learning的奥秘,它如何改变我们与AI的互动方式,以及它在

    2024年04月10日
    浏览(54)
  • ChatGPT:人工智能开启智能交流新篇章

    一、ChatGPT:智能交流的新里程碑 ChatGPT是OpenAI基于GPT技术的最新版本,采用深度学习模型,通过预训练和微调的方式,使其能够理解和生成自然语言,从而实现与人类更自然、流畅的对话和交流。 二、ChatGPT的技术原理与优势 基于GPT技术:GPT技术是一种基于变换器(Transform

    2024年02月15日
    浏览(65)
  • 1688商品详情API接口:开启营销新篇章

    一、引言 随着互联网的快速发展,电子商务在全球范围内迅速普及。作为全球最大的B2B电子商务平台之一,1688为广大商家提供了一个便捷、高效的在线交易平台。在这个平台上,商家可以展示、售卖自己的产品,而消费者则可以轻松地找到心仪的商品。为了更好地满足商家

    2024年02月05日
    浏览(47)
  • 宠物服务新篇章:预约小程序带来的变革

    随着科技的进步和互联网的普及,小程序已经成为了一种非常受欢迎的应用形式。对于宠物门店来说,开发一个预约小程序可以大大提高客户体验和管理效率。下面是一份宠物门店预约小程序的开发指南。 浏览器搜索乔拓云,登录乔拓云网后台,可以点击【门店管理】进入设

    2024年01月16日
    浏览(50)
  • WebCodecs 开启 Web 音视频新篇章

    本期作者 WebCodecs 是什么 WebCodecs 是一个 Web 规范,21 年 9 月份在 Chrome 94 中实现 WebCodecs 提供访问编解码能力的接口,可精细控制音视频数据  Web 音视频 API 存在什么问题 音视频技术在 Web 平台上的应用非常广泛,已有许多 Web API  间接调用了编解码器 来实现特定功能: 视频

    2024年01月15日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包