当前位置: 首页 > news >正文

顺序表(增删查改)

目录

  • 一、什么是顺序表
  • 二、顺序表的增删查改
    • 2.1 结构体的声明
    • 2.2 顺序表的初始化
    • 2.3 顺序表检查容量
    • 2.4 顺序表尾部插入数据
    • 2.5 顺序表头部插入数据
    • 2.6 顺序表尾部删除数据
    • 2.7 顺序表头部删除数据
    • 2.8 顺序表查找数据
    • 2.9 顺序表任意位置插入数据
    • 2.10 顺序表任意位置删除数据
    • 2.11 顺序表打印数据
    • 2.12 顺序表销毁
  • 三、顺序表汇总

一、什么是顺序表

顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。换句话说就是一个动态开辟的数组,然后用一个结构体来封装这一个动态数组,再增加两个结构体成员记录数组中保存数据的情况。

二、顺序表的增删查改

2.1 结构体的声明

typedef int SLDataType;typedef struct SeqList
{SLDataType* data;int sz;int capacity;}SL;

2.2 顺序表的初始化

void SeqListInit(SL* ps)
{assert(ps);ps->data = (SLDataType*)malloc(sizeof(SLDataType) * 4);if (ps->data == NULL){perror("malloc fail");return;}ps->capacity = 4;ps->sz = 0;
}

2.3 顺序表检查容量

void check_capacity(SL* ps)
{assert(ps);if (ps->capacity == ps->sz){SLDataType* tmp = (SLDataType*)realloc(ps->data, sizeof(SLDataType) * ps->capacity * 2);if (tmp == NULL){perror("realloc fail");return;}ps->data = tmp;ps->capacity *= 2;}
}

2.4 顺序表尾部插入数据

void SeqListPushBack(SL* ps,SLDataType x)
{/*assert(ps);check_capacity(ps);ps->data[ps->sz] = x;ps->sz++;*/SeqListInsert(ps, ps->sz, x);}

2.5 顺序表头部插入数据

void SeqListPushFront(SL* ps, SLDataType x)
{/*assert(ps);check_capacity(ps);int i = ps->sz - 1;for (i; i >= 0; i--){ps->data[i + 1] = ps->data[i];}ps->data[0] = x;ps->sz++;*/SeqListInsert(ps, 0, x);}

2.6 顺序表尾部删除数据

void SeqListPopBack(SL* ps)
{/*assert(ps);assert(ps->sz > 0);ps->sz--;*/SeqListErase(ps, ps->sz - 1);}

2.7 顺序表头部删除数据

void SeqListPopFront(SL* ps)
{/*assert(ps);assert(ps->sz > 0);int i = 0;for (i = 0; i < ps->sz - 1; i++){ps->data[i] = ps->data[i + 1];}ps->sz--;*/SeqListErase(ps, 0);}

2.8 顺序表查找数据

int SeqListFind(SL* ps, SLDataType x)
{assert(ps);int i = 0;for (i = 0; i < ps->sz; i++){if (ps->data[i] == x){printf("找到了,下标为:%d\n", i);return i;}}printf("找不到!\n");return -1;
}

2.9 顺序表任意位置插入数据

void SeqListInsert(SL* ps, int pos, SLDataType x)
{assert(ps);assert(pos >= 0 && pos <= ps->sz);check_capacity(ps);int i = 0;for (i = ps->sz - 1; i >= pos; i--){ps->data[i + 1] = ps->data[i];}ps->data[pos] = x;ps->sz++;
}

2.10 顺序表任意位置删除数据

void SeqListErase(SL* ps, int pos)
{assert(ps);assert(pos >= 0 && pos < ps->sz);int i = 0;for (i = pos; i < ps->sz - 1; i++){ps->data[i] = ps->data[i + 1];}ps->sz--;}

2.11 顺序表打印数据

void Print(SL* ps)
{assert(ps);int i = 0;for (i = 0; i < ps->sz; i++){printf("%d ", ps->data[i]);}printf("\n");
}

2.12 顺序表销毁

void SeqListDestroy(SL* ps)
{assert(ps);free(ps->data);ps->data = NULL;ps->capacity = ps->sz = 0;
}

三、顺序表汇总

SeqList.h

