#数据结构 线性表的顺序存储
目录
每日文案
一、线性表的定义
二、线性表的操作
顺序表的存储结构
顺序表的初始化操作
判断顺序表是否为空表
将顺序表置为空表
计算顺序表中的元素个数
取出顺序表中的对应位置元素
取出对应数值的位序
在对应位置插入元素
将对应位置的元素删除
将顺序表中的数据打印出来
将顺序表A和B进行合并
总结
每日文案
失去的东西,其实从来未曾真正属于的属于你,也不必惋惜
一、线性表的定义
线性表是:零个或者多个数据元素的有限序列
这里我强调几个地方,首先是序列,那么就是有序的,如果说有多个元素,那么第一个元素就没有前驱的,最后一个元素是没有后继的,其他的元素有且仅有一个前驱和后继。就像是幼儿园开小火车,如果一个小朋友去拉后面两个小朋友的衣服那么就不可以排成一队了,如果多个小朋友拉扯那就是在打架了.
然后线性表强调的是有限性,线性元素的个数n定义为线性表的长度,如果n=0那么线性表就是一个空表,并且每个数据元素都有确定的位置,比如说a1是第一个元素,那么他的位序就是1 同理Ai 就是在线性表的位序就是i
这里举个例子,班级同学的花名册,其中包含着同学的学号,姓名,性别等等信息构成一个表这个也是一个线性表,这里需要强调一个概念,在复杂的线性表中,一个数据元素可以由若干个数据项组成,这里我们表格里面的姓名学号这些都是数据项,他们连起来构成了数据元素,最后串起来构成了数据项

二、线性表的操作
#include "stdio.h" #include "stdlib.h"
#include "math.h"
#include "time.h"#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0#define MAXSIZE 20 /* 存储空间初始分配量 */
typedef int ElemType; /* ElemType类型根据实际情况而定,这里假设为int */
typedef struct
{ElemType data[MAXSIZE]; /* 数组,存储数据元素 */int length; /* 线性表当前长度 */
}SqList;typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
-
顺序表的初始化操作
/* 初始化顺序线性表 */
Status InitList(SqList *L)
{ L->length=0;return OK;
}
-
判断顺序表是否为空表
/* 初始条件:顺序线性表L已存在。操作结果:若L为空表,则返回TRUE,否则返回FALSE */
Status ListEmpty(SqList L)
{if (L.length == 0)return TRUE;elsereturn FALSE;
}
-
将顺序表置为空表
/* 初始条件:顺序线性表L已存在。操作结果:若L为空表,则返回TRUE,否则返回FALSE */
Status ListEmpty(SqList L)
{ if(L.length==0)return TRUE;elsereturn FALSE;
}
-
计算顺序表中的元素个数
/* 初始条件:顺序线性表L已存在。操作结果:返回L中数据元素个数 */
int ListLength(SqList L)
{return L.length;
}
-
取出顺序表中的对应位置元素
/* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L) */
/* 操作结果:用e返回L中第i个数据元素的值,注意i是指位置,第1个位置的数组是从0开始 */
Status GetElem(SqList L,int i,ElemType *e)
{if(L.length==0 || i<1 || i>L.length)return ERROR;*e=L.data[i-1];return OK;
}
-
取出对应数值的位序
/* 初始条件:顺序线性表L已存在 */
/* 操作结果:返回L中第1个与e满足关系的数据元素的位序。 */
/* 若这样的数据元素不存在,则返回值为0 */
int LocateElem(SqList L,ElemType e)
{int i;if (L.length==0)return 0;for(i=0;i<L.length;i++){if (L.data[i]==e)break;}if(i>=L.length)return 0;return i+1;
}
-
在对应位置插入元素
第一步先是判断完顺序表的状态是否是满的,插入位置是否合法
第二步判断是否在表尾,在表尾就直接插入,不在表尾需要将原来位置的数据向后移动一位然后再把数据插入
/* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L), */
/* 操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1 */
Status ListInsert(SqList *L,int i,ElemType e)
{ int k;if (L->length==MAXSIZE) /* 顺序线性表已经满 */return ERROR;if (i<1 || i>L->length+1)/* 当i比第一位置小或者比最后一位置后一位置还要大时 */return ERROR;if (i<=L->length) /* 若插入数据位置不在表尾 */{for(k=L->length-1;k>=i-1;k--) /* 将要插入位置之后的数据元素向后移动一位 */L->data[k+1]=L->data[k];}L->data[i-1]=e; /* 将新元素插入 */L->length++;return OK;
}



