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

河源网站优化/品牌广告视频

河源网站优化,品牌广告视频,网站3级营销是怎么做的,asp网站开发教程百度云超详细讲解线性表和顺序表!!线性表顺序表顺序表的概念及结构静态顺序表动态顺序表顺序表接口实现1、创建2、初始化3、扩容4、尾插5、打印6、销毁7、尾删8、头插9、头删10、插入任意位置11、删除任意位置12、查找13、修改线性表 线性表(linea…

超详细讲解线性表和顺序表!!

  • 线性表
  • 顺序表
    • 顺序表的概念及结构
      • 静态顺序表
      • 动态顺序表
    • 顺序表接口实现
      • 1、创建
      • 2、初始化
      • 3、扩容
      • 4、尾插
      • 5、打印
      • 6、销毁
      • 7、尾删
      • 8、头插
      • 9、头删
      • 10、插入任意位置
      • 11、删除任意位置
      • 12、查找
      • 13、修改

线性表

线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…
线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储
地址的计算:
线性表中第一个元素的存储地址(基地址)和表中每个元素所占存储单元的多少,就可以计算出线性表中任意一个数据元素的存储地址,从而实现对顺序表中数据元素的随机存取。
设线性表中有n个元素,每个元素占k个单元,第一个元素的地址为Loc(a_1),则第i个元素的地址Loc(a_i):Loc(a_i)=Loc(a_1)+(i-1)*k

顺序表

顺序表的概念及结构

顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。
顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。
在这里插入图片描述
顺序表一般可以分为:静态顺序表与动态顺序表。

静态顺序表

静态顺序表:使用定长数组存储元素。
在这里插入图片描述
静态顺序表从某种意义上来说就是数组

如果数组空间满了就无法继续插入。
无法很好地确定要给定的内存空间,大了浪费空间,小了空间不足。

静态顺序表的大小在编译时确定,对静态顺序表的删除和插入是对其元素进行,而不是其存储空间的删除和插入,因此静态顺序表的大小在进行删除和插入操作后不会改变。
对于静态顺序表的查找,若按序号查找,则时间复杂度为O(1)。若按值查找,则需要将待查元素与表中每一个元素进行比较,直到找到或者遍历整个数组却找不到元素,此操作的时间复杂度为O(N)。

动态顺序表

在这里插入图片描述

顺序表接口实现

静态顺序表只适用于确定知道需要存多少数据的场景。静态顺序表的定长数组导致N定大了,空间开多了浪费,开少了不够用。所以现实中基本都是使用动态顺序表,根据需要动态的分配空间大小,所以下面我们实现动态顺序表。

void SLInit(SL* ps);//名字简写           初始化
void SLPushBack(SL* ps, SLDatatype x);  //尾插
void SLPopBack(SL* ps);                 //尾删
void SLPushFront(SL* ps, SLDatatype x); //头插
void SLPopFront(SL* ps);                //头删
void SLPrit(SL* ps);                    //打印
void SLDestory(SL* ps);                 //释放
void SLCheckCapacity(SL* ps);           //检查容量-扩容
void SLInsert(SL* ps, int pos, SLDatatype x);//任意位置插入
void SLErase(SL* ps, int pos);          //任意位置删除
int SLFind(SL* ps, SLDatatype x);      //查找
void SLModify(SL* ps,int pos, SLDatatype x);    //修改

在此之前,明白何为接口函数:
接口函数就是某个模块写了(主要)给其它模块用的函数,可以实现隐藏信息,封装等,数据进行操作时进行调用的函数,通过调用数据结构的接口帮助你完成一系列操作

1、创建

因为是一个比较大的板块,在一开始创建时尽量分开不同板块编写。
在这里插入图片描述

#pragma once
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>//#define N 200
typedef int SLDatatype;
typedef struct SeqList
{SLDatatype* a;//指向动态数组指针int size;       //数据个数int capacity;  //容量-空间大小
}SL;

使用 typedef 定义一个新的数据类型,这里我们把它取名为 SLDataType(顺序表数据类型)。

2、初始化

#include "SeqList.h"//初始化函数
void SLInit(SL* ps)
{ps->a= NULL;ps->size = ps->capacity= 0;
}

3、扩容

插入元素的时候理所应当需要考虑插入元素时空间是否足够,如果空间不够,则使用realloc函数扩容。(realloc函数在一开始没空间申请空间时等作用于malloc函数的作用)

//检查容量-扩容
void SLCheckCapacity(SL* ps)
{if (ps->size == ps->capacity){int newcapacitv = ps->capacity == 0 ? 4 : ps->capacity * 2;SLDatatype* tmp = (SLDatatype*)realloc(ps->a, newcapacitv * sizeof(SLDatatype));if (tmp == NULL){perror("relloc:");exit(-1);//结束程序}ps->a = tmp;ps->capacity = newcapacitv;}
}

4、尾插

void SLPushBack(SL* ps, SLDatatype x)
{SLCheckCapacity(ps);//检查容量空间ps -> a[ps->size] = x;ps->size++;
}

尾插有三种情况:
① 第一种情况是顺序表压根就没有空间。
② 第二种情况就是我们创建的 capacity 空间满了。
③ 第三种情况是空间足够,直接插入数据即可。

5、打印

打印我们表中所存放的函数。

//打印函数
void SLPrit(SL* ps)
{for (int i = 0; i < ps->size; i++){printf("%d ", ps->a[i]);}printf("\n");
}

6、销毁

不销毁会存在内存泄漏的风险。

void SLDestory(SL* ps)//动态开辟的内存越界使用有时
{                     //有时要在free的时候才能检查出来。if (ps->a){free(ps->a);ps->a = NULL;ps->size = ps->capacity = 0;}
}

7、尾删

删除最后一个元素。只需要元素数量–就好,无法访问最后一个元素那么它便是无效的数据。

void SLPopBack(SL* ps)
{assert(ps->size);ps->size--;
}

当然,包括尾删以及其他步骤,我们都必须要注意越界访问的问题。比如尾删步骤中,如果内存中一个元素都没有了,size有可能减到-1的位置上而出现错误,需要断言一下。
当然,温柔的检查以及暴力的检查读者们喜欢哪个就全取决于自己了。

// 温柔的检查if (ps->size == 0){return;}// 暴力的检查assert(ps->size > 0);//ps->a[ps->size - 1] = 0;ps->size--;
}

8、头插

将数组内容整体后移,就可以在最前面出现一个空的位置。
首先创建一个 end 变量用来指向要移动的数据,因为指向的是数据的下标,所以是 size 要减 1 。随后进入 while 循环,如果 end >= 0 说明还没有移动完,就会进入循环。循环体内利用下标,进行向后移动操作,移动结束后再 end-- ,进行下一个数据的向后移动。挪动数据成功后,就可以插入了。此时顺序表第一个位置就被腾出来了,就可以在下标0位置插入欲插入的数据 x 了。最后size++ 。

void SLPushFront(SL* ps, SLDatatype x)
{SLCheckCapacity(ps);//从后向前挪动数据int end = ps->size - 1;while (end >= 0){ps->a[end + 1] = ps->a[end];end--;}ps->a[0] = x;ps ->size++;
}

9、头删

思路和头插类似。

//头删
void SLPopFront(SL* ps)
{assert(ps->size);int begin = 1;while (begin < ps->size){ps->a[begin-1] = ps->a[begin];begin++;}ps->size--;
}

10、插入任意位置

 
//任意插入
void SLInsert(SL* ps, int pos, SLDatatype x)
{assert(ps);//检查我们要插入的位置assert(pos >= 0 && pos <=ps->size);SLCheckCapacity(ps);int end = ps->size - 1;while (end >= pos){ps->a[end + 1] = ps->a[end];end--;}ps->a[pos] = x;ps->size++;
}

11、删除任意位置

删除指定位置的数据,我们仍然要限制 pos 的位置。限制条件部分和 SeqListInsert 不同的是,因为 psl->size 这个位置没有效数据,所以删除的位置不能是 psl->size!
任意位置删除的函数可以替代头删和尾删。

//任意删除
void SLErase(SL* ps, int pos)
{assert(ps);assert(pos >= 0 && pos < ps->size);//注意边界的处理/*int begin = pos;while (begin < ps->size - 1){ps->a[begin] = ps->a[begin + 1];begin++;}*/int begin = pos + 1;while (begin < ps->size){ps->a[begin - 1] = ps->a[begin];begin++;}ps->size--;
}

12、查找

//查找
int SLFind(SL* ps, SLDatatype x)
{assert(ps);for (int i = 0; i <= ps->size; i++){if (ps->a[i] == x)return i;}return -1;}

13、修改

//修改
void SLModify(SL* ps, int pos, SLDatatype x)  
{assert(ps);assert(pos >= 0 && pos < ps->size);ps->a[pos] = x;}

相关文章:

超详细讲解线性表和顺序表!!

超详细讲解线性表和顺序表&#xff01;&#xff01;线性表顺序表顺序表的概念及结构静态顺序表动态顺序表顺序表接口实现1、创建2、初始化3、扩容4、尾插5、打印6、销毁7、尾删8、头插9、头删10、插入任意位置11、删除任意位置12、查找13、修改线性表 线性表&#xff08;linea…...

大数据之-Nifi-Nifi的安装_启动_认识Nifi的操作台---大数据之Nifi工作笔记0002

然后我们看一下如何安装nifi 这个上一节已经说了 然后看一下环境准备,这个自己去安装就可以了,需要jdk,1.8就可以了,然后 maven安装上就可以了 然后去下载,这里下载Linux版本的 1.9.2的版本比较稳定 下载以后,避免端口冲突要修改端口默认是8080,修改为58080 然后启动很简单,看…...

【大数据clickhouse】clickhouse 常用查询优化策略详解

一、前言 在上一篇我们分享了clickhouse的常用的语法规则优化策略&#xff0c;这些优化规则更多属于引擎自带的优化策略&#xff0c;开发过程中只需尽量遵守即可&#xff0c;然而&#xff0c;在开发过程中&#xff0c;使用clickhouse更多将面临各种查询sql的编写甚至复杂sql的…...

【Java项目】基于Java+MySQL+Tomcat+maven+Servlet的个人博客系统的完整分析

✨哈喽&#xff0c;进来的小伙伴们&#xff0c;你们好耶&#xff01;✨ &#x1f6f0;️&#x1f6f0;️系列专栏:【Java项目】 ✈️✈️本篇内容:个人博客系统前后端分离实现&#xff01; &#x1f680;&#x1f680;个人代码托管github&#xff1a;博客系统源码地址&#xff…...

java 程序员怎么做找工作

java 程序员怎么做找工作 在网络招聘网站上搜索职位。在中国&#xff0c;像智联招聘、前程无忧、猎聘网等招聘网站上&#xff0c;有许多公司在招聘JAVA程序员。通过这些网站可以快速找到自己合适的工作。 关注社交媒体和专业网站。 加入一些面向JAVA程序员的社交媒体和专业网…...

S7-1200对于不同项目下的PLC之间进行开放式以太网通信的具体方法示例

S7-1200对于不同项目下的PLC之间进行开放式以太网通信的具体方法示例 如下图所示,打开TIA博途创建一个新项目,并通过“添加新设备”组态 S7-1200 客户端 ,选择 CPU1214C DC/DC/DC (client IP:192.168.0.102),建立新子网; 首先编写客户端程序:打开OB1编程界面,选择指令…...

操作系统(四):磁盘调度算法,先来先服务,最短寻道时间优先,电梯算法

文章目录一、磁盘结构二、先来先服务三、最短寻道时间优先四、电梯算法 SCAN一、磁盘结构 盘面&#xff08;Platter&#xff09;&#xff1a;一个磁盘有多个盘面&#xff1b; 磁道&#xff08;Track&#xff09;&#xff1a;盘面上的圆形带状区域&#xff0c;一个盘面可以有多…...

maven解决包冲突简单方式(插件maven helper | maven指令)

文章目录使用idea插件maven helper使用maven指令在Java开发中&#xff0c;常常会遇到不同jar包之间存在冲突的情况&#xff0c;这可能会导致编译错误、运行时异常等问题。 使用idea插件maven helper 在idea安装插件maven helper 安装重启完之后点击pom文件&#xff0c;有一个De…...

100行Pytorch代码实现三维重建技术神经辐射场 (NeRF)

提起三维重建技术&#xff0c;NeRF是一个绝对绕不过去的名字。这项逆天的技术&#xff0c;一经提出就被众多研究者所重视&#xff0c;对该技术进行深入研究并提出改进已经成为一个热点。不到两年的时间&#xff0c;NeRF及其变种已经成为重建领域的主流。本文通过100行的Pytorch…...

linux操作系统篇

目录 操作系统概述基本特征并发共享虚拟异步进程管理内存管理文件管理设备管理宏内核和微内核宏内核微内核中断分类外中断异常陷入(系统调用)进程管理进程与线程的区别进程状态切换进程调度算法**批处理系统****交互式系统**进程同步临界...

redis+token实现登录校验,前后端分离,及解跨域问题的4种方法

目录 一、使用自定义filter实现跨域 1、客户端向服务端发送请求 2、服务端做登录验证了&#xff0c;并生成登路用户对应的token&#xff0c;保存到redis 3、响应&#xff08;报错&#xff09;-----跨域问题 4、解决跨域问题--------服务器端添加过滤器&#xff0c;设置请求…...

怎么解密MD5,常见的MD5解密方法,一看就会

MD5是一种被广泛使用的密码散列函数&#xff0c;曾在计算机安全领域使用很广泛&#xff0c;但是也因为它容易发生碰撞&#xff0c;而被人们认为不安全。那么&#xff0c;MD5应用场景有哪些&#xff0c;我们怎么解密MD5&#xff0c;本文将带大家了解MD5的相关知识&#xff0c;以…...

Vue3 目录结构

Vue3 目录结构 架构搭建 请确保你的电脑上成功安装 Node.js&#xff0c;本项目使用 Vite 构建工具&#xff0c;需要 Node.js 版本 > 12.0.0。 查看 Node.js 版本&#xff1a; node -v建议将 Node.js 升级到最新的稳定版本&#xff1a; 使用 nvm 安装最新稳定版 Node.js…...

Tsp_nurrec表空间满处理记录20230215

Tsp_nurrec表空间满处理记录20230215 一、问题: 问题:护理病历表空间不足。 二、解决过程:1.查询表空间使用效率 SELECT UPPER(F.TABLESPACE_NAME) “表空间名”, D.TOT_GROOTTE_MB "表空间大小(M)",D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)"…...

影像测量设备都有什么?有哪些影像仪器?

影像测量仪器是广泛应用于机械、电子、仪表的仪器。主要由机械主体、标尺系统、影像探测系统、驱动控制系统和测量软件等与高精密工作台结构组成的光电测量仪器。一般分为三大类&#xff1a;手动影像仪、自动影像仪和闪测影像仪。测量元素主要有&#xff1a;长度、宽度、高度、…...

Transformer:开启CV研究新时代

来源&#xff1a;投稿 作者&#xff1a;魔峥 编辑&#xff1a;学姐 起源回顾 有关Attention的论文早在上世纪九十年代就提出了。 在2012年后的深度学习时代&#xff0c;Attention再次被翻了出来&#xff0c;被用在自然语言处理任务&#xff0c;提高RNN模型的训练速度。但是由…...

Flink X Hologres构建企业级Streaming Warehouse

摘要&#xff1a;本文整理自阿里云资深技术专家&#xff0c;阿里云Hologres负责人姜伟华&#xff0c;在FFA实时湖仓专场的分享。点击查看>>本篇内容主要分为四个部分&#xff1a; 一、实时数仓分层的技术需求 二、阿里云一站式实时数仓Hologres介绍 三、Flink x Hologres…...

关于 mysql数据库插入中文变空白 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/129048030 红胖子网络科技的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…...

不可错过的SQL优化干货分享-sql优化、索引使用

本文是向大家介绍在sql调优的几个操作步骤&#xff0c;它能够在日常遇到慢sql时有分析优化思路&#xff0c;能够让开发者更好的了解sql执行的顺序和原理。一、前言在日常开发中&#xff0c;我们经常遇到一些数据库相关的问题&#xff0c;比方说&#xff1a;SQL已经走了索引了&a…...

vue3:直接修改reative的值,页面却不响应,这是什么情况?

目录 前言 错误示范&#xff1a; 解决办法&#xff1a; 1.使用ref 2.reative多套一层 3.使用Object.assign 前言&#xff1a; 今天看到有人在提问&#xff0c;问题是这样的&#xff0c;我修改了reative的值&#xff0c;数据居然失去了响应性&#xff0c;页面毫无变化&…...

从Vue2 到 Vue3,这些路由差异你需要掌握!

✨ 个人主页&#xff1a;山山而川~xyj ⚶ 作者简介&#xff1a;前端领域新星创作者&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步&#xff0c;一起加油&#xff01; &#x1f386; 系列专栏&#xff1a; vue系列 &#x1f680; 学习格言&#xff1a;与其临渊羡…...

Maxwell简介、部署、原理和使用介绍

Maxwell简介、部署、原理和使用介绍 1.Maxwell概述简介 1-1.Maxwell简介 ​ Maxwell是由美国Zendesk公司开源&#xff0c;使用Java编写的MySQL变更数据抓取软件。他会实时监控Mysql数据库的数据变更操作&#xff08;包括insert、update、delete&#xff09;&#xff0c;并将变…...

20230215_数据库过程_渠道业务清算过程

----2023-0131-清算过程 zhyw.shc_drop_retable(upper(‘xc_qdcn_pgtx_qsqdtype_sja’),‘SHZC’); SQL_STRING:‘create table shzc.xc_qdcn_pgtx_qsqdtype_sja as select * from shzc.xc_qdcn_pgtx_qdtype a where a.in_time ( select max(a.in_time) from shzc.xc_qdcn_pg…...

webpack(高级)--性能优化-代码分离

webpack webpack性能优化 优化一&#xff1a;打包后的结果 上线时的性能优化 &#xff08;比如分包处理 减少包体积 CDN服务器&#xff09; 优化二&#xff1a;优化打包速度 开发或者构建优化打包速度 &#xff08;比如exclude cache-loader等&#xff09; 大多数情况下我们侧…...

借助docker, 使用verdaccio搭建npm私服

为何要搭建npm私服 搭建npm私服好处多多&#xff0c;网上随便一篇教程搜出来都罗列了诸多好处&#xff0c;譬如: 公司内部开发环境与外网隔离&#xff0c;内部开发的一些库高度隐私不便外传&#xff0c;内网搭建npm服务保证私密性同属内网&#xff0c;可以确保使用npm下载依赖…...

c/c++开发,无可避免的模板编程实践(篇二)

一、开发者需要对模板参数负责 1.1 为您模板参数提供匹配的操作 在进行模板设计时&#xff0c;函数模板或类模板一般只做模板参数&#xff08;typename T&#xff09;无关的操作为主&#xff0c;但是也不见得就不会关联模板参数自身的操作&#xff0c;尤其是在一些自定义的数据…...

【2023】【standard-products项目】中查找的问题与解决方案 (未完待续)

10、el-table 判断是多选操作还是单选操作 9、判断数组对象中是否包含某个指定值 需求&#xff1a;修改时数据回填el-select下拉数据&#xff0c;发现当前id在原数组里没有找到&#xff0c;就显示了id值&#xff0c;应该显示name名&#xff0c; 处理&#xff1a;当查找到id…...

力扣sql简单篇练习(十六)

力扣sql简单篇练习(十六) 1 产品销售分析|| 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 SELECT p.product_id,sum(s.quantity) total_quantity FROM Product p INNER JOIN Sales s ON p.product_ids.product_id GROUP BY p.product_id1.3 运行截…...

青少年蓝桥杯python组(STEMA中级组)

第一套编程题第一题【编程实现】输入一个字符串&#xff08;N&#xff09;&#xff0c;输出该字符串的长度。输入描述&#xff1a;输入一个字符串 N输出描述&#xff1a;输出该字符串的长度【样例输入】abcd【样例输出】4N input() print(len(N))第二题【提示信息】小蓝家的灯…...

JVM内存结构,Java内存模型,Java对象模型

一.整体方向JVM内存结构是和java虚拟机的运行时区域有关。Java内存模型和java并发编程有关。java对象模型和java对象在虚拟机中的表现形式有关。1.JVM内存结构堆&#xff1a;通过new或者其他指令创建的实例对象&#xff0c;会被垃圾回收。动态分配。虚拟机栈&#xff1a;基本数…...