#pragma once/
//SeqList.h
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>typedef int SLDataType;typedef struct SeqList
{SLDataType* data;int sz;int capacity;}SL;//函数声明
extern void SeqListInit(SL* ps);
extern void SeqListDestroy(SL* ps);
extern void SeqListPushBack(SL* ps, SLDataType x);
extern void SeqListPushFront(SL* ps, SLDataType x);
extern void SeqListPopBack(SL* ps);
extern void SeqListPopFront(SL* ps);
extern void Print(SL* ps);
extern int SeqListFind(SL* ps, SLDataType x);
extern void SeqListInsert(SL* ps, int pos, SLDataType x);
extern void SeqListErase(SL* ps, int pos);

SeqList.c

#define _CRT_SECURE_NO_WARNINGS 1/
//SeqList.c#include "SeqList.h"void SeqListInit(SL* ps)
{assert(ps);ps->data = (SLDataType*)malloc(sizeof(SLDataType) * 4);if (ps->data == NULL){perror("malloc fail");return;}ps->capacity = 4;ps->sz = 0;
}void SeqListDestroy(SL* ps)
{assert(ps);free(ps->data);ps->data = NULL;ps->capacity = ps->sz = 0;
}void check_capacity(SL* ps)
{assert(ps);if (ps->capacity == ps->sz){SLDataType* tmp = (SLDataType*)realloc(ps->data, sizeof(SLDataType) * ps->capacity * 2);if (tmp == NULL){perror("realloc fail");return;}ps->data = tmp;ps->capacity *= 2;}
}void SeqListPushBack(SL* ps,SLDataType x)
{/*assert(ps);check_capacity(ps);ps->data[ps->sz] = x;ps->sz++;*/SeqListInsert(ps, ps->sz, x);}void Print(SL* ps)
{assert(ps);int i = 0;for (i = 0; i < ps->sz; i++){printf("%d ", ps->data[i]);}printf("\n");
}void SeqListPushFront(SL* ps, SLDataType x)
{/*assert(ps);check_capacity(ps);int i = ps->sz - 1;for (i; i >= 0; i--){ps->data[i + 1] = ps->data[i];}ps->data[0] = x;ps->sz++;*/SeqListInsert(ps, 0, x);}void SeqListPopBack(SL* ps)
{/*assert(ps);assert(ps->sz > 0);ps->sz--;*/SeqListErase(ps, ps->sz - 1);}void SeqListPopFront(SL* ps)
{/*assert(ps);assert(ps->sz > 0);int i = 0;for (i = 0; i < ps->sz - 1; i++){ps->data[i] = ps->data[i + 1];}ps->sz--;*/SeqListErase(ps, 0);}int SeqListFind(SL* ps, SLDataType x)
{assert(ps);int i = 0;for (i = 0; i < ps->sz; i++){if (ps->data[i] == x){printf("找到了,下标为:%d\n", i);return i;}}printf("找不到!\n");return -1;
}void SeqListInsert(SL* ps, int pos, SLDataType x)
{assert(ps);assert(pos >= 0 && pos <= ps->sz);check_capacity(ps);int i = 0;for (i = ps->sz - 1; i >= pos; i--){ps->data[i + 1] = ps->data[i];}ps->data[pos] = x;ps->sz++;
}void SeqListErase(SL* ps, int pos)
{assert(ps);assert(pos >= 0 && pos < ps->sz);int i = 0;for (i = pos; i < ps->sz - 1; i++){ps->data[i] = ps->data[i + 1];}ps->sz--;}

test.c

#define _CRT_SECURE_NO_WARNINGS 1/
//test.c
#include "SeqList.h"void test_SeqListPushBack(void)
{SL sl;SeqListInit(&sl);SeqListPushBack(&sl, 1);SeqListPushBack(&sl, 2);SeqListPushBack(&sl, 3);SeqListPushBack(&sl, 4);SeqListPushBack(&sl, 5);SeqListInsert(&sl, 2, 9);SeqListErase(&sl, 3);Print(&sl);SeqListFind(&sl, 4);}void test_SeqListPushFront(void)
{SL sl;SeqListInit(&sl);SeqListPushFront(&sl, 1);SeqListPushFront(&sl, 2);SeqListPushFront(&sl, 3);SeqListPushFront(&sl, 4);SeqListPushFront(&sl, 5);Print(&sl);
}void test_SeqListPopBack(void)
{SL sl;SeqListInit(&sl);SeqListPushBack(&sl, 1);SeqListPushBack(&sl, 2);SeqListPushBack(&sl, 3);SeqListPushBack(&sl, 4);SeqListPushBack(&sl, 5);Print(&sl);SeqListPopFront(&sl);Print(&sl);SeqListPopFront(&sl);Print(&sl);SeqListPopFront(&sl);Print(&sl);SeqListPopFront(&sl);Print(&sl);SeqListPopFront(&sl);Print(&sl);}int main()
{//test_SeqListPushBack();//test_SeqListPushFront();test_SeqListPopBack();return 0;
}

