线性表1:顺序表的增 删 改 查

【数据结构入门】顺序表(SeqList)详解(初始化、增、删、查、改) 文章目录(1)线性表(2)顺序表1)什么是顺序表2)顺序表的定义2)顺序表的接口实现1、初始化顺序表2、销毁(释放)顺序表3、检查顺序表容量是否满了,好进行增容3、顺序表尾插4、顺序表尾删5、顺序表头插6、顺序表头删7、打印顺序表8、在顺序表中查找指定值9、在顺序表指定下标位置插入数据10、在顺序表中删除指定下标位置的数据11、查看顺序表中有效数据个数12、修改指定下标位置的数据 (1)线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结 阅读详情


此系列文主要用于自查、复习。所以行文、逻辑、思路是按照个人的思考方式来的,但也希冀能帮到一二三位初学者。

线性表的特点

线性表的特点:
1.表头无前驱,表尾无后继
2.其他元素有且仅有一个直接前驱和一个直接后继

线性表有顺序存储结构和链式存储结构,下面介绍顺序存储结构的顺序表。

顺序表的描述

优点: 存储密度高、按位置修改和查找比较方便
缺点: 需要连续的空间,增删比较麻烦

描述: 数组+last尾元素下标

#define MAXSIZE 100

//给表中存储的数据类型取个别名,方便换
typedef int datatype;

//给顺序表结构体类型也取个别名
typedef struct list {
	datatype data[MAXSIZE];
	int last;//记录表尾元素下标
}seqlist, *seqlist_t;

基本操作

创建空顺序表

用malloc动态申请空间

seqlist_t createSeqList()
{
	seqlist_t p = NULL;

	//1.申请空间
	p = (seqlist_t)malloc(sizeof(seqlist));
	if(NULL == p)	//malloc函数有可能会失败,需要判断一下是否失败
	{
		perror("malloc");//perror将上一个函数的错误原因输出到标准设备
		return NULL;
	}

	//2.last = -1;
	p->last = -1;	//链表刚申请,内容为空,先给尾标志赋-1

	//3.返回这片空间的地址
	return p;
}

判空

表为空返回1,不为空返回0

int isEmpty(seqlist_t L)
{
	return (L->last == -1)?1:0;
}

判满

表满返回1,不满返回0

int isFull(seqlist_t L)
{
	return ((L->last + 1) == MAXSIZE) ? 1:0;
}

增

在pos位增加元素,原先pos处及之后所有元素后移,这是顺序表的缺点所在,时间复杂度为O(n)

int insertSeqList(seqlist_t L, int pos, datatype x)
{
	int i;

	//表是否为满,以及位置合法不?
	if(isFull(L) || pos < 0 || pos > L->last+1)
	{
		printf("插入失败:表为满或者位置不合法\n");
		return -1;
	}

	//在pos处插入数据,pos及之后的数据皆向后移一位
	for(i = L->last; i >= pos; i--)
	{
		L->data[i+1] = L->data[i];
	}
	
	L->data[pos] = x;
	L->last++;

	return 0;
}

删

删除pos位,后面所有元素前移,这是顺序表的缺点所在,时间复杂度为O(n)

int deleteSeqList(seqlist_t L, int pos)
{
	int i = -1;

	//位置合法不?是否为空
	if(isEmpty(L) || pos < 0 || pos > L->last)
	{
		printf("删除失败:表为空或位置不合法\n");
		return -1;
	}

	//删除
	for(i = pos+1; i <= L->last; i++)
		L->data[i-1] = L->data[i];

	L->last--;

	return 0;
}

改

和改数组元素没什么区别,这是顺序表的优点

int changeSeqList(seqlist_t L, int pos, datatype x)
{
	//位置合法不?
	if(pos < 0 || pos > L->last)
		return -1;

	L->data[pos] = x;//时间复杂度为O(1)
		return 0;
}

查

第一种方式: 按数据元素的值查找

int searchSeqList(seqlist_t L, datatype x)
{
	int pos;
	for(pos=0; pos<=L->last; pos++)//顺序查找
	{
		if( L->data[pos] == x)
			break;
	}
   
    if(pos >last)
        return -1
        
	return pos;
}

第二种方式: 按位置查找
这种查找实在太简单,这里仅给出函数原型作为参考

datatype searchSeqList(seqlist_t L, int pos);

遍历输出

和数组遍历输出没什么区别

