数据结构之顺序表的实现

顺序表(SequenceList)数据结构的基本操作实现详解 目录一、前言二、整体设计框架三、函数实现四、完整代码 一、前言 数据结构非常之多,后续小编会逐个更新,简单的存储数据一般有顺序表,链表(单链表和双链表),串等 创建完数据结构后不仅要存储数据,以后还需要查找数据,如果高效的进行查找也需要搜索树,哈希表等这样的结构来实现 有很多人有这样一个疑问:是先学数据结构还是先学算法? 其实数据结构和算法是不分家的,数据结构中包含一些算法,有些算法的解决又离不开数据结构,比如实现Dijkstra最短路径问题是基于Graph的数据结构实现的 二、整体设计框架 实现顺序表, 阅读详情

线性表的实现分顺序存储结构和链式存储结构。

 

顺序表属于线性表的一种,是用一组地址连续的存储单元依次来实现对元素的存储。

 

但是,顺序结构最大的缺点就是在进行插入和删除操作的时候,如果插入位置不理想,那么需要移动大量的元素。可以发现在顺序存储结构中,他们相邻的元素的存储位置也是相邻的,在申请内存的的时候,是一次性申请一块连续的内存,中间是没有空隙的,这样也就没办法进行快速的插入,如果进行删除操作,就需要进行位置的填充。

 

顺序结构最大的好处就是可以快速的存取表中的任一位置的元素。

#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define LISTINCREMENT 10
typedef int Status; //Status 是函数返回值类型,其值是函数结果状态代码。
typedef int ElemType; //ElemType 为可定义的数据类型,此设为int类型
#define LIST_INIT_SIZE 100 //顺序表可能达到的最大长度

typedef struct 
{
	ElemType *elem;
	int length;
	int listsize;
}SqList;

//初始化
Status InitList(SqList &L)
{
	L.elem = (ElemType *) malloc(LIST_INIT_SIZE * sizeof(ElemType));
	if(! L.elem)
		exit(OVERFLOW);
	L.length = 0;
	L.listsize = LIST_INIT_SIZE;
	return OK;
}
//插入
Status insertElement(SqList &L , int i , ElemType e){

	if(1>i || i>L.length+1)
		return ERROR;

	if(L.length>= L.listsize){
		ElemType *newbase = (ElemType *)realloc(L.elem , (L.listsize + LISTINCREMENT)*sizeof(ElemType));
		if(!newbase)
			exit(OVERFLOW);
		L.elem = newbase;
		L.listsize += LISTINCREMENT;
	}

	ElemType *p = &(L.elem[i-1]);
	ElemType *q = &(L.elem[L.length-1]);
	for( ; q>=p ; q--){
		*(q+1) = *q ;
	}
	*p = e;
	L.length += 1;
	return OK;
}

//在顺序表L中删除第i个元素,并用e返回其值
Status deleteElement(SqList &L , int i , ElemType &e){
	if(1>i || L.length<i){
		return ERROR;
	}
	ElemType *p = &L.elem[i-1];
	e = *p;
	 
	ElemType *q = &L.elem[L.length-1];
	for( ; p<=q ; p++){
		*p = *(p+1);
	}
	L.length -= 1;
	return OK;
}
//在顺序表中查找元素
int locateElement(SqList &L , ElemType e){
	//ElemType *p = &(L.elem[0]);
	int i ;
	for(i = 0 ; i<L.length ; i++){
		if(L.elem[i]==e){
			return i;
		}
	}
	return ERROR;
}
//在顺序表中修改第i个元素的值
Status update(SqList &L , int i , ElemType e){
	if(1>i || L.length<i){
		return ERROR;
	}
	L.elem[i-1] = e;
	return OK;
}

