C语言复习之顺序表(十五)

news2024/10/5 19:20:36

在这里插入图片描述

📖作者介绍:22级树莓人(计算机专业),热爱编程<目前在c阶段>——目标C++、Windows,MySQL,Qt,数据结构与算法,Linux,多线程,会持续分享学习成果和小项目的
📖作者主页:热爱编程的小K
📖专栏链接:C
🎉欢迎各位→点赞👏 + 收藏💞 + 留言🔔​
💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🐾

在这里插入图片描述

目录

      • 1.概念
      • 2.定义
      • 3.断言
      • 4.初始化
      • 5.元素的插入
        • A.尾插
        • B.头插
        • C.任意插
      • 6.元素的删除
        • A.尾删
        • B.头删
        • C.查找
        • D.指定删(元素)
        • E.指定位置删除
      • 7.扩容
      • 8.顺序表特点

1.概念

  1. 数组(存储):
    • 静态数组
    • 动态int* parr=calloc(size,sizeof(type));
  2. 容量:capacity
  3. 有效元素个数:size

顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。

2.定义

抽象数据类型,是为了更好的适应,当换数据类型的时候好切换

typedef int Elementtype; //ADT抽象数据类型
typedef struct seqlist
{
int capacity; //容量
int size; //有效元素个数
Elementtype* data; //定义数组指针
}seqlest;

3.断言

相比较if语句更简便,更好用

#include<assetr.h>
assert(...);   //断言...为真,如果不为真,则会中断程序

4.初始化

使用malloc函数,最后不用把指针置为空,因为malloc会初始化为空

//法一:
void seqlist_init(seqlist* list)
{
list->size = 0;
list->capacity = 8;
list->data = calloc(list->capacity,sizeof(Elementtype));
if (!list->data)
{
assert(list->data);
}
}

//法二:
seqlist* seqlist_creat()
{
seqlist* list = calloc(1, sizeof(seqlist));
if(!list)
{
assert(list);
}
seqlist_init(list);
return list;
}

void seqlist_destory(seqlist* list)
{
//先释放数组
free(list->data);
//再释放顺序表
if (list)
{
free(list);
}
}

5.元素的插入

A.尾插

//尾插
void seqlist_pushback(seqlist* list, Elementtype val)
{
	if(seqlist_full(list))
	{
		printf("seqlist is full , can't insert ! \n");
		return;
	}
	list->data[list->size++] = val;
}

B.头插

//头插
void seqlist_pushfront(seqlist* list, Elementtype val)
{
	if (seqlist_full(list))
	{
		printf("seqlist is full , can't insert !\n");
		return;
	}
	//先移动后面的元素,为新插入的元素的元素的腾出空间
	for ( int i = list->size; i >0 ; i--)
	{
		list->data[i] = list->data[i - 1];
	}
	//插入新元素
	list->data[0] = val;
	list->size++;
}

C.任意插

//任意插
void seqlist_insert(seqlist* list, int pos, Elementtype val)
{
	if (seqlist_full(list))
	{
		printf("seqlist is full , can't insert !\n");
		return;
	}
	//判断pos是否合法
	if( pos < 0 || pos > list->size )
	{
		pos = list->size;
	}
	//移动
	for ( int i = list->size ; i >pos ; i--)
	{
		list->data[i] = list->data[i - 1];
	}
	list->data[pos] = val;
	list->size++;
}

6.元素的删除

A.尾删

//尾删
void seqlist_popback(seqlist* list)
{
	if(seqlist_empty(list))
	{
		printf("seqlist is emoty , can't delete !\n");
		return;
	}
	list->size--;
}

B.头删

//头删
void seqlist_popfront(seqlist* list)
{
	if (seqlist_empty(list))
	{
		printf("seqlist is emoty , can't delete !\n");
		return;
	}
	for ( int i = 0; i < list->size-1; i++)
	{
		list->data[i] = list->data[i + 1];
	}
	list->size--;
}

C.查找

//查找
int seqlist_find(seqlist* list, Elementtype val)
{
	for (int i = 0; i < list->size; i++)
	{
		if (list->data[i] == val)
		{
			return i;
		}
	}
	return -1;
}

D.指定删(元素)

