数据结构——顺序表

数据结构之顺序表:顺序表的结构及基本操作 目录一、数据结构1.1 算法与数据结构的区别二、顺序表2.1 顺序表的基本形式【重点】2.2 顺序表的两种基本实现方式【重点】1、一体式结构:2、分离式结构:2.3 元素存储区替换与扩充1. 元素存储区的替换2. 元素存储区的扩充2.4 顺序表的操作1. 增加元素2. 删除元素2.5 Python中的顺序表 一、数据结构 数据结构指数据对象中数据元素之间的关系。 计算机只有三种数据类型:int、float、char。存储在内存中,1个int占4个字节。 1.1 算法与数据结构的区别 程序 = 数据结构 阅读详情

顺序表的特征:

   1由唯一的表名标识;

   2占据一块连续的存储空间;

   3数据顺序存放,元素之间有先后关系;

 

定义动态的顺序表:

#define MaxSize 100

typedef struct{

ElemType *elem;

int length;   //顺序表中元素的个数

int listsize;   //顺序表所分配的存储单元个数

} Sqlist;

/*这个结构体类型存放的是顺序表的信息和顺序表的数据*/

 

初始化顺序表

void initSqlist(Sqlist *L)   /*初始化一个顺序表*/

{

   L->elem=(float *)malloc(MaxSize*sizeof(int));    //为顺序表分配MaxSize个元素的空间

   if(!L->elem) exit(0);    //第一个元素不是空指针则返回

/*初始化结构体成员*/

   L->length=0;   //顺序表中没有元素,长度为0

   L->listsize=MaxSize;   //顺序表的最大长度

}           

 

向顺序表中插入元素:

1判断插入位置是否合法

若根据数组索引的习惯,一个长度为n的顺序表插入元素的位置是0到n-1,所以i<0,i>n(应为n-1,可是这样原来长度为0就不行了)皆不合法

2如果分配的内存空间不够,则追加内存空间;

3将表中i-1之后的元素后移一个元素位置(要从后往前遍历)

4将下标为i的位置插入目标元素

 

 

代码:

void insert(Sqlist *L,int i,float m)   /*向顺序表中插入一个元素  L:顺序表的头指针; i要插入的元素的位置(这里使用的是数组习惯的索引方式); m:要插入的数据的内容 */

{

       float *base,*insertPtr,*p;    //base:追加内存空间后顺序表的基地址;insertPtr:插入元素的位置的指针; 

 

  if(i<0||i>L->length)  exit(0);//1插入越界,非法 有效范围是从0开始到元素个数减1

 

       /*2如果顺序表的元素个数超过了顺序表的最大长度,追加内存空间*/ 

  if(L->length>=L->listsize)

{ 

  base=(float *)realloc(L->elem,(L->listsize+100)*sizeof(float));    //realloc函数用于在已分配内存基础上追加内存空间,所追加的空间是连续的

  L->elem=base;  //更新内存基地址

  L->listsize+=10;     //存储空间增大10单元

}

 

         insertPtr=&(L->elem[i]);   //给插入元素的位置的指针赋值;

 

        /*3将i-1后的元素顺序后移一个元素的位置*/

for(p=&(L->elem[L->length-1]);p>=insertPtr;p--)    //从后往前遍历,初始位置是顺序表的最后一个元素

{

*(p+1)=*p;   //前一个元素放到后一个的位置,实现顺序后移

            }

 *insertPtr=m;  //4在第i个位置插入要插入的元素

L->length++;//表长递增1;

 

}

 

 

删除顺序表中的元素:

1判断删除位置是否越界(长度为n的顺序表从0到n-1有效)

2i后的元素前移一个元素的位置(要从前往后遍历)

3前移的过程目标元素自然删除;

 

 

/*删除顺序表中的指定元素*/

void del(Sqlist *L,int i)   /*L:顺序表的头指针; i要删除的元素的位置(这里使用的是数组习惯的索引方式)*/

{

       float *delptr,*p;    //delptr:要删除的元素的指针,p:索引指针

 

  if(i<0||i>L->length)  exit(0);//删除越界,非法 有效范围是从0开始到元素个数减1

 

       /*删除不需要追加内存空间*/ 

 

         delptr=&(L->elem[i]);   //给删除元素的位置的指针赋值;

 

        /*将i后的元素顺序前移一个元素的位置*/

for(p=delptr;p<&(L->elem[L->length-1]);p++)    //从前往后遍历,初始位置是顺序表要删除的位置

{

*p=*(p+1);   //后一个元素放到前一个的位置,实现顺序前移

            }

L->length--;

//顺序前移的过程中顺便就把目标元素删除了

 

}

 

 