-
将对应位置的元素删除
第一步也是先判断顺序表状态
第二步把后面的数据往前移动进行数据覆盖,我们不能直接对内存中的数据进行操作,只能将后面的数据进行覆盖
/* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L) */
/* 操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1 */
Status ListDelete(SqList *L,int i,ElemType *e)
{ int k;if (L->length==0) /* 线性表为空 */return ERROR;if (i<1 || i>L->length) /* 删除位置不正确 */return ERROR;*e=L->data[i-1];if (i<L->length) /* 如果删除不是最后位置 */{for(k=i;k<L->length;k++)/* 将删除位置后继元素前移 */L->data[k-1]=L->data[k];}L->length--;return OK;
}


-
将顺序表中的数据打印出来
/* 初始条件:顺序线性表L已存在 */
/* 操作结果:依次对L的每个数据元素输出 */
Status ListTraverse(SqList L)
{int i;for(i=0;i<L.length;i++)visit(L.data[i]);printf("\n");return OK;
}
-
将顺序表A和B进行合并
/*将所有的在线性表Lb中但不在La中的数据元素插入到La中*/
void unionL(SqList *La,SqList Lb)
{int La_len,Lb_len,i;ElemType e; /*声明与La和Lb相同的数据元素e*/La_len=ListLength(*La); /*求线性表的长度 */Lb_len=ListLength(Lb);for (i=1;i<=Lb_len;i++){GetElem(Lb,i,&e); /*取Lb中第i个数据元素赋给e*/if (!LocateElem(*La,e)) /*La中不存在和e相同数据元素*/ListInsert(La,++La_len,e); /*插入*/}
}
总结
本次对数据结构中的顺序表进行讲解,前路还有很远,给我坚持住了
相关文章:
#数据结构 线性表的顺序存储
目录 每日文案 一、线性表的定义 二、线性表的操作 顺序表的存储结构 顺序表的初始化操作 判断顺序表是否为空表 将顺序表置为空表 计算顺序表中的元素个数 取出顺序表中的对应位置元素 取出对应数值的位序 在对应位置插入元素 将对应位置的元素删除 将顺序表中的数据…...
[iOS]高版本MacOS运行低版本Xcode
Xcode 版本支持文档 目的: 在MacOS Sonoma 系统上安装 Xcode14.3.1 第一步 先在Xcode下载一个Xcode14.3.1的压缩包 第二步 本地解压Xcode,将外层目录名变更为Xcode_14.3.1,将文件拷贝到 /Applications目录下。 第三步 变更xcode-sel…...
仿牛客项目Day5:开发登录、退出功能
登录功能 数据库 创建了一个表login_ticket来记录登录凭证,类似于session 核心字段是ticket entity 创建了一个类loginTicket mapper 处理login_ticket的mapper接口层,用来往里面查询数据、增加数据和修改数据 查询数据通过ticket来查 select是通…...
Vue3全家桶 - Vue3 - 【3】模板语法(指令+修饰符 + v-model语法糖)
一、模板语法 主要还是记录一些指令的使用和vue2的区别;vue3指令导航; 1.1 v-text 和 v-html 指令的区别: v-text: 更新元素的文本内容;v-text 通过设置元素的 textContent 属性来工作,因此它将覆盖元素…...
OpenCV开发笔记(七十七):相机标定(二):通过棋盘标定计算相机内参矩阵矫正畸变摄像头图像
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/136616551 各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究 红胖子(红模仿)的博…...
2024蓝桥杯每日一题(时间日期)
一、第一题:日期差值 解题思路:模拟 写一个计算时间的板子两者相减 【Python程序代码】 mon [0,31,28,31,30,31,30,31,31,30,31,30,31] def pd(x):if x%4000 or (x%40 and x%100!0):return Truereturn False def get_day(y,m,d):res 0for i …...
js【详解】事件
给 DOM 节点绑定事件 推荐使用 addEventListener 函数 第一个参数:事件名称第二个参数:事件处理函数(第一个参数为 event)第三个参数: true 采用捕获法来处理事件false 【推荐】采用冒泡法来处理事件 let div1 docu…...
webpack5基础--14_优化css
Css 处理 提取 Css 成单独文件 Css 文件目前被打包到 js 文件中,当 js 文件加载时,会创建一个 style 标签来生成样式 这样对于网站来说,会出现闪屏现象,用户体验不好 我们应该是单独的 Css 文件,通过 link 标签加载…...
Skywalking(9.7.0) 告警配置
图片被吞,来这里看吧:https://juejin.cn/post/7344567669893021736 过年前一天发版,大家高高兴兴准备回家过年去了。这时候老板说了一句,记得带上电脑,关注用户反馈。有紧急问题在高速上都得给我找个服务区改好。 但是…...
删除、创建、验证Kafka安装自带的__consumer_offsets topic
删除Kafka自带Topic 一般情况下,你删除Kafka自带的__consumer_offsets topic,会报错提示不能删除。 倔强的你直接找到zookeeper删掉了它,list查看确实没有这个topic了,但是这会导致消费者和偏移量无法记录。 创建Kafka自带的Topi…...
在文件夹下快速创建vue项目搭建vue框架详细步骤
一、首先在你的电脑目录下新建一个文件夹 进入该文件夹并打开控制台(输入cmd指令) 进入控制台后输入 vue create springboot_vue (自己指定名称) 如果出现这类报错如:npm install 的报错npm ERR! network request to http://registry.cnp…...
蓝桥杯倒计时 36天-DFS练习
文章目录 飞机降落仙境诅咒小怂爱水洼串变换 飞机降落 思路:贪心暴搜。 #include<bits/stdc.h>using namespace std; const int N 10; int t,n; //这题 N 比较小,可以用暴力搜搜复杂度是 TN*N! struct plane{int t,d,l; }p[N]; bool vis[N];//用…...
ctfshow web入门 php特性总结
1.web89 intval函数的利用,intval函数获取变量的整数值,失败时返回0,空的数组返回,非空数组返回1 num[]1 intval ( mixed $var [, int $base 10 ] ) : int Note: 如果 base 是 0,通过检测 var 的格式来决定使用的进…...
Media Encoder 2024:未来媒体编码的新纪元 mac/win版
随着科技的飞速发展,媒体内容已成为我们日常生活中不可或缺的一部分。为了满足用户对高质量视频内容不断增长的需求,Media Encoder 2024应运而生,它凭借卓越的技术和创新的特性,重塑了媒体编码的未来。 Media Encoder 2024 mac/w…...
2024年AI辅助研发趋势:数智时代革新新引擎
随着科技的飞速发展,人工智能(AI)已经渗透到我们生活的方方面面,而在软件开发领域,AI辅助研发正成为一股不可忽视的力量。本文将探讨2024年AI辅助研发的趋势,以及它如何成为数智时代革新的新引擎。 AI辅助研…...
2024年家政预约上门服务小程序【用户端+商家端+师傅端】源码
024最新家政预约上门服务小程序源码 主要功能:商家入住,师傅入住,缴纳保正金 支持师傅,抢单派单 支持多城市多门下单,支持预约上门服务到店核销 支持补差价义价,支持区域服务限制 基于thinkphp和原生小程序开发...
数据结构:静态链表(编程技巧)
链表的元素用数组存储, 用数组的下标模拟指针。 一、理解 如果有些程序设计语言没有指针类型,如何实现链表? 在使用指针类型实现链表时,我们很容易就可以直接在内存中新建一块地址用于创建下一个结点,在逻辑上&#x…...
python中的**可以表示什么??
在Python中,** 有两个主要的用途: 作为幂运算符:a ** b 表示a的b次方。例如,2 ** 3 会返回 8,因为2的3次方等于8。 在函数调用或定义时作为关键字参数的解包: 当你有一个字典,并且你想将这个字…...
使用 Git 跟踪项目文件
本章内容为:用Django 写学习笔记程序第三章.2部署程序摘录,详情内容查看请跳转下方链接: 用Django 写学习笔记程序第三章.2部署程序 文章目录 使用 Git 跟踪项目文件虚拟环境中安装 gitgit 是什么git 安装完成后的简单配置创建项目忽略文件初…...
C++从零开始(day47)——set,map学习使用
这是关于一个普通双非本科大一学生的C的学习记录贴 在此前,我学了一点点C语言还有简单的数据结构,如果有小伙伴想和我一起学习的,可以私信我交流分享学习资料 那么开启正题 今天分享的是关于set和map的知识点 1.关联式容器 在前面&#…...
500kbps CAN总线调试实战:手把手教你用示波器测上升/下降沿时间(附某主机厂标准)
500kbps CAN总线信号完整性实战:从示波器设置到参数解读 在车载电子系统的开发与测试中,CAN总线的信号完整性直接关系到整个网络的通信可靠性。作为硬件调试工程师,掌握CAN差分信号的上升/下降沿时间测量技术,是排查通信故障、验证…...
终极指南:3步学会使用Akebi-GC游戏辅助工具提升原神体验
终极指南:3步学会使用Akebi-GC游戏辅助工具提升原神体验 【免费下载链接】Akebi-GC (Fork) The great software for some game that exploiting anime girls (and boys). 项目地址: https://gitcode.com/gh_mirrors/ak/Akebi-GC 还在为《原神》中繁琐的神瞳收…...
再次革新 .NET 的构建和发布方式(三)僚
1 安装与初始化 # 全局安装 OpenSpec npm install -g fission-ai/openspeclatest # 在项目目录下初始化 cd /path/to/your-project openspec init 初始化时,OpenSpec 会提示你选择使用的 AI 工具(Claude Code、Cursor、Trae、Qoder 等)。 3 O…...
2026最权威的降重复率助手解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 要是想把AIGC(人工智能生成内容)的检测率给降下来,那就得…...
aibiye的AI改写工具为解决论文30%重复率问题,总结出五条实用技巧。包括语义重组、逻辑优化等策略,显著改善文本原创性,助力论文高效通过检测。
嘿,大家好!我是AI菌。今天咱们来聊聊一个让无数学生头疼的问题:论文重复率飙到30%以上怎么办?别慌,我这就分享5个实用降重技巧,帮你一次搞定,轻松压到合格线以下。这些方法都是我亲身试验过的&a…...
面对30%的论文重复率,aibiye的AI工具提出五条降重策略。自动优化引用格式、调整语序结构,使文本更符合原创标准,减少人工干预。
论文重复率超过30%时,可以通过多种方法有效降低重复率。调整句子结构、替换同义词、转换表达方式是常见的人工降重手段,能够在不改变原意的前提下显著减少重复内容。采用图表展示数据、增加案例分析等技巧,既能丰富论文形式又能降低重复率。合…...
ES 学习(三)ELK简介
ELK(Elasticsearch Logstash Kibana) 三款开源工具的名称缩写,基于lucence搜索引擎,用于对日志文件数据进行抽取、分析、存储、展示的日志引擎。数据流程:nohup.log -> Filebeat -> Kafka -> Logstash ->…...
NVIDIA Profile Inspector终极指南:简单三步掌握显卡性能优化
NVIDIA Profile Inspector终极指南:简单三步掌握显卡性能优化 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 还在为游戏卡顿、画面撕裂而烦恼吗?NVIDIA Profile Inspector这款免…...
STEP3-VL-10B从零开始:Ubuntu环境部署+Gradio启动+API服务验证全流程
STEP3-VL-10B从零开始:Ubuntu环境部署Gradio启动API服务验证全流程 你是不是对多模态AI模型很感兴趣,想自己动手部署一个既能看懂图片又能和你聊天的智能助手?今天,我们就来一起搞定STEP3-VL-10B这个“小巨人”模型。 别看它只有…...
很多人对渗透测试工程师的认知停留在“模拟黑客攻击”,但实际工作内容远比这更全面。
在上一篇渗透测试入门指南发布后,很多粉丝私信我:“成为一名合格的渗透测试工程师,到底需要具备哪些硬实力?”“入行后该如何规划职业路径,避免原地踏步?”“企业招聘时更看重哪些技能和经验?”…...