你学会了吗?喜欢的话请点亮一下小心心呗!!

相关文章:

顺序表(增删查改)

目录一、什么是顺序表二、顺序表的增删查改2.1 结构体的声明2.2 顺序表的初始化2.3 顺序表检查容量2.4 顺序表尾部插入数据2.5 顺序表头部插入数据2.6 顺序表尾部删除数据2.7 顺序表头部删除数据2.8 顺序表查找数据2.9 顺序表任意位置插入数据2.10 顺序表任意位置删除数据2.11 …...

一款优秀的低代码开发平台是什么样的?

目录 一、一款优秀的低代码平台应该是什么样的&#xff1f; 二、低代码核心能力 01、全栈可视化编程&#xff1a; 02、全生命周期管理&#xff1a; 03、低代码扩展能力&#xff1a; 三、小结 一、一款优秀的低代码平台应该是什么样的&#xff1f; 从企业角度来说&#x…...

ElasticSearch 学习笔记总结(四)

文章目录一、ES继承 Spring Data 框架二、SpringData 功能集成三、ES SpringData 文档搜索四、ES 优化 硬件选择五、ES 优化 分片策略六、ES 优化 路由选择七、ES 优化 写入速度优化七、ES 优化 内存设置八、ES 优化 重要配置一、ES继承 Spring Data 框架 Spring Data 是一个用…...

HDFS文件块大小

HDFS中的文件在物理上是分块存储&#xff08;Block&#xff09;&#xff0c;块的大小可以通过配置参数&#xff08;dfs.blocksize&#xff09;来规定&#xff0c;默认大小在Hadooop2X版本中是128M&#xff0c;老版本中是64M。 思考&#xff1a;为什么块的大小不能设置太小&…...

C++——优先级队列(priority_queue)的使用及实现

目录 一.priority_queue的使用 1.1、基本介绍 1.2、优先级队列的定义 1.3、基本操作(常见接口的使用&#xff09; 1.4、重写仿函数支持自定义数据类型 二.priority_queue的模拟实现 2.1、构造&&重要的调整算法 2.2、常见接口的实现 push() pop() top() empt…...

Linux学习记录——십일 环境变量

文章目录1、认识2、通过代码获取环境变量1、手动获取2、函数获取3、重新认识环境变量1、认识 在云服务器上写程序时&#xff0c;最终的执行需要./文件名&#xff0c;点表示当前目录&#xff0c;/是文件分隔符&#xff0c;之后就会打印程序&#xff0c;这是用户的操作&#xff…...

【人工智能 Open AI 】我们程序员真的要下岗了- 全能写Go / C / Java / C++ / Python / JS 人工智能机器人

文章目录[toc]人工智能 AI Code 写代码测试用golang实现冒泡排序用golang实现计算环比函数goroutine and channel用golang实现二叉树遍历代码用golang实现线程安全的HashMap操作代码using C programming language write a tiny Operation Systemuse C language write a tiny co…...

STM32 EXTI外部中断

本文代码使用 HAL 库。 文章目录前言一、什么是外部中断&#xff1f;二、外部中断中断线三、STM32F103的引脚复用四、相关函数&#xff1a;总结前言 一、什么是外部中断&#xff1f; 外部中断 是单片机实时地处理外部事件的一种内部机制。当某种外部事件发生时&#xff0c;单片…...

Mapper代理开发——书接MaBatis的简单使用

在这个mybatis的普通使用中依旧存在硬编码问题,虽然静态语句比原生jdbc都写更少了但是还是要写&#xff0c;Mapper就是用来解决原生方式中的硬编码还有简化后期执行SQL UserMapper是一个接口&#xff0c;里面有很多方法&#xff0c;都是一一和配置文件里面的sql语句的id名称所对…...

实体对象说明

1.工具类层Utilutil 工具顾明思义&#xff0c;util层就是存放工具类的地方&#xff0c;对于一些独立性很高的小功能&#xff0c;或重复性很高的代码片段&#xff0c;可以提取出来放到Util层中。2.数据层POJO对象&#xff08;概念比较大&#xff09; 包含了以下POJO plain ord…...

JAVA中加密与解密

BASE64加密/解密 Base64 编码会将字符串编码得到一个含有 A-Za-z0-9/ 的字符串。标准的 Base64 并不适合直接放在URL里传输&#xff0c;因为URL编码器会把标准 Base64 中的“/”和“”字符变为形如 “%XX” 的形式&#xff0c;而这些 “%” 号在存入数据库时还需要再进行转换&…...

改进YOLO系列 | ICLR2022 | OMNI-DIMENSIONAL DYNAMIC CONVOLUTION: 全维动态卷积

单个静态卷积核是现代卷积神经网络(CNNs)的常见训练范式。然而,最近的动态卷积研究表明,学习加权为其输入依赖注意力的n个卷积核的线性组合可以显著提高轻量级CNNs的准确性,同时保持高效的推理。然而,我们观察到现有的作品通过卷积核空间的一个维度(关于卷积核数量)赋予…...

信息收集之Github搜索语法

信息收集之Github搜索语法1.Github的搜索语法2.使用 Github 进行邮件配置信息收集3.使用Github进行数据库信息收集4.使用Github进行 SVN 信息收集5.使用Github进行综合信息收集在测试的信息收集阶段&#xff0c;可以去Github和码云上搜索与目标有关的信息&#xff0c;或者就有意…...

【案例教程】拉格朗日粒子扩散模式FLEXPART

拉格朗日粒子扩散模式FLEXPART通过计算点、线、面或体积源释放的大量粒子的轨迹&#xff0c;来描述示踪物在大气中长距离、中尺度的传输、扩散、干湿沉降和辐射衰减等过程。该模式既可以通过时间的前向运算来模拟示踪物由源区向周围的扩散&#xff0c;也可以通过后向运算来确定…...

试题 算法训练 自行车停放

问题描述 有n辆自行车依次来到停车棚&#xff0c;除了第一辆自行车外&#xff0c;每辆自行车都会恰好停放在已经在停车棚里的某辆自行车的左边或右边。(e.g.停车棚里已经有3辆自行车&#xff0c;从左到右编号为&#xff1a;3,5,1。现在编号为2的第4辆自行车要停在5号自行车的左…...

泛型与Map接口

Java学习之道 泛型 泛型这种参数类型可以用在类、方法和接口中&#xff0c;分别被称为泛型类&#xff0c;泛型方法&#xff0c;泛型接口 参数化类型&#xff1a;将类型由原来的具体的类型参数化&#xff0c;在使用/调用时传入具体的类型JDK5引入特性提供了安全检测机制&#xf…...

Unity Bug记录本

//个人记录&#xff0c;持续更新 1、将此代码挂载到空脚本上&#xff1a; bool flag (object)GetComponent<Camera>() null; bool flag1 (object)GetComponent<Text>() null; Debug.Log(flag"::"flag1); //输出结果&#xff1a;False::True bool…...

B. The Number of Products)厉害