int main()
{
	SqList L;

	int temp,a,b,c,e,choose;
	printf("1. 建立顺序表\n");
	printf("2. 输入数据\n");
	printf("3. 查找\n");
	printf("4. 插入\n");
	printf("5. 删除\n");
	printf("6. 输出数据\n");
	printf("0. 退出\n\n");
	choose=-1;
	while(choose!=0)
	{
	printf("请选择:");
	scanf("%d",&choose);
	switch(choose)
	{
	case 1:
		if(InitList(L)) //创建顺序表,并打印出成功或失败的信息
			printf("成功建立顺序表");
		else
			printf("建立顺序表失败");
		break;
	case 2: //输入10个数放入到顺序表中
	printf("请输入10个数字进去:");
	int i;
	for(i=0;i<10;i++)
	scanf("%d",&L.elem[i]);
	L.length=i;
	break;
	case 3: //顺序表的查找
	printf("请输入所要查找的数:");
	scanf("%d",&e);//输入e,代表所要查找的数值,如果成功显示要查找的数是第几个,如果是吧显示没有这样的数
	temp = locateElement(L,e);
	if(temp!=0)
	printf("查找成功\n");
	printf("对应的序号为:%d\n",temp-1);
	break;
	case 4: //顺序表的插入
	printf("请输入两个数,分别代表插入的位置和插入数值:");
	scanf("%d%d",&a,&b); //输入a和b,a代表插入的位置,b代表插入的数值
	if(insertElement(L,a,b))
		printf("插入成功");
	break;
	case 5: //顺序表的删除
	printf("请输入所要删除的数:");
	scanf("%d",&c); //输入c,代表要删除数的位置
	if(deleteElement(L,c,e))
	printf("删除成功");
	break;
	case 6: //顺序表的输出
		for(i=0;i<L.length;i++)
		printf("%d\n",L.elem[i]);
	break;
	}
	}
	return 0;
}

 

FreeModbus V1.6主机模式实战:如何在STM32上实现Modbus RTU主从一体通信 本文详细介绍了如何在STM32平台上利用FreeModbus V1.6开源协议栈实现Modbus RTU主从一体通信。文章深入剖析了V1.6版本主机模式的架构设计,提供了从硬件配置、串口与定时器移植到FreeRTOS操作系统适配的完整实战指南,并分享了数据缓冲区管理、多线程协同及高级调试技巧,为构建稳定可靠的工业通信网关提供了系统化解决方案。 阅读详情

相关推荐

e-puck场景搭建

可以注意到一个黑色的小窗口出现在三维视图的左上角。它显示了电子吸盘机器人的摄像头拍摄的图像。该图像将保持黑色,直到机器人的控制器明确启用相机。最后,单击右上角的“x”可以关闭它。在对话框中,选择PROTO节点(Webots项目)/robots/gctronic/e-puck/e-puck(Robot)。一个电子吸盘机器人应该出现在竞技场的中央。通过按Alt+左键单击+拖动,对机器人施加力。无法对WoodenBox节点施加力,因为默认情况下,它们没有质量,并且被视为粘在地板上。将新控制器与机器人链接。

weixin_66540163的博客 765

顺序表的基本操作(1)——插入操作

顺序表的插入运算 线性表的插入运算是指在表的第i (1≤i≤n+1)个位置,插入一个新元素x,使长度为n的线性表 ( a1​,…,ai−1​,ai​,…,an​) 变成长度为n+1的线性表( a1​,…,ai−1​,x,ai+1​,…,an​) 。 算法思想:用顺序表作为线性表的存储结构时,由于结点的物理顺序必须和结点的逻辑顺序保持一致,因此我们必须将原表中位置n-1,n-2,…,i-1上的结点,依次后移到位置n,n-1,…,i上,空出第i-1个位置,然后在该位置上插入新结点x。当i=n+1时,是指..

just do something 2万+

概率论—期末复习速成笔记(自用)

概率论期末复习

a200327的博客 2万+

顺序表基本操作

1. 顺序表插入元素 向顺序表中插入数据元素,根据插入位置的不同,可分为以下 3 种情况: 插入到顺序表的表头; 在表的中间位置插入元素; 尾随顺序表中已有元素,作为顺序表中的最后一个元素; 虽然数据元素插入顺序表中的位置有所不同,但是都使用的是同一种方式去解决,即:通过遍历,找到数据元素要插入的位置,然后做如下两步工作: 将要插入位置元素以及后续的元素整体向后移动一个位置; 将元素放到腾出来的位置上; 例如,在 {1,2,3,4,5} 的第 3 个位置上插入元素 6,实现过程如下: 遍历至顺序表

Lianuuu的博客 5632

Dify实战:智能邮件工作流配置全解析

本文详细解析了如何利用Dify平台配置智能邮件工作流,实现邮件处理的自动化与智能化。内容涵盖从获取邮箱授权、安装插件、安全配置环境变量,到构建邮件发送工作流、创建调用该工作流的智能体(Agent)的完整步骤,并分享了连接知识库实现智能客服、定时发送日报等进阶自动化场景,旨在帮助用户显著提升邮件处理效率。

t8u9v0w1x的博客 794

CAN 比特率和采样点计算

架构根据输入频率和比特率自动计算。

ldinvicible的专栏 787

顺序表如何插入元素? 看这里!!