整体代码:

功能:

1初始化一个顺序表;

2从0到14插入15个数,并将表中所有元素打印出来

3删除下标为4的元素,并将表中所有元素打印出来

 

#include<stdio.h>

#include<stdlib.h>

#define MaxSize 10    //初始:分配10个元素的空间

typedef struct{

float *elem;      //定义了顺序表的基地址,顺序表中的数据的类型是float,也可以是其他类型的数据

int length;     //顺序表中元素的个数

int listsize;    //顺序表的最大长度 

} Sqlist;

void initSqlist(Sqlist *L);

void insert(Sqlist *L,int i,float m);

void del(Sqlist *L,int i);

 

main()

{

    Sqlist item;

     initSqlist(&item);

     int i;

for(i=0;i<15;i++)

{

 insert(&item,i,i);

}

for(i=0;i<item.length;i++)

{

printf("  %f",item.elem[i]);

}

printf("/n/n");

 

     del(&item,4);

for(i=0;i<item.length;i++)

{

printf("  %f/n",item.elem[i]);

}

 

}

void initSqlist(Sqlist *L)   /*初始化一个顺序表*/

{

   L->elem=(float *)malloc(MaxSize*sizeof(int));    //为顺序表分配10个元素的空间

   if(!L->elem) exit(0);    //第一个元素不是空指针则返回

   L->length=0;   //顺序表中没有元素,长度为0

   L->listsize=MaxSize;   //顺序表的最大长度

}

 

void insert(Sqlist *L,int i,float m)   /*向顺序表中插入一个元素  L:顺序表的头指针; i要插入的元素的位置(这里使用的是数组习惯的索引方式); m:要插入的数据的内容 */

{

       float *base,*insertPtr,*p;    //base:追加内存空间后顺序表的基地址;insertPtr:插入元素的位置的指针; 

 

  if(i<0||i>L->length)  exit(0);//插入越界,非法 有效范围是从0开始到元素个数减1

 

       /*如果顺序表的元素个数超过了顺序表的最大长度,追加内存空间*/ 

  if(L->length>=L->listsize)

{ 

  base=(float *)realloc(L->elem,(L->listsize+100)*sizeof(float));    //realloc函数用于在已分配内存基础上追加内存空间,所追加的空间是连续的

  L->elem=base;  //更新内存基地址

  L->listsize+=10;     //存储空间增大10单元

}

 

         insertPtr=&(L->elem[i]);   //给插入元素的位置的指针赋值;

 

        /*将i-1后的元素顺序后移一个元素的位置*/

for(p=&(L->elem[L->length-1]);p>=insertPtr;p--)    //从后往前遍历,初始位置是顺序表的最后一个元素

{

*(p+1)=*p;   //前一个元素放到后一个的位置,实现顺序后移

            }

 *insertPtr=m;  //在第i个位置插入要插入的元素

L->length++;//表长递增1;

 

}

 

 

 

 

/*删除顺序表中的指定元素*/

void del(Sqlist *L,int i)   /*L:顺序表的头指针; i要删除的元素的位置(这里使用的是数组习惯的索引方式)*/

{

       float *delptr,*p;    //delptr:要删除的元素的指针,p:索引指针

 

  if(i<0||i>L->length)  exit(0);//删除越界,非法 有效范围是从0开始到元素个数减1

 

       /*删除不需要追加内存空间*/ 

 

         delptr=&(L->elem[i]);   //给删除元素的位置的指针赋值;

 

        /*将i后的元素顺序前移一个元素的位置*/

for(p=delptr;p<&(L->elem[L->length-1]);p++)    //从前往后遍历,初始位置是顺序表要删除的位置

{

*p=*(p+1);   //后一个元素放到前一个的位置,实现顺序前移

            }

L->length--;

//顺序前移的过程中顺便就把目标元素删除了

 

}

Python3实现基于ARIMA模型来预测茅台股票价格趋势 ARIMA(Autoregressive Integrated Moving Average)模型是一种广泛使用的时间序列分析方法,它可以用于对未来的数据进行预测。ARIMA模型由自回归模型(AR模型)、差分整合模型(I模型)和移动平均模型(MA模型)组成,因此也被称为ARIMA(p,d,q)模型。其中,p表示自回归阶数,d表示差分阶数,q表示移动平均阶数。具体来说,ARIMA模型可以通过以下步骤进行建模:数据预处理:对时间序列进行平稳性检验,如果不满足平稳性,则进行差分操作。 阅读详情