//指定删(元素)
void seqlist_removeOne(seqlist* list, Elementtype val)
{
	if (seqlist_empty(list))
	{
		printf("seqlist is emoty , can't delete !\n");
		return;
	}
	if(seqlist_find(list,val))
	{
		for (int j = seqlist_find(list, val); j < list->size - 1; j++)
		{
			list->data[j] = list->data[j + 1];
		}
	}
	list->size--;
}

E.指定位置删除

//指定位置删除
void seqlist_removePos(seqlist* list, int pos)
{
if (seqlist_empty(list))
{
printf(“seqlist is emoty , can’t delete !\n”);
return;
}
assert(pos > 0 && pos < list->size);
for (int i = pos; i < list->size-1 ; i++)
{
list->data[i] = list->data[i + 1];
}
list->size–;
}

7.扩容

bool inc(seqlist* list)
{
	seqlist* newlist = realloc(list->data, list->capacity + list->capacity * 2, sizeof(Elementtype));
	if( !newlist )
	{
		return false;
	}
	list->data = newlist;
	list->capacity += list->capacity * 2;
	return true;
}

8.顺序表特点

顺序表所具备的特点之一是:可以随机访问任一结点。顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。
数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的原始素材。数据可以是连续的值,比如声音、图像,称为模拟数据。也可以是离散的,如符号、文字,称为数字数据。在计算机系统中,数据以二进制信息单元0,1的形式表示。

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

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

相关文章

docker容器内的应用利用k8s configmap做配置中心

ConfigMap 能带来什么好处&#xff1f; 传统的应用服务都有自己的配置文件&#xff0c;各自配置文件存储在服务所在节点。如果配置出现变更&#xff0c;就需要对应节点的配置文件。Kubernetes 利用了 Volume 功能&#xff0c;完整设计了一套配置中心&#xff0c;其核心对象就是…

基于Java+Spring+vue+element实现旅游信息管理平台系统

基于JavaSpringvueelement实现旅游信息管理平台系统 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文…