void showSeqList(seqlist_t L)
{
	int i;
	
	for(i = 0; i <= L->last; i++)
		printf("%d ", L->data[i]);

	printf("\n");
}

求表长

表长就是尾标志加1,这是顺序表的优点

int getLengthSeqList(seqlist_t L)
{
	if(NULL != L)
		return L->last+1;

	return -1;
}

逆序输出

void reverse(seqList_t L)
{
	int i, temp;
	for(i=0; i< L->last/2; i++)
	{
		temp = L->data[i];
		L->data[i] = L->data[L->last - i];
		L->data[L->last - i] = temp;
	}
}

排序

void order(seqList_t L)
{
	int i, j, min, temp;
	for(i=0; i<= L->last-1; i++)
	{
		min = i;

		for(j=i+1; j<= L->last; j++)
		{
			if(L->data[min] > L->data[j])
				min = j;
		}
	
		if(min != i)
		{
			temp = L->data[i];
			L->data[i] = L->data[min];
			L->data[min] = temp;
		}
	}
}

清空表

表里的数据不要了

void clearSeqlist(seqlist_t L)
{
	if(NULL != L)
		L->last = -1;
}

表中元素不必人为清除,因为last置为-1后就代表这些数据都无意义了,就把它们看作是垃圾数据就行

销毁表

这张表我都不要了

void destorySeqList(seqlist_t L)
{
	if(NULL != L)
	{
		free(L);
		L = NULL;
	}	
}

将malloc申请的这篇空间free掉,L记得赋上NULL,避免悬空

main.c //测试功能

#include"seqlist.h"

int main()
{
	seqlist_t L = createSeqList();
	if(NULL == L)
	{
		printf("创建顺序表失败\n");
		return -1;
	}

	//printf("%d\n", isEmpty(L));
	//printf("%d\n", isFull(L));

	insertSeqList(L, 0, 1);
	insertSeqList(L, 0, 2);
	insertSeqList(L, 0, 3);
	insertSeqList(L, 0, 4);
	//insertSeqList(L, 9, 5);
	//insertSeqList(L, -1, 6);
	showSeqList(L);

	printf("**************************\n");
	deleteSeqList(L, 0);
	deleteSeqList(L, 0);
	showSeqList(L);
	
	printf("**************************\n");
	changeSeqList(L, 1, 666);
	showSeqList(L);
	
	printf("**************************\n");
	int pos = searchSeqList(L, 3);
	if(-1 == pos)
		printf("NOT FOUND\n");
	else
		printf("pos = %d\n", pos+1);

#if 0
	destorySeqList(L);
#endif
    return 0;
}

拓展阅读
线性表1:顺序表的增 删 改 查
线性表2:链表的基本操作
线性表3:单向循环链表
线性表4:双向循环链表

RM机器人麦轮底盘实战:从零搭建到PID调参全记录(附避坑指南) 本文详细记录了RM机器人麦轮底盘从零搭建到PID调参的全过程,涵盖硬件组装、开发环境搭建、底盘解算和PID调参等关键步骤,并附有实用的避坑指南。特别针对麦轮控制、底盘解算和电机调试等核心问题提供了专业解决方案,帮助开发者快速提升机器人性能。 阅读详情

相关推荐

miniDP与DP管脚定义差异详解及设计避坑指南

本文详细解析了Mini DisplayPort与标准DisplayPort接口在管脚定义上的核心差异,通过对比表格直观展示了两者20针脚的不同排列方式,特别是高速差分信号线的分布。文章结合真实设计案例,为硬件工程师提供了从原理图设计、PCB布局到信号完整性考量及故障排查的完整避坑指南,强调绝不能将两者视为简单的物理缩小版。

weixin_29248653的博客 362

C语言数据结构-顺序表的插入与删除(图文详解)

