数据结构——顺序表

数据结构之顺序表:顺序表的结构及基本操作 目录一、数据结构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--;

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

 

}

MAX96712在车载摄像头系统中的带宽分配与传输能力计算解析 在计算摄像头带宽与传输接口的关系时,需要考虑视频流的像素分辨率、帧率、颜色深度等因素。以 MAX96712 这种 GMSL2 产品为例,它支持每个链路在正向方向以 3Gbps 或 6Gbps 的固定速率工作。 阅读详情

相关推荐

玩转ubuntu18 --机器视觉方面(yolo算法识别及摄像头和cmake问题解决)

玩转ubuntu18 --机器视觉方面(yolo v3算法识别) 1.YOLO的简介 工作原理 先前的检测系统重新调整分类器或本地化器以执行检测。他们将模型应用于多个位置和比例尺的图像。图像的高分区域被视为检测。 我们使用完全不同的方法。我们将单个神经网络应用于整个图像。该网络将图像划分为区域,并预测每个区域的边界框和概率。这些边界框按预测概率加权。 我们的模型比基于分类器的系统具有几个优势。它在测试时间查看整个图像,因此其预测由图像中的全球上下文提供信息。它还通过单一网络评估进行预测,这与R-CNN等系统

qq_53951823的博客 1556

数据结构——顺序表详解

定义顺序表是一种线性表的存储结构,它用一组地址连续的存储单位依次存储线性表中的数据元素。从而使得逻辑上相邻的两个元素在物理位置上也相邻。顺序表具有动态分配空间、支持随机访问和顺序访问,逻辑顺序与物理顺序一致。每个元素可以都有唯一的位置,可以通过索引直接访问元素。元素可以是任意类型,包括基本数据类型、结构体等。

weixin_51785373的博客 8841

在 Windows 上安装 OpenCV – C++ / Python

而且,安装并不是一件容易的事。这些安装程序仅适用于安装 OpenCV for C++。如果您想安装适用于 Python 的 OpenCV,您将在博客后面找到相关信息。在这篇博文中,我们将在 Windows 上安装适用于 C++ 和 Python 的 OpenCV。C++ 安装是在自定义安装 exe 文件的帮助下完成的。而Python的安装是通过Anaconda完成的。从源代码安装 OpenCV 需要花费大量时间。根据您的硬件和安装配置,该过程可能需要 5 分钟到 2 小时不等。

Demondai999的博客 2092

顺序表(数据结构)

顺序表详解

outdated_socks的博客 6343

基于python的超市历年数据可视化分析

包含:Order_Date Sales Quantity Profit year month。所有这些物品都在美国4个地区的49个州销售,来着793位客户的5009个订单。9994行,21列数据。

m0_74872863的博客 540

KUKA机器人 - 从开机到自动运行

注1:本文仅代表本人对机器人使用的一些建议,在使用机器人前,还请详细阅读库卡机器人官方资料,道路千万条,安全第一条!!! 注2:技术有限,欢迎各位大大在阅读过程中发现各类问题,并且批评指正!!! 目录 一、准备工作 1. 机器人上电完成 2. 电脑安装Workvisual 二、学习手动移动机器人 三、项目配置 1. 设置机器人IP地址 2.电脑和机器人通过网线连接 3.查找并打开项目 4. 通讯配置 5. 项目上传 6. 检验IO配置 四、编程 1.新建程序 2. 程序...

yilunyao的博客 1万+

【数据结构】顺序表

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

East-sunrise的博客 4719

python全栈入门到实战【基础篇 02】环境搭建:Python解释器与PyCharm、VSCode编辑器安装配置详解

本文详解Python环境搭建步骤。首先安装解释器(运行代码核心),需从官网下载,选3.8及以上版本(勿选2.x)。Windows安装必勾“Add Python.exe to PATH”,验证用`python --version`;Mac选universal2安装包,验证用`python3 --version`。 编辑器二选一:PyCharm社区版(免费,新手推荐),安装后需配置解释器路径;VSCode轻量,需装Python插件并选择解释器。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 5万+

数据结构初阶——顺序表

博客写到这里,关于C语言的相关内容就告一段落了,从这篇开始,跟我一起进入一个全新的领域吧。把顺序表的代码放到了结尾。击鼓进军数据结构!!!

m0_64607843的博客 1万+

【SpringBoot 4.x 第2节】夯爆了,学习 Spring Boot 4.x 前,需要具备哪些 Java 基础?

🏆 本文收录于 《滚雪球学 Spring Boot 4.x》 专栏。 本专栏面向 有一点 Java 基础,但没有系统学过 Spring Boot 的读者,采用“滚雪球式学习法”:先跑通、再理解、再重构、再上线,最终带你从第一个 Hello API 一路完成一个可部署、可监控、可扩展的后端项目。

**My Coding Family** 4572

从零开始学 PyTorch 7天路线图(完整可运行代码版)

本文提供了5天PyTorch入门教程的完整代码,涵盖从基础到实战的核心内容。Day1测试环境并介绍张量基础;Day2讲解常用张量操作;Day3演示自动求导机制;Day4实现完整线性回归模型;Day5构建MNIST手写数字识别全连接网络。所有代码可直接运行,包含GPU检测、梯度计算、模型训练和可视化等关键环节,帮助新手快速掌握PyTorch核心概念和典型应用场景。

IT老农民的博客 315

数据结构之顺序表

数据结构顺序表之增删查改的最全攻略

qq_53822523的博客 3022

QT如何使用CTK插件搭建应用程序框架?

CTK框架,QT框架,插件系统

cs821984831的博客 736

数据结构【顺序表】

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

qq_67578580的博客 2514

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

IMSL CNL 7.0.0 (x86-64)Crack

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

数据结构--顺序表

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

2402_88461821的博客 1614

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

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

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

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

凤年徐的博客 2851

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

数据结构顺序表

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

2301_81291674的博客 1166

【数据结构】—— 顺序表

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

ElvInR的博客 1765

数据结构——顺序表专题

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

optimistic_chen的博客 1543

数据结构初阶之顺序表

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

2302_80214413的博客 1826
上一篇: 我和几个同学编的聊天工具界面(linux下用GTK编的,有几个bug,不能通信)
下一篇: 数据结构——顺序表
peterlinux
博客等级 码龄17年 1粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值