基于模型预测(MPC)的四轮转向车辆轨迹规划(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 在轨迹跟踪应用领域&#xff0c;通常 MPC 建模可根据机器人的控制方式选择基于运动学运动状态方程建模或者基于动力学运动状态…

深入探讨车载CAN协议的工作原理和应用场景

CAN概述 CAN&#xff08;Controller Area Network&#xff09;总线协议是一种数据通信协议&#xff0c;最初是由Bosch公司开发&#xff0c;用于汽车领域中的内部通讯。 CAN总线协议是一种串行通信协议&#xff0c;支持多主机和多从机之间的通讯&#xff0c;可以在不同的控制单…

典型的高可用设计(一):MinIO

为了更好的了解高可用设计&#xff0c;将各类常用服务关于高可用的设计原理汇总到一起&#xff0c;通过横向对比的方式去发现这些典型设计的共同之处和差异点。 一、部署方式 MinIO 有单机单硬盘、单机多硬盘、多机多硬盘三种部署模式。单机单硬盘存在单点风险&#xff0c;数据…

ElasticSearch 部署及安装ik分词器

ansiable playbook链接&#xff1a; https://download.csdn.net/download/weixin_43798031/87719490 需要注意的点&#xff1a;公司es集群现以三个角色部署分别为 Gateway、Master、Data 简单的理解可以理解为在每台机器上部署了三个es&#xff0c;以端口和配置文件来区分这三…

itop-3568 开发板系统编程学习笔记(18)LED 应用编程

【北京迅为】嵌入式学习之Linux系统编程篇 https://www.bilibili.com/video/BV1zV411e7Cy/ 个人学习笔记 文章目录 应用层操作 LED 的两种方式sysfs 方式控制 LED控制方法原理简介 编写 LED 应用程序 应用层操作 LED 的两种方式 应用层操作底层硬件有两种方法&#xff0c;分别…

数据治理与数据中台架构

随着工业 4.0 时代的到来&#xff0c;传统行业的数字化转型是大势所趋&#xff1b;将数据提高到数据要素层面&#xff0c;让传统的技术在新的场景下发挥出新的作用&#xff0c;是近期研究和探讨的焦点话题。数语科技支持和服务传统行业多年&#xff0c;聚焦于传统数据建模和数据…

PostgreSQL中的复制延迟

PostgreSQL是一个流行的开源关系数据库管理系统&#xff0c;PostgreSQL中可能遇到的一个常见问题是复制延迟。 在这篇博客中&#xff0c;我们将讨论什么是复制延迟&#xff0c;它为什么会发生&#xff0c;以及如何在PostgreSQL中减轻它。 什么是复制延迟&#xff1f; 复制延迟…

Flink系列-9、Flink DataStream的输入数据集Data Source

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 大数据系列文章目录 官方网址&#xff1a;https://flink.apache.org/ 学习资料&#xff1a;https://flink-learning.org.cn/ 目录 addSource方…

【A component required a bean of type ‘xxx‘ that could not be found.】

在学谷粒商城项目的时候出现了以下问题&#xff1a; *************************** APPLICATION FAILED TO START *************************** Description: A component required a bean of type org.redisson.Redisson that could not be found. Action: Consider defining a…

React-Router详解

React-Router详解 简介React-Router React-Router是一款用于构建单页面应用&#xff08;SPA&#xff09;中处理路由的JavaScript库。在现代的Web应用中&#xff0c;SPA已经成为了一种常见的应用架构模式&#xff0c;它允许在不刷新整个页面的情况下进行交互式的用户体验。而Re…

GPT能给审计带来什么

ChatGPT的出现&#xff0c;让人工智能再次站在了聚光灯下&#xff0c;引发持续性的热议和关注。GPT模型作为重要的支撑&#xff0c;国内外近段时间密集性地发布了众多的大语言模型&#xff0c;OpenAI推出GPT-4、谷歌推出LaMDA和PaLM等大模型、Meta推出开源大模型LLaMA&#xff…

2023-04-23 学习记录--C/C++-邂逅C/C++(中)

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 上一篇&#xff1a;邂逅C/C&#xff08;上&#xff09; 一、if语句 ⭐️ &#xff08;一&#xff09;、格式 &#x1f36d; if…

6.1 欧拉方法与改进欧拉方法

6.1.1 欧拉方法 欧拉方法是一种数值解常微分方程&#xff08;ODE&#xff09;的方法&#xff0c;可以用于近似求解给定的初值问题。它是以欧拉命名的瑞士数学家莱昂哈德欧拉所发明的&#xff0c;因此得名。 欧拉方法的基本思路是将连续的常微分方程转化为离散的形式。具体而言…

全功能药效团图谱(Full-feature pharmacophore map)是什么?怎么绘制?

药效团和全功能药效团图谱是什么&#xff1f; 药效团是指与靶点相互作用并导致生物活性的化学基团或者分子结构片段。【药效团通常包括氢键受体/供体、疏水部位、离子化部位等关键成分】 "全功能药效团图谱" &#xff08;Full-feature pharmacophore map&#xff0…

.net6 core web项目发布部署到Linux,以守护进程服务的形式部署启动,nginx实现转发

一、发布项目 1、以文件夹形式 2、目标运行时选对应的平台&#xff08;Linux-x64&#xff09; 3、文件夹选项&#xff1a;在发布前删除所有现有文件 二、部署项目&#xff08;安装.net6环境&#xff1a;参考Linux安装 dotnet sdk 6.0&#xff09; &#xff08;1&#xff09;…

toRef

toRef就是把什么东西变成ref 用这个页面来讲解 改成这样就用不了&#xff0c;失去了响应的功能 为什么会这样&#xff1f; 看这个页面&#xff0c;其实这个Proxy的实现就响应式的原理&#xff0c;但是let namep.name实际上就是let name张三&#xff0c;只是把这个值给了name&…

Android 日志框架使用

在实际开发中&#xff0c;经常会遇到需要打印日志并保存到文件中&#xff0c;便于后面取日志分析代码运行情况&#xff0c;当然如果只是打印日志不需要记录文件&#xff0c;使用android自带的log工具就完全够了&#xff0c; Log打印日志会记录到系统日志中&#xff0c;可以取出…

光敏电阻传感器模块资料

实物项目案例 实物图&#xff1a; PCB图&#xff1a; 原理图&#xff1a; 用途&#xff1a; 光线亮度检测,光线亮度传感器&#xff0c;智能小车寻光模块 模块特色&#xff1a; 1、采用灵敏型光敏电阻传感器 2、比较器输出&#xff0c;信号干净&#xff0c;波形好&#x…