内容概要 本篇推文主要给大家介绍顺序表插入和删除的操作原理以及其具体的代码实现,了解顺序表的几种基本运算,要注意理解插入删除算法的原理掌握其实现代码 顺序表的基本运算 顺序表的插入运算 顺序表上完成插入运算的步骤如下: 将第n个至第i个位置的元素顺序向后移动一个位置,为新元素空出第i个位置。 将x置入空出的第i个位置。 表长加1。 代码实现 int Insert_SeqList (SeqList *L,ElemType x,int i) { //在下标为i的位置插入新元素 int k;

weixin_45745641的博客 6330

Synology-群晖(三)DSM7.0系统Video Station无法播放DTS eac3解决方案

群晖升级DSM7.0后,发现部分DTS eac3解码的视频无法通过Vedio Station 3.0.1-2067进行播放,提示不支持该格式视频,初步判断是无法加载ffmpeg解码导致,网上搜了很多处理办法都没有办法解决,最终在知乎上看到一片文章,按此办法解决了这个问题,目前经过验证,该方案完美支持最新版本Video Station 3.0.1-2067,验证系统为DSM7.0和DSM7.0.1,这里使用的NAS为 Vmware虚拟机 黑群晖 演示。大概步骤如下: 添加这个社群来源 http://p

weixin_45827203的博客 3万+

【数据结构】顺序表(SeqList)(增、删、查、改)详解

在数据结构中,如果要访问或者修改数据结构中的数据不要直接访问,而是应该去调用它的函数来访问和修改,这样会更加规范和安全,也更方便检查出是否出现了越界等错误情况。数组越界是不一定报错的,系统对越界的检查是设岗检查。越界读(读了不属于自己的数据),一般是检查不出来的,往往并不会造成内存奔溃。越界写(缓冲区溢出)如果是修改到标志位才会被检查出来,会造成数据破坏,严重会造成内存奔溃。(系统在数组末尾后设的有标志位,越界写时,恰好修改到标志位了,就会被检查出来)

Elena's Blog 4449

使用verilog实现基于FPGA的TDC设计

verilog实现TDC 高精度时间数字转换器概述(TDC) 简介: TDC被用于测量时间间隔,应用在物理研究、飞行时间测量领域等。 本设计使用verilog实现并在xilinx和altera的FPGA上均可实现! 设计中使用到下述几个模块,包括FIFO,COUNT等,在xilinx下也使用到了一些原语等。下面有实现的代码和仿真截图等。 顶层模块设计如下: module top( input wire start, input wire stop, input wire clk, output wire T

QQ_778132974的博客 6254

基于STM32+华为云设计的智能鱼缸

本项目基于STM32单片机设计一款基于物联网的智能鱼缸系统,并通过应用侧接口开发上位机APP实现远程对鱼缸参数的检测和控制。该系统包括水温检测、水质检测、自动或手动换水、氛围灯灯光变换和自动或手动喂食等功能,可以帮助用户更好地管理鱼缸,提高鱼儿的生存率,同时增强用户对家庭装饰品的掌控感和科技感。

1万+

线性表的增删改查

什么是数据结构 数据结构,从名字上看是数据的结构,也就是数据的组织方式。 什么是线性表 线性表是 n 个数据元素的有限序列,最常用的是链式表达,通常也叫作线性链表或者链表。在链表中存储的数据元素也叫作结点,一个结点存储的就是一条数据记录。每个结点的结构包括两个部分: 具体的数据值。 指向下一个节点的指针。 在链表的最前面,通常会有个头指针用来指向第一个结点。对于链表的最后一个结点,由于在它之后没有下一个结点,因此它的指针是个空指针。 仔细观察上图,你会发现这个链表只能通过上一个结点的指针找到下一个结

weixin_38933749的博客 1189

卷积码Viterbi译码算法原理及C语言实现

具体而言,卷积码的编码过程是将输入数据和编码器中的状态进行异或操作,输出码字为各个状态对应的结果。Viterbi译码算法是一种最大似然译码算法,根据接收到的含有噪声的码字,寻找出最有可能的原始数据序列。(2) 递推计算:根据接收到的码字和当前状态,计算下一时刻各个状态的路径度量,并记录每个状态的前驱状态。以上代码实现了一个简单的卷积码Viterbi译码算法,通过接收到的码字进行译码,并输出解码结果。(1) 初始化:将所有状态的路径度量初始化为一个很大的值,选择路径度量最小的状态作为起始状态。

2301_79331421的博客 826

Java线性表的插删改查_线性表1:顺序表的增 删 改 查

顺序存储结构【顺序表】的增 删 改 查seqlist此系列文主要用于自查、复习。所以行文、逻辑、思路是按照个人的思考方式来的,但也希冀能帮到一二三位初学者。线性表的特点线性表的特点:1.表头无前驱,表尾无后继2.其他元素有且仅有一个直接前驱和一个直接后继线性表有顺序存储结构和链式存储结构,下面介绍顺序存储结构的顺序表。顺序表的描述优点: 存储密度高、按位置修改和查找比较方便缺点: 需要连续的空间,...

weixin_36399495的博客 277

2026 MCM Problem A:智能手机电池连续时间建模——完整解题思路附第一问解题代码

摘要:本文针对2026年MCM A题"智能手机电池连续时间建模"问题,提出基于能量守恒原理的微分方程模型。通过建立以SOC(t)为状态变量的动态系统,将屏幕亮度、处理器负载等主要耗电因素纳入统一功率框架,实现了不同使用场景下的电量变化精确描述。研究表明,屏幕亮度和CPU负载对续航时间影响最大,温度与后台任务会产生放大效应。该模型具有物理可解释性和应用扩展性,为手机电源管理提供了理论依据。(150字)

一键难忘的博客 771

DaVinci Developer和DaVinci Configurator:AutoSAR开发与配置工具

a. 组件创建:DaVinci Developer允许开发人员创建不同类型的AutoSAR软件组件,如应用软件组件(Application Software Component,SWC)、基础软件组件(Basic Software Component,BSWC)等。除了以上功能,DaVinci Developer和DaVinci Configurator还提供了丰富的文档和代码生成功能,以支持开发人员和配置人员进行文档编写、代码生成和文档浏览等任务。用户可以根据具体需求对软件组件进行灵活的配置。

HmoaAmp的博客 2262

【数据结构导论】第 2 章:线性表

线性表是一种常见的数据结构,它由一组相同类型的元素组成,其中每个元素都有唯一的前驱和后继元素。线性表的实现方式有很多,链表和数组是两种常见的实现方式。

顾三殇 —— 博客空间(软件测试) 2788

高并发网络爬虫实践(欧赔、亚盘、大小指数数据爬取)

本文通过对一个实战化的高并发网络爬虫脚本进行深度模块化剖析,展示了如何构建一个兼具性能、健壮性和易用性的数据采集工具。核心设计思想总结模块化与单一职责: 每个函数都专注于解决一个特定问题,无论是网络请求、数据解析还是文件操作。并发与效率: 通过ThreadPoolExecutor实现了高效的并发抓取,极大缩短了总耗时。健壮性与容错: 强大的重试机制、细致的异常处理和线程安全的文件写入,保证了程序在复杂网络环境下的稳定运行。断点续传: 精心设计了进度记录与恢复机制,使得大规模抓取任务变得轻松可控。

猫敷雪 486

【数据结构】顺序表(增、删、查、改)的实现 [初阶篇_ 复习专用]

线性表是n个具有相同特性的数据元素的有限序列线性表是一种在实际中广泛使用的数据结构,常见的线性表顺序表、链表、栈、队列、字符串…线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的【线性表在物理上存储时,通常以数组和链式结构的形式存储】❗对于数据结构,C语言提供了结构体类型给我们使用,让我们更方便的整合一个结构,去利用结构体实现数据结构🥯Ⅱ.✨综上就是线性表的概念啦~➡️简单来说线性表是一种常见的数据结构,它在逻辑结构上呈连续直线结构,但物理上就不一定是。...

Dream_Y.ocean的博客 6705

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

线性表--顺序表的增、删、查、改

线性表—>顺序表1 实现顺序表的增、删、查、改 线性表分为顺序表和链表,这篇首先写的是顺序表的一些最最最最基本的操作~~增、删、查、改 文章目录线性表--->顺序表10.包含头文件创建、销毁 --顺序表1.增-头插-尾插-指定位置的插入内存扩容2.删-头删-尾删-指定位置的删除3.查找、修改某一个元素删除特定的元素 0.包含头文件 #include <stdio.h> #i...

身在边城 心在编程 435

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

顺序表 -->增、删、查、改等详细操作

本文系统介绍动态顺序表的实现与应用,以分文件编程方式完成头文件声明、源文件实现与测试验证。内容包含动态顺序表的结构定义、初始化、销毁、扩容检查及尾插/尾删、头插/头删、指定位置插入删除、查找等核心接口。文中明确各操作的时间复杂度,提炼常见易错点,帮助规避空指针、越界、内存泄漏等问题。通过完整可运行代码,清晰展示动态顺序表的底层逻辑,为线性表与后续数据结构学习奠定基础

2502_91744920的博客 4828

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C语言实现顺序表(增,删,改,查)

数据结构和算法概述-优快云博客。

lh11223326的博客 2319

【C语言】实现顺序表的增、删、查、改

在实现顺序表之前先来了解几个概念。1、线性表n(n&gt;=0)个数据元素组成的一个有限序列,可以在其任何位置上进行插入和删除操作的线性数据结构。从数据在物理内存存储形式上线性表可分为:顺序表和链表。由上图可看出:线性表中数据与数据之间存在一对一的关系,即除第一个元素和最后一个元素外,每个元素都有唯一的直接前驱和唯一的直接后继,第一个元素没有前驱,最后一个元素没有后继。2、顺序表用一段地址连续的存...

weixin_38682277的博客 2115

顺序表的增、删、改、查

/存储数据的底层结构//记录顺序表的空间大小int size;//记录顺序表当前有效的数据个数}SL;细心的小伙伴们发现我也给结构体取了一个别名SL,这样也是为了方便接下来的使用。当然你也可以这样写//存储数据的底层结构//记录顺序表的空间大小int size;//记录顺序表当前有效的数据个数。

weixin_71964451的博客 1295

【数据结构】链表——增、删、查、改

本文结束了链表的概念与使用,用图解的方式阐明了链表的增删查改,让我们一起来学习链表吧。

2301_77003537的博客 2975

线性表的基本操作(初始化、创建、增、删、查)

线性表的基本操作

柯西从不收敛 8202

数据结构——线性表(顺序表)

定义:线性表是具有相同数据类型的n个数据元素的有限序列,n为表长特点:1.唯一一个被称作”第一个“的元素2.唯一一个被称作"最后一个"的元素3.除第一个元素外,每个元素只有一个前驱(第一个没有前驱)4.除最后一个外,每个元素只有一个后继(最后一个没有后继)静态分配:长度不可变化,用于已知表的长度进行存储//顺序表实现//静态分配#define maxsize 10 //定义最大长度//开辟空间 用静态数组存放数据int length;//当前顺序表长度}sqlist;//初始化。

m0_74212807的博客 1847

【数据结构】单链表(增、删、查、改)的实现 [初阶篇_ 复习专用]

链表是一种物理存储结构上非连续、非顺序的存储结构数据元素的逻辑顺序是通过链表中的指针链接次序实现的❗链表也符合我们在顺序表中提及的线性表,即链表也是线性表的一种🥯Ⅱ.✨综上就是链表的概念啦~➡️简单来说链表是逻辑结构上类似于顺序表的连续的结构,但实际物理结构是不一定连续存储的以下,我们便具体说说为什么?🍞二.✨综上就是单向链表接口实现的内容啦~➡️相信大家对单链表有不一样的看法了吧🧡🍞四.综上,我们基本了解了数据结构中的“链表”🍭的知识啦~~恭喜你的内功又双叒叕得到了提高!!!...

Dream_Y.ocean的博客 5898

【数据结构(C语言)】顺序表的定义,实现初始化、创建、插入、增、删、改、查等基本操作(详细)

顺序表是在计算机内内存中以数组的形式保存的线性表, 线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、 使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中, 即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系, 采用顺式存储结构的线性表通常称为顺序表。 相对于链式存储结构而言,顺式存储结构显得更为简单。 顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。 顺序表的基本运算有: 初始化 查找 插入 删除 输.

DuFengYa的博客 1万+

c语言数据结构:顺序表(增,删,查,改)

线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的⼀条直线。但是在物理结构上并不一定是连续的, 线性表在物理上存储时,通常以数组和链式结构的形式存储。 顺序表的底层结构是数组,对数组的封装,实现了常用的增删改查等接口所以可以这么说,顺序表的本质就是一个数组.静态顺序表因为不常用,这里便不进行介绍了,感兴趣的可自行去了解重点是动态顺序表举个例子来更好的了解

m0_73426459的博客 942

【初阶数据与算法】线性表之顺序表的定义与实现

其中memmove的第一个参数是我们要移动的目标位置的地址,很明显就是顺序表中第二个元素的地址,即ps->arr+1,第二个参数就是我们源位置的地址,是顺序表中第一个元素的地址,即ps->arr,它的第三个参数就是要拷贝的字节数,就是有效元素个数乘以一个元素的大小。在上面静态顺序表的静态是指它的大小是固定的,同理,动态顺序表里面的动态就是指顺序表的大小是不固定的,也就是顺序表底层的数组的大小是不固定的,可以动态的变化,比如开始时给出4个元素的大小,不够时顺序表可以实现自动增容。

hdxbufcbjuhg的博客 8780
上一篇: 适合C语言初学者的编译器:Dev_C++的详细安装&基本操作&更改背景
下一篇: 线性表2:链表的基本操作
hellohelloe
博客等级 码龄8年 18粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值