数据结构<一>顺序表
目录一、线性表的定义二、顺序表的定义三、顺序表的定义及初始化四、顺序表的插入五、顺序表的删除六、顺序表的修改七、顺序表的查找八、顺序表的显示九、测试主程序一、线性表的定义线性表是一种基本的数据结构它是由n个数据元素a[1]、a[2]、...、a[n]组成的有限序列。 线性表中的数据元素之间呈现出一对一的顺序关系每个元素都有一个前驱和后继元素除了第一个元素没有前驱最后一个元素没有后继它可以用顺序存储结构和链式存储结构来实现。 举一个例子一个班级的学生名单可以看作是一个线性表其中每一个学生都是一个数据元素学生名单中的数据元素之间存在一定的顺序关系每个学生都有一个前一个和后一个学生除了第一个学生没有前一个学生最后一个学生没有后一个学生。如果使用顺序存储结构来实现学生名单那么每个学生的信息将被存储在一个数组中如果使用链式存储结构可以将每个学生的信息存储在一个链表的节点中。无论是使用数组还是链表都可以对学生名单进行插入、删除、查找和遍历等常见的操作这些操作都是线性表的基本操作。 线性表作为一种基本的数据结构类型在计算机存储器中的表示一般有两种形式一种是顺序存储一种是链式存储。二、顺序表的定义线性表的顺序存储又叫顺序表。线性表的顺序存储是指将数据元素按照其逻辑顺序依次存储在一组连续的物理位置上通过数组来实现。顺序存储结构以连续的存储单元顺序存放线性表的元素可以直接访问元素查找和遍历较快但插入和删除操作需要移动大量元素效率较低。 线性表的顺序存储可以用一维数组来实现。数组的下标从0开始表示元素在数组中的位置。 具体实现步骤如下 1. 定义一个数组用来存储线性表中的元素数组大小为线性表的长度 2. 将线性表中的元素按照逻辑顺序存储在数组中即将第i个元素存储在数组中下标为i-1的位置上 3. 可以通过下标访问具体的元素数组下标从0开始第i个元素的下标为i-1 4. 可以通过数组下标修改或者查询元素的值 5. 插入元素时需要将插入点之后的元素依次后移然后在插入点处插入新元素 6. 删除元素时需要将删除点之后的元素依次前移然后删除最后一个元素。 顺序表具有随机存取的优点可以直接按照下标访问任意位置的元素。但是因为删除或插入操作时需要移动大量元素所以其插入和删除操作效率较低。三、顺序表的定义及初始化//顺序表的定义 #define MAXSIZE 100 ​ typedef struct { int data[MAXSIZE]; // 存储顺序表的数组 int length; // 顺序表长度 } sqlist_t; ​ //顺序表的初始化 sqlist_t *sqlist_init(void) { sqlist_t *list (sqlist_t *)malloc(sizeof(sqlist_t)); list-length 0; // 顺序表的长度初始化为0 memset(list-data, 0, sizeof(list-data)); // 清空数组的值 return list; }四、顺序表的插入插入元素时需要将插入点之后的元素依次后移然后在插入点处插入新元素 例如在 {1,2,3,4,5} 的第 3 个位置上插入元素 6实现过程如下1. 遍历至顺序表存储第 3 个数据元素的位置如图所示2. 将元素 3 以及后续元素 4 和 5 整体向后移动一个位置如图所示3.将新元素 6 放入腾出的位置如图所示// 顺序表的插入 int sqlist_insert(sqlist_t *list, int index, int val) { // index 1 , index 是从1 开始的 // index list-length 1 大于顺序表的长度是 list-length if (index 1 || index list-length 1 || list-length MAXSIZE) { return -1; // 失败 -1 } // 最后一个元素开始往后移动 // 倒数第二个元素 移动到倒数第一个元素的位置 一直移动到index 的位置 // index 指向的元素也要往后移动 for (int i list-length - 1; i index - 1; i--) { // 4 3 2 list-data[i 1] list-data[i]; // 往后移动1个元素 } list-data[index - 1] val; // 插入元素 list-length; // 顺序表的长度增加1 return 0; }五、顺序表的删除删除元素时需要将删除点之后的元素依次前移然后删除最后一个元素。例如从 {1,2,3,4,5} 中删除元素 3 的过程如图所示// 顺序表的删除 int sqlist_delete(sqlist_t *list, int index, int *pval) { // index 1 , index 是从1 开始的 // index list-length 1 大于顺序表的长度是 list-length if (index 1 || index list-length 1) { return -1; // 失败 -1 } *pval list-data[index - 1]; // 先将删除的元素赋值给pval ​ // 把后面的元素往前移动 for (int i index - 1; i list-length - 1; i) { list-data[i] list-data[i 1]; // 往前移动1个元素 } list-length--; // 顺序表的长度减少1 return 0; }六、顺序表的修改// 顺序表的修改 int sqlist_modify(sqlist_t *list, int index, int newval) { // index 1 , index 是从1 开始的 // index list-length 1 大于顺序表的长度是 list-length if (index 1 || index list-length 1) { return -1; // 失败 -1 } list-data[index - 1] newval; // 把newval 的值更新到数组内 return 0; }七、顺序表的查找// 顺序表的查找 int sqlist_search(sqlist_t *list, int val) { for (int i 0; i list-length; i) { if (val list-data[i]) // 查找元素 { return i 1; // 找到返回元素的位置 } } return 0; // 没有找到返回0 }八、顺序表的显示// 顺序表的显示 int sqlist_print(sqlist_t *list) { for (int i 0; i list-length; i) { printf(%d , list-data[i]); } printf(\n); return 0; }九、测试主程序//测试主程序 int main(int argc, char const *argv[]) { sqlist_t *L sqlist_init(); for (int i 0; i 5; i) { sqlist_insert(L, i 1, i 1); } sqlist_print(L); sqlist_insert(L, 3, 6); sqlist_print(L); int value; sqlist_delete(L, 3, value); printf(删除的元素是%d\n, value); sqlist_print(L); sqlist_delete(L, 3, value); printf(删除的元素是%d\n, value); sqlist_print(L); sqlist_modify(L, 3, 40); sqlist_print(L); int pos sqlist_search(L, 4); if (pos 0) // 查找元素 { printf(%d 查找的元素在第%d个位置\n, 4, pos); } else { printf(%d 查找的元素不存在\n, 4); } ​ pos sqlist_search(L, 40); if (pos 0) // 查找元素 { printf(%d 查找的元素在第%d个位置\n, 40, pos); } else { printf(%d 查找的元素不存在\n, 40); } ​ return 0; } ​