相关推荐

昆仑通态屏幕制作(连载1)---接触篇

写在开始 背景:最近出了做QT、LORA和4G,还做了一个屏幕。以前做了一个迪文的串口屏幕,发现网上的教程很多,所以连载就不更新了,并且迪文屏幕的设置什么的比较简单,应该从网上都能找到对应的教程。而现在用的昆仑通态的屏幕属于嵌入式屏幕,至于为啥叫嵌入式,也不是很明白,反正就是需要用这个屏幕,嵌入式不嵌入式不重要了。重要的是能用,并且能实现串口屏幕不能实现的功能。所以选定昆仑通态的一款屏幕。 文章语言:我比较习惯用比较糙的语言介绍做的东西,有时候不太准备,但是为了方便理解,还请大家谅解。用...

weixin_45426095的博客 6739

顺序表(顺序存储结构)

顺序存储结构会申请一段连续的内存空间来存储数据,下面详解一下顺序表的各大使用 在此之前必须要了解一个知识点:当传参的时候,如果你需要改变这个参数的数值,则需要传递这个参数变量的地址,当你不需要改变它的数值的时候,只需要传递该参数就行,这个对于非常学习数据结构十分重要。 相关的头文件定义: #include "stdio.h" #include "stdlib.h" #include "math.h" #include "time.h" #define OK 1 #define E

weixin_63032791的博客 2185

基于OFDM的实时图像传输系统MATLAB仿真:MPSK与MQAM调制性能对比与误码率分析

本文详细介绍了基于OFDM的实时图像传输系统在MATLAB中的仿真实现,重点对比了MPSK与MQAM调制方式的性能差异与误码率分析。通过搭建OFDM系统模型,探讨了QPSK和16QAM在不同信道条件下的表现,包括频谱效率、抗噪能力和误码率等关键指标。文章还提供了MATLAB代码示例和实用技巧,帮助读者快速掌握OFDM图像传输系统的核心算法与优化方法。

weixin_29064009的博客 355

数据结构 线性表的顺序存储和链式存储,以及基本操作、单链表例题

线性表

qq_53334934的博客 1134

支持找回微信删除好友!一款人人可用的全能微信数据分析工具

找回删除好友、查看删除记录、恢复聊天信息....

1730

西门子1500T系列凸轮同步(CAMIN指令用法)

添加凸轮工艺对象(TO_CAM),也就是凸轮表。开始编程,先写2个轴的使能、回原点与主轴的定位。监控主轴与从轴的位置、速度关系是否满足实验要求。1.添加工艺对象(1个定位轴,1个同步轴)调用CAMIN指令 ,凸轮耦合。主轴为旋转轴且为模数轴。3.调用插补凸轮盘指令。4.仿真、监控、调试。

gyxgyx789的博客 1万+

数据结构-(顺序表篇)

数据结构-顺序表篇

B_Small_panda的博客 1227

几种负载均衡策略(DNS、NAT、重定向、反向代理)

摘要:本文对比了四种负载均衡技术:DNS负载均衡通过域名解析分发IP,用户直连服务器;NAT负载均衡通过VIP转发流量,所有流量经过负载均衡器;HTTP重定向通过302跳转实现分流;反向代理则隐藏后端服务器,统一转发请求。DNS简单但调度不精准,NAT精准但有带宽瓶颈,HTTP重定向延迟高,反向代理性能好但需专用设备。适用场景各异,DNS适合异地分流,NAT适合内网集群,HTTP重定向适合简单分流,反向代理适合高并发场景。核心区别在于层级(3层/7层)和流量走向(直连/中转)。

echo的博客 74

【学习数据结构】线性表——1、顺序表,含C语言实现