顺序表的插入

qq_63179750的博客 3997

QMT与通达信代码实战:从预警到交易的自动化实现

本文详细介绍了如何利用QMT量化交易平台与通达信软件实现从预警到交易的全自动化。通过读取通达信预警生成的板块文件,QMT策略可自动执行买卖指令,有效解决手动交易滞后问题。文章提供了完整的代码框架、核心原理拆解及实盘注意事项,帮助投资者构建高效、纪律性的自动化交易系统。

ansible6ops的博客 648

PTA 6-3 求顺序表最小值

6-3 求顺序表最小值添加链接描述 本题要求实现一个函数,要求返回顺序表的最小值,空表返回0。题目保证顺序表中所有元素都为正整数。 函数接口定义: int GetMin(SqList L); 其中SqList结构定义如下: typedef struct{ ElemType *elem; int length; }SqList; ``` 裁判测试程序样例: #include <stdio.h> #include <stdlib.h> #define MAXSIZE 5 typedef

wcd278212784的博客 4004

保姆级教程:在Ubuntu 20.04上从零搞定ROS Noetic和RealSense驱动,为无人机开发铺路

本文提供了一份详细的Ubuntu 20.04环境下ROS Noetic和RealSense驱动安装指南,专为无人机开发环境搭建设计。从系统配置、ROS安装到RealSense驱动集成,涵盖所有关键步骤和常见问题解决方案,帮助开发者快速搭建自主空中机器人开发平台。

weixin_30329623的博客 65

Python实战:超分辨率图像质量评估全攻略——PSNR、SSIM、LPIPS与NIQE的代码实现与优化

本文详细介绍了在Python中实现超分辨率图像质量评估的完整方案,涵盖PSNR、SSIM、LPIPS和NIQE四大核心指标。通过模块化代码设计、多进程并行处理和GPU加速优化,帮助开发者构建高效、可扩展的评估系统,并提供了实战避坑指南与结果解读方法。

weixin_29053073的博客 472

[数据结构]顺序表的基本操作——插入

最终实现的效果: 具体步骤: 例如:i=3,即在data[2]处插入数据。需要注意的是,数据元素按照从后往前的顺序依次向后移动一位。 好的算法应该具备“健壮性”,例如此时执行ListInsert(L,9,3)是不正确的,因为此时该顺序表只存储了6个数据元素,如果在顺序表的第9个位置插入数据的话,会导致数据不连续存储,操作是不合法的。 增加对i的判断语句,当i合法时再进行后续操作。同时增加return true;return false;的语句,给予使用者反馈。 ...

m0_64973566的博客 4775

声发射传感器的工作原理是什么?

介绍声发射传感器的工作原理。

qq_39948394的博客 9246

【数据结构初阶】二、 线性表里的顺序表(C语言实现顺序表)

线性表里的顺序表:1 . 线性表 ; 2 . 顺序表 ; 3 .接口实现(实现动态顺序表) ;4 . 对应代码

正在努力学C呀!(要学好久呢......) 4930

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

数据结构——顺序表和通讯录的实现

今天开启数据结构篇章,后续与顺序表相关的是链表,会持续更新。顺序表是入门的数据结构,从顺序表开始,了解如何存储并管理数据,可以尝试敲敲代码!今天内容还是蛮多的,希望你在看的同时,也能上手敲敲代码,感受数据结构的设计。多多重复,百炼成钢!创作不易,希望这篇文章能给你带来启发和帮助,如果喜欢这篇文章,请留下你的三连哦,你的支持的我最大的动力!!!

2301_79171011的博客 1909

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【数据结构 1】顺序表及其Java实现

顺序表一、什么是数据结构?二、线性数据结构三、顺序表及其Java实现3.1 什么是顺序表?3.2 顺序表的实现(固定容量版)3.2.1 API设计3.2.2 代码3.3 顺序表的实现(容量可变版)3.3.1 容量伸缩方案3.3.2 代码3.4 顺序表的时间复杂度3.5 补充 一、什么是数据结构? 数据结构是为实现对计算机数据有效使用的各种数据组织形式,服务于各类计算机操作。 不同的数据结构具有各自对应的适用场景,旨在降低各种算法计算的时间与空间复杂度,达到最佳的任务执行效率。 如下图所示,常见的

Java技术工坊 648

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【C++】数据结构 顺序表的实现(详解)

本篇博客给大家带来的是用C++语言来实现数据结构的顺序表

就业知识博客 2223

数据结构顺序表实现

数据结构之顺序表欢迎使用Markdown编辑器顺序表基本算法实现 欢迎使用Markdown编辑器 最近在做一些考研题目,发现有些同学不会去实现数据结构的代码,我就将李春葆老师的数据结构第5版中的算法实现了一些基础的功能给同学们参考,大家可以在此基础上实现新的功能并验证,代码可以直接运行,编译器我用的是dev C++. 顺序表基本算法实现 //参考书籍:李春葆数据结构教程第5版 #include<iostream> #include<cstdlib> using namespace

qq_43620838的博客 567

【C语言】数据结构——顺序表超详解!!!(包含顺序表的实现)

本文详细介绍了C语言中顺序表这一数据结构的概念与实现。首先解释了数据结构的基本概念,然后重点讲解了顺序表的定义、分类(静态顺序表和动态顺序表)及其区别。文章通过代码示例详细展示了如何创建和实现动态顺序表,包括顺序表的定义、初始化、销毁、打印等基本操作,特别强调了动态顺序表的增容机制。最后指出在实现复杂程序时应采用多文件结构,使代码更加清晰可维护。顺序表作为线性表的一种重要实现方式,在C语言程序设计中具有广泛应用价值。

zore__的博客 8737

数据结构中的顺序表的实现

本期主要分享了数据结构的总体章程以及数据结构中顺序表的实现过程,那么给出了顺序存储的两种形式(定义结构体不同),当然,萝卜白菜各有所爱,我比较喜欢第一种,操作起来比较方便,因为它在结构体中直接存储了顺序表的总个数,显得整个顺序表具有整体性;但是两种形式在本质上气势上是一样的,都是顺序表且本质完全一致;小伙伴们学起来,加油!

weixin_58016534的博客 1204

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

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

Dream_Y.ocean的博客 6705

数据结构---顺序表的实现

本文介绍了用C语言实现的顺序表数据结构,包括创建表头、扩容、插入/删除元素、查找、展示和释放等操作。顺序表是一种类似于可扩容数组的结构,通过动态内存分配实现存储空间的灵活调整。文章详细讲解了每个功能的实现逻辑,如使用malloc分配内存、扩容时采用2倍策略、利用memcpy高效拷贝数据等。作为数据结构的基础内容,顺序表的实现有助于理解更复杂数据结构的底层原理。作者作为初学者,希望通过分享代码帮助他人学习,并欢迎读者提出改进建议。

2501_91889422的博客 2100

数据结构——顺序表的C语言代码实现

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、基础知识1.顺序表的概念(Sepential List)2.常用的接口函数3.realloc()函数使用细节4.assert( )函数二、代码实现1.SepList.h(1)引用函数库(2)定义动态顺序表(3)接口函数声明2.SepList.c(1)引用头文件(2)初始顺序表(3)检测顺序表容量是否足够(4)顺序表的尾插法(5)顺序表的尾删法<1>使用if判断的温和法<2>使用assert()断言的.

AZ10000000的博客 7131

数据结构线性表篇-顺序表的实现

2.线性表的介绍1.数据结构的介绍⚀基本概念⚁常见的数据结构当我们了解了数据结构的基本概念之后,再为大家介绍一下常见的数据结构:数据结构可以从两方面来分析:逻辑结构和物理结构2.线性表的介绍⚀基本概念线性表就是将n个具有相同特性、相同类型的数据一个一个地链接起来,使得数据存放的方式在逻辑结构上看起来是一条直线,一条连续的存放数据的直线。。线性表是一种最基本的数据结构,它可以看作是,每个元素都有唯一的(除了第一个和最后一个元素)。这种结构体现了数据元素之间的一对一关系。

2301_76874759的博客 925

数据结构顺序表C语言实现

数据结构算法实现 顺序表顺序储存结构C语言实现版 #include <stdio.h> #define MAXSIZE 100 #define OVERFLOW 0 #define OK 1 #define ERROR 0 int main(){ } //顺序表顺序储存结构 ,这里泛型定义为整形 typedef struct{ int *elem; int lengh; }Sq...

ojemmm的博客 1034

数据结构中实现顺序表

数据结构中实现顺序表 需要实现哪些方法 package cn.dataStructure.com; public interface List { //返回线性表的大小,即数据元素的个数 public int size(); //返回线性表中序号为i的数据元素 public Object get(int i); //如果线性表为空,返回true,否则...

weixin_44007988的博客 158
上一篇: 常用的20个正则表达式
下一篇: 数据结构之线性链表
silentkunden
博客等级 码龄9年 28粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值