You are given a sequence a1,a2,…,ana1,a2,…,an consisting of nn non-zero integers (i.e. ai≠0ai≠0). You have to calculate two following values: the number of pairs of indices (l,r)(l,r) (l≤r)(l≤r) such that al⋅al1…ar−1⋅aral⋅al1…ar−1⋅ar is neg…...

一起Talk Android吧(第五百一十二回:自定义Dialog)

文章目录整体思路实现方法第一步第二步第三步第四步各位看官们大家好&#xff0c;上一回中咱们说的例子是"自定义Dialog主题",这一回中咱们说的例子是" 自定义Dialog"。闲话休提&#xff0c;言归正转&#xff0c; 让我们一起Talk Android吧&#xff01;整体…...

GinVueAdmin源码分析3-整合MySQL

目录文件结构数据库准备配置文件处理config.godb_list.gogorm_mysql.gosystem.go初始化数据库gorm.gogorm_mysql.go开始初始化测试数据库定义实体类 Userserviceapi开始测试&#xff01;文件结构 本文章将使用到上一节创建的 CommonService 接口&#xff0c;用于测试连接数据库…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

深入浅出Diffusion模型:从原理到实践的全方位教程

I. 引言&#xff1a;生成式AI的黎明 – Diffusion模型是什么&#xff1f; 近年来&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;领域取得了爆炸性的进展&#xff0c;模型能够根据简单的文本提示创作出逼真的图像、连贯的文本&#xff0c;乃至更多令人惊叹的…...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...

Modbus RTU与Modbus TCP详解指南

目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...

表单设计器拖拽对象时添加属性

背景&#xff1a;因为项目需要。自写设计器。遇到的坑在此记录 使用的拖拽组件时vuedraggable。下面放上局部示例截图。 坑1。draggable标签在拖拽时可以获取到被拖拽的对象属性定义 要使用 :clone, 而不是clone。我想应该是因为draggable标签比较特。另外在使用**:clone时要将…...