前言 第一次写个人博客,这一切还要从一只蝙蝠说起… 在家闲着也是无聊,回顾一下上学期刚学完的数据结构,就当做是一个总结和查漏补缺,主要还是写给自己看,不过我把完整的头文件代码贴在最后,如果大家有需要可以直接使用。 1、什么是线性表? 线性表是n个数据元素(结点)a1, a2, …an组成的有序序列。其中数据元素的个数n定义为表的长度,当n=0时成为空表,非空的线性表(n>0)记作: (a1,...

weixin_44151650的博客 738

[密码学实战]商密TLCP协议抓包解析与深度分析(二十九)

[密码学实战]商密TLCP协议抓包解析与深度分析(二十九)

曼岛_的博客 633

Calibre LVS 问题解析

LVS常见问题与解决办法

m0_61544122的博客 2万+

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

2.define是宏定义,程序在预处理阶段将用define定义的内容进行了替换,只是进行了替换,在编译时不能进行数据类型检验 ,例如定义了 List_Init_Size 为 100,ListIncrement 为 10 只要出现 List_Init_Size,系统会默认将其用100替换掉。4.struct 结构体 通俗的讲就是打包封装一些有共同特征的不同数据的变量封装在内部,通过一定的方法访问修改内部变量,可以说结构体让一些很散的数据变得很整(井然有序)2.顺序表插入第i个元素。6.返回顺序表的长度。

m0_61741424的博客 858

Android 系统低内存lowmemorykiller关于阈值修改 minfreeAbsKbytes优化

在系统rom定制化开发中,在对于运行内存ram 1G和2G的设备中,对于内存使用高峰期时,minfreeAbsKbytes优化很关键 调整合理的minfree,让内存合理的使用很关键,接下来分析相关功能的实现

安卓兼职framework和app工程师的博客 524

数据结构【顺序表】

我们需要创建一个seqlist.h头文件,seqlist.c文件存放函数,还有一个.c的测试文件。

qq_67578580的博客 2514

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

数据结构--顺序表

顺序表是数据结构中线性表的一种存储结构。它按逻辑顺序依次存储数据元素,在内存中占据连续空间。从概念分类上,可分为静态顺序表和动态顺序表。前者大小固定,后者能按需调整容量,它们都具有随机访问特性,利于高效查找元素。

2402_88461821的博客 1614

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

数据结构之顺序表

前面我们已经说过了这个顺序表,是一个结构体,这个结构体包含了动态开辟的数组,有效数据的个数,已经总空间的大小,而动态开辟的数组只需要我们用指针来存储即可。int* arr;//底层是动态数组,用指针变量记录地址int size;//记录数组有效数据的个数//记录数组空间的格子数我们一般都会重定义一下,将struct seqlist 给缩短成SL,方便后续使用。因为顺序表操作的不只是整形数组,还有可能操作字符数组或者其他类型的数组,所以我们一般都会把数组的类型重定义,

2301_79973359的博客 1157

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【数据结构】顺序表

顺序表带你走进数据结构世界🎈

East-sunrise的博客 4719

数据结构顺序表

/类型重命名,为了方便后续替换类型//定长数组int size;//顺序表当前有效的数据个数}sl;这里,我们使用了定长数组,那么它就存在一个缺陷,就是这个数组给大了,浪费空间,给小了,空间不够。//类型重命名,为了方便后续替换类型//指向动态开辟的数组int size;//顺序表当前有效的数据个数//顺序表空间可存储数据个数}sl;这里,我们使用指针类型,方便我们后续使用动态内存开辟函数来调整空间的大小。size:表示了顺序表里面存储了多少个有效数据。

2301_81291674的博客 1166

【数据结构初阶】顺序表专题

动态顺序表的实现 增删查改

凤年徐的博客 2851

数据结构——顺序表专题

什么是数据结构呢?· 数据结构是由“数据”和“结构”两词组合⽽来。· 概念:数据结构是计算机存储、组织数据的⽅式。· 数据结构是指相互之间存在⼀种或多种特定关系的数据元素的集合。数据结构反映数据的内部构成,即数据由那部分构成,以什么⽅式构成,以及数据元素之间呈现的结构。总结:1)能够存储数据(如顺序表、链表等结构)2)存储的数据能够⽅便查找。

optimistic_chen的博客 1543

数据结构初阶之顺序表

数据结构初阶之顺序表,很简单明了的解释和实现,相信大家看完之后一定会有所收获,刚入门的小伙伴们可不要错过哦!

2302_80214413的博客 1826

【数据结构】—— 顺序表

顺序表(Sequential List)是一种基本的数据结构,它通过一组连续的存储单元来存储具有相同类型的数据元素。

ElvInR的博客 1765
上一篇: 数据结构——顺序表
下一篇: 数据结构——链表
peterlinux
博客等级 码龄17年 1粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值