相关新闻

(84页PPT)IBM采购供应链全景规划方法论L1L3蓝图流程规划地图与详细清单设计80流程业务痛点分析(附下载方式)

(84页PPT)IBM采购供应链全景规划方法论L1L3蓝图流程规划地图与详细清单设计80流程业务痛点分析(附下载方式)

篇幅所限,本文只提供部分资料内容,完整资料请看下面链接 (84页PPT)IBM采购供应链全景规划方法论L1L3蓝图流程规划地图与详细清单设计80流程业务痛点分析.pptx_智慧方案集成系统架构资源-CSDN下载 资料解读:某集团数字…

2026/7/23 9:09:40 阅读更多 →
DS1302实时时钟芯片应用与优化指南

DS1302实时时钟芯片应用与优化指南

1. DS1302实时时钟芯片的核心特性与应用场景DS1302作为一款经典的实时时钟芯片,在嵌入式系统中扮演着关键角色。我第一次接触这个芯片是在2015年做一个智能家居控制器项目,当时需要记录设备操作日志的时间戳。相比其他RTC芯片,DS1302有几个独…

2026/7/23 6:20:53 阅读更多 →
阻抗变换器原理、设计与工程应用全解析

阻抗变换器原理、设计与工程应用全解析

1. 阻抗变换器的基础概念与核心价值阻抗变换器这个看似简单的电路元件,在电子工程领域扮演着关键角色。我第一次接触这个概念是在调试射频电路时,当时信号在传输线上出现了严重的反射问题,导致接收端波形畸变。一位资深工程师递给我一个指甲盖…

2026/7/23 7:53:30 阅读更多 →

最新新闻

TikTok多账号批量起号:代理IP如何助你快速变现?

TikTok多账号批量起号:代理IP如何助你快速变现?

做TikTok社媒矩阵的时候,很多人都会遇到这样一个问题:批量起号,很容易遭遇限流、封号、甚至账号直接报废,影响到其他账号的运营。问题往往不在于内容,而是底层环境,也就是IP。下面这篇文章,小编…

2026/7/23 16:01:38 阅读更多 →
低成本低减排方案的高效螺旋桨应用指南

低成本低减排方案的高效螺旋桨应用指南

执行摘要研究发现,2026年工业制造领域,航运业为应对国际海事组织(IMO)日趋严格的CII评级与EEXI要求,对低成本低减排方案的高效螺旋桨需求激增,预计全球船队节能改造市场规模将突破120亿美元。报告显示&…

2026/7/23 16:01:38 阅读更多 →
2026会议纪要AI哪个好 准识别快整理省心输出清晰专业纪要

2026会议纪要AI哪个好 准识别快整理省心输出清晰专业纪要

2026年想找识别准、整理快、输出清晰专业的会议纪要AI,对职场新人整理会议、入职培训内容的需求来说,听脑会更适配。它支持从录音到结构化纪要、再到学习巩固的全流程,适合需要快速整理信息、尽快上手工作的新人,暂时满足不了需要…

2026/7/23 16:01:38 阅读更多 →
深入解析TI Stellaris微控制器ROM Boot Loader与驱动库设计

深入解析TI Stellaris微控制器ROM Boot Loader与驱动库设计

1. 项目概述与核心价值 在嵌入式开发领域,尤其是基于ARM Cortex-M内核的微控制器项目中,如何高效利用片上有限的存储资源,同时确保系统启动的可靠性和后期固件更新的便捷性,是每一位工程师都会面临的经典挑战。今天,我…

2026/7/23 16:01:37 阅读更多 →
2026智能体元年:当AI学会“主动干活“,打工人终于可以摸鱼了?

2026智能体元年:当AI学会“主动干活“,打工人终于可以摸鱼了?

凌晨两点,张明盯着屏幕上那条微信消息,手指悬在键盘上方迟迟没有落下。消息是老板发来的:"明早九点,客户要看Q3竞品分析报告,把所有竞品最近三个月的动态、融资、产品迭代全部整理出来。"张明看了看表&#…

2026/7/23 16:01:37 阅读更多 →
三防热敏标签纸的涂层技术原理与选型指南——工程师视角的深度拆解

三防热敏标签纸的涂层技术原理与选型指南——工程师视角的深度拆解

做标签的同行经常问我一个问题:三防热敏纸和普通热敏纸,不就是多了一层涂层吗?凭什么贵那么多?作为一个跟不干胶材料打了五年交道的工程师,我想从技术底层把这件事讲透——三防热敏纸的三层结构分别是什么?…

2026/7/23 16:00:37 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 12:54:44 阅读更多 →

月新闻