C语言进阶|顺序表

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

✈顺序表的概念及结构

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

✈顺序表分类

🚀顺序表和数组的区别

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

🚀顺序表分类

🛸静态顺序表

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

C语言进阶|顺序表,C语言,零基础,c语言,开发语言

🛸动态顺序表 

C语言进阶|顺序表,C语言,零基础,c语言,开发语言

✈动态顺序表的实现 

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;
		}
	}
}

 文章来源地址https://www.toymoban.com/news/detail-847385.html

到了这里,关于C语言进阶|顺序表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【Go之道】探索Go语言之旅:基础与进阶指南

    在这个数字化快速发展的时代,掌握一门编程语言已成为必备技能。今天,我将带你踏上【Go之道】,探索Go语言的魅力,为你的编程之旅助力。 Go,又称为Golang,是由Google设计和开发的一种静态类型、编译型和并发型的编程语言。 凭借其简洁、高效和并发性能优越等特点,

    2024年02月08日
    浏览(42)
  • 【C++ 进阶】第 1 章:[C 语言基础] C 语言概述与数据类型

    目录 一、C 语言的概述  (1)计算机结构组成 (2)计算机系统组成  (3)ASCII 码 (4)计算机中的数制及其转换 (5)程序与指令  (6)语言的层次划分 (7)主流语言进化史 (8)IDE - VisualStudio 2022 简介 (9)C 语言是面向过程的编程语言 (10)思维导图 (11)详细知识汇

    2024年02月15日
    浏览(42)
  • 【C语言】指针超级无敌金刚霹雳进阶(但不难,还是基础)

    点击这里访问我的博客主页~~ 对指针概念还不太清楚的点击这里访问上一篇指针初阶2.0 上上篇指针初阶1.0 谢谢各位大佬的支持咯 今天我们一起来学习指针进阶内容 指针变量有 字符指针变量 , 数组指针变量 和 函数指针变量 char* 叫做字符指针 一般这么来使用: 通过指针存

    2024年03月09日
    浏览(42)
  • 【精通C语言】:深入解析for循环,从基础到进阶应用

    🎥 屿小夏 : 个人主页 🔥个人专栏 : C语言详解 🌄 莫道桑榆晚,为霞尚满天! 在C语言中,for循环是一种常用的循环结构,具有灵活的语法和强大的功能。本文将深入探讨for循环的基础语法、进阶用法以及注意事项,以帮助读者更好地理解和运用for循环。 表达式1 表达式

    2024年02月02日
    浏览(46)
  • 100天精通Golang(基础入门篇)——第15天:深入解析Go语言中函数的应用:从基础到进阶,助您精通函数编程!(进阶)

    🌷 博主 libin9iOak带您 Go to Golang Language.✨ 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批

    2024年02月12日
    浏览(67)
  • Unity xLua开发环境搭建与基础进阶

    Unity是一款非常流行的游戏开发引擎,而xLua是一个为Unity开发者提供的Lua框架,可以让开发者使用Lua语言来进行游戏开发。在本文中,我们将介绍如何搭建Unity xLua开发环境,并进行基础进阶的学习。 环境搭建 首先,我们需要下载xLua框架,可以在GitHub上找到最新的版本。下载

    2024年02月22日
    浏览(49)
  • Electron 桌面应用开发从基础到进阶

    Electron 是一个基于 Node.js 和 Chromium 的桌面应用程序开发框架,它使开发人员能够使用 Web 技术(HTML、CSS 和 JavaScript)构建跨平台的桌面应用程序。它已经被众多知名公司使用,例如 GitHub、Slack、Microsoft 等等。本文将介绍如何使用 Electron 开发桌面应用程序。 安装 Electron 在开

    2024年02月03日
    浏览(35)
  • 算法进阶——按之字形顺序打印二叉树

    题目 给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)。 数据范围:0≤n≤1500,树上每个节点的val满足∣val∣=1500 要求:空间复杂度:O(n),时间复杂度:O(n) 例如: 给定的二叉树是{1,2,3,#,#,4,5} 该二叉树之字形层序遍历

    2024年01月21日
    浏览(43)
  • 百度二面是什么级别的,Unity进阶技巧 - RectTransform详解,android开发需要哪些基础

    三、Pivot和Anchor的结合 在了解了Pivot和Anchor分别是什么后,我们就来看看Unity是如何使用这个两个东西来控制UI的布局 第1种情况:两个锚点重合时我们先来看看两个锚点重合时的情况,这种情况是我们最常用也是最容易理解的方式 我们将Anchor锚点放在黑框的正中间,然后将

    2024年04月12日
    浏览(47)
  • 微信小程序开发笔记 进阶篇⑥——getPhoneNumber 获取用户手机号码(基础库 2.21.2 之后)

    微信小程序开发笔记——导读 大部分微信小程序开发者都会有这样的需求: 获取小程序用户的手机号码 。 但是,因为小程序用户的手机号码属于重要信息,为了安全,所以需要如下一系列较为复杂的方法和步骤。 我前期主要通过小程序云的方法获取用户手机号码,后面 因

    2024年02月03日
    浏览(48)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包