线性表操作的实现--顺序表

本文参考朱战力老师的数据结构与算法--使用C语言一书

文章目录

前言

一、线性表是什么?

二、具体实现

1.顺序表的定义

2.初始化ListInitiate(L)

3.求当前元素个数ListLength(L)

4.插入元素ListInsert(L,i,x)

5.删除元素ListDelete(L,i,x)

6.取元素ListGet(L,i,x)

7.小试牛刀

总结


前言

        本文所介绍的内容为数据结构与算法的基础内容--顺序表操作的实现,笔者通过不断的深入学习发现,后续的数据结构中,包括堆栈、队列、串、数组、表、数和二叉树无不是通过线性表去实现,故很好的理解线性表的操作对于广大的读者来说非常的有必要!


一、线性表是什么?

        线性表的抽象数据类型是线性表的逻辑结构,它表示线性表的元素、元素之间的逻辑关系以及线性表的操作集合。任何需要计算机进行管理和处理的元素都必须首先按照某种方式存储在计算机中。线性表有两种存储结构:一种是顺序存储结构,另一种是链式存储结构。一旦确定了线性表的存储结构,线性表操作集合中的所有操作就可以具体实现。

二、具体实现

1.顺序表的定义

代码如下(示例):

typedef struct {DataType list[MaxSize];int size;
}SeqList;

其中,DataType为数组元素的数据类型,MaxSize表示数组元素的最大个数,list表示顺序表的数组成员,size表示顺序表中当前存储的数组元素个数成员,且满足条件size<=MaxSize,SeqList是结构名。

2.初始化ListInitiate(L)

代码如下(示例):

void ListInitiate(SeqList* L) {L->size = 0;
}

说明:由于函数中要改变参数L的size域的值,因此参数L应设计为输出型参数,即参数L设计为SeqList的指针类型,否则,size域的修改值将不能带回去。

3.求当前元素个数ListLength(L)

代码如下(示例):

int ListLength(SeqList L) {return L.size;
}

4.插入元素ListInsert(L,i,x)

代码如下(示例):

int ListInsert(SeqList* L, int i, DataType x) {//在顺序表L的第i(0~size)个位置前插入x//插入成功返回1,插入失败返回0int j;if (L->size >= MaxSize) {printf("顺序表已满无法插入!\n");return 0;}else if (i<0 || i>L->size) {printf("参数i不合法!\n");return 0;}else {//从前向后依次后移数据,为插入做准备for (j = L->size; j > i; j--){L->list[j] = L->list[j - 1];}L->list[i] = x;        //插入xL->size++;            //元素个数加1return 1;}
}

此过程中,插入成功返回1,插入失败返回0.

顺序(步骤):

(1)判断条件:

1.判断顺序表是否已满

2.判断插入的位置是否合法

(2)操作过程:

3.进行移位操作(空出插入位置)

4.直接赋值(插入)

5.使元素个数+1

图示如下:

5.删除元素ListDelete(L,i,x)

代码如下(示例):

int ListDelete(SeqList* L, int i, DataType* x) {//删除顺序表L中第i(0~size-1)个位置处的元素并保存到x中//删除成功返回1,删除失败返回0int j;if (L->size <= 0) {printf("顺序表已空无元素可删!\n");return 0;}else if (i<0 || i>L->size - 1) {printf("参数i不合法");return 0;}else {*x = L->list[i];        //保存删除元素到x中//从前向后依次前移for (j = i + 1; j <= L->size - 1; j++){L->list[j - 1] = L->list[j];}L->size--;return 1;}
}

此过程中,删除成功返回1,删除失败返回0.

顺序(步骤):

(1)判断条件:

1.判断顺序表是否有元素可删

2.判断i是否合法

(2)操作过程:

3.使用变量x带走删除值

4.后续相应元素进行前移

5.使元素个数-1

图示如下:

6.取元素ListGet(L,i,x)

代码如下(示例):

int ListGet(SeqList L, int i, DataType* x) {//取顺序表L中第i个元素存于x中,成功返回1,失败返回0if (i<0 || i>L.size - 1) {printf("参数i不合法!\n");return 0;}else {*x = L.list[i];return 1;}
}

说明:取元素操作与删除元素操作类同,但更简单,取元素操作只需取元素list[i]到参数x中。

7.小试牛刀

代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define MaxSize 100
typedef struct Student {long number;    //学号数据项char name[10];    //姓名数据项char sex[3];    //性别数据项int age;        //年龄数据项
}StudentType;        //定义学生信息结构体typedef StudentType DataType;    //定义DataType
#include"SeqList.h" //包含顺序表头文件void main(void) {SeqList myList;int i;StudentType x[3] = { {2000001,"张三","男",20},{2000002,"李四","男",21},{2000003,"王五","女",22} };StudentType s;ListInitiate(&myList);    //初始化函数调用ListInsert(&myList, 0, x[0]);    //插入函数调用ListInsert(&myList, 1, x[1]);ListInsert(&myList, 2, x[2]);for (i = 0; i < ListLength(myList); i++) {    //当前元素个数函数调用ListGet(myList, i, &s);                    //取元素函数调用printf("%d    %s    %s    %d\n", s.number, s.name, s.sex, s.age);}
}

运行结果:


总结

        顺序表是一种基于顺序存储结构的数据结构,通过数组来表示元素的连续存储空间。顺序表具有快速访问任意位置的元素的优势,适用于对元素的随机访问较频繁的场景。

        在顺序表中,插入和删除元素的操作可能需要移动大量的元素,导致操作的时间复杂度较高。此外,顺序表的大小是固定的,一旦存储空间被占满,就无法再插入新的元素。

        总的来说,顺序表是一种简单而常见的数据结构,适用于需要快速访问元素和对存储空间连续性要求较高的场景。然而,需要注意在插入和删除操作频繁的情况下,可能会影响性能。

        通过顺序表,我们可以实现元素的插入、删除、查找等基本操作,并通过下标来快速定位元素。掌握顺序表的操作,对于理解和应用其他数据结构也具有重要的意义。

        通过使用顺序表,我们可以高效地组织和处理大量的数据,提高程序的运行效率和开发效率。要根据具体的需求选择合适的数据结构,以便在不同的场景中充分发挥其优势。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/117222.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[卷积神经网络]FasterNet论文解析

一、概述 FasterNet是CVPR2023的文章&#xff0c;通过使用全新的部分卷积PConv&#xff0c;更高效的提取空间信息&#xff0c;同时削减冗余计算和内存访问&#xff0c;效果非常明显。相较于DWConv&#xff0c;PConv的速度更快且精度也非常高&#xff0c;识别精度基本等同于大型…

iOS 配置通用链接(Universal Link)服务端和开发者后台都配置好了,还是跳转不到App

目录 一、什么是 Universal Link&#xff1f; 1.背景介绍 2.特点 3.运行机制原理&流程图 二、配置教程 1.第一步&#xff1a;开启 Associated Domains 服务 1.1 开通 Associated Domains 2.第二步&#xff1a;服务器配置 apple-app-site-association&#xff08;AAS…

【makedown使用介绍】

如何使用makedown 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必…

pd19虚拟机软件 Parallels Desktop 19 mac中文停用功能

Parallels Desktop 19 mac是一款功能强大的虚拟机软件&#xff0c;它允许用户在Mac电脑上同时运行Windows、Linux和其他操作系统。Parallels Desktop提供了直观易用的界面&#xff0c;使用户可以轻松创建、配置和管理虚拟机。 Parallels Desktop 19 for Mac停用功能 从Paralle…

深圳世有伯乐教育科技有限公司——LJ培训

今天来吐槽一波 深圳世有伯乐教育科技有限公司就是一个垃圾的培训机构&#xff0c;不&#xff0c;说是培训机构都是扭曲事实了&#xff0c;因为它根本就没有国家认可的办学许可证。光说没法让人信服&#xff0c;以下是企查查的截图&#xff1a; 世有伯乐的工商信息图片 续上&…

交换机基础(四):MSTP负载均衡配置案例

如图所示是某个企业内部核心网络的结构图&#xff0c;目前企业中有20个VLAN, 编号为VLAN1&#xff5e;VLAN20, 为了确保内部网络的可靠性&#xff0c;使用 了冗余链路和MSTP 协议。为了能更好地利用网络资源和带宽&#xff0c;现管理员希望通过配置MSTP 的负载均衡实现网络带宽…

TX Text Control.NET For WPF 32.0 Crack

TX Text Control 支持VISUAL STUDIO 2022、.NET 5 和 .NET 6 支持 .NET WPF 应用程序的文档处理 将文档编辑、创建和 PDF 生成添加到您的 WPF 应用程序中。 视窗用户界面 功能齐全的文档编辑器 TX Text Control 是一款完全可编程的丰富编辑控件&#xff0c;它在专为 Visual Stu…

软考高级系统架构 上午真题错题总结

目录 前言一、2022年真题&#xff08;√&#xff09;二、2021年真题三、2020年真题&#xff08;√&#xff09;四、2019年真题&#xff08;√&#xff09;五、2018年真题&#xff08;√&#xff09;六、2017年真题&#xff08;√&#xff09;七、2016年真题&#xff08;√&…

【Linux】IP协议

文章目录 &#x1f4d6; 前言1. 网络层2. IP协议格式3. IP报文分片和组装3.1 如何分片和组装&#xff1a;3.2 组装的衍生问题&#xff1a; 4. 网段划分&#xff08;重点&#xff09;4.1 子网掩码&#xff1a;4.2 IP地址的数量限制&#xff1a;4.3 私有IP地址和公网IP地址&#…

JVM——堆内存调优(Jprofiler使用)Jprofile下载和安装很容易,故没有记录,如有需要,在评论区留言)

堆内存调优 当遇到OOM时&#xff0c;可以进行调参 1、尝试扩大堆内存看结果 2、分析内存&#xff0c;看哪个地方出现了问题&#xff08;专业工具&#xff09; 调整初始分配内存为1024M&#xff0c;调整最大分配内存为1024M&#xff0c;打印GC细节&#xff08;如何添加JVM操…

本地FTP YUM源报错处理

一、问题描述 某次OS升级到Anolis 8.6后&#xff0c;但是还需要centos 6.5的yum源&#xff0c;恢复回去后&#xff0c;yum更新&#xff0c;报如下错误&#xff1a; Errors during downloading metadata for repository ‘base’: Curl error (8): Weird server reply for ftp…

python sqlalchemy(ORM)- 02 表关系

文章目录 表关系ORM表示 1v1ORM表示 1vm 表关系 1:1&#xff0c;表A 中的一条记录&#xff0c;仅对应表B中的一条记录&#xff1b;表B的一条记录&#xff0c;仅对应表A的一条记录。1:m&#xff0c;表A中的一条记录&#xff0c;对应表B中的多条记录&#xff0c;表B中的一条记录…

AJAX: 对话框大全

AJAX:$.ajax({url: "/admin/cutting/getDataWeek",type: "GET",data:{},dataType:json,success: function (res) {if (res.code 1) {}},error:function (error) {console.log(请求失败);console.log(error);}}); $(.sub).unbind(click).click(funct…

【转】多台服务器共享session问题

多台服务器共享 session 问题 现在的大型网站中&#xff0c;如何实现多台服务器中的 session 数据共享呢&#xff1f; 当使用多台服务器架设成集群之后&#xff0c;我们通过负载均衡的方式&#xff0c;同一个用户&#xff08;或者 ip&#xff09;访问时被分配到不同的服务器上…

css之Flex弹性布局(子项常见属性)

文章目录 &#x1f380;前言&#xff1a;本篇博客介绍弹性布局flex容器中子项的常见用法&#x1fa80;flex:子项目占得份数 &#xff08;划分不同子项的比例&#xff09;&#x1f387;align-self 控制单独一个子项在侧轴的排列方式&#x1f9f8;order属性定义子项的排列顺序 &a…

2018年亚太杯APMCM数学建模大赛A题老年人平衡能力的实时训练模型求解全过程文档及程序

2018年亚太杯APMCM数学建模大赛 A题 老年人平衡能力的实时训练模型 原题再现 跌倒在老年人中很常见。跌倒可能会导致老年人出现许多并发症&#xff0c;因为他们的康复能力通常较差&#xff0c;因此副作用可能会使人衰弱&#xff0c;从而加速身体衰竭。此外&#xff0c;对跌倒…

Android12 启动页适配

印象中&#xff0c;在2022年末接到了一个针对Android12启动页适配的需求&#xff0c;当时也使用了一些适配方案&#xff0c;也写了一个Demo&#xff0c;但是最终没有付诸适配行动&#xff1b;当然并不是适配失败&#xff0c;而是根据官方适配方案适配后太丑了… 1024纪念文章&a…

SAP BW 常用知识点

SAP BW&#xff08;Business Information Warehouse&#xff09;是一种强大的数据仓库解决方案&#xff0c;它可以帮助企业收集、处理和分析海量数据&#xff0c;以支持更明智的商业决策。以下是一些关于SAP BW的重要知识点&#xff1a; 数据集成&#xff1a;SAP BW能够从各种…

CSP-J2023入门组第二轮T4:旅游巴士

题目描述 小 Z 打算在国庆假期期间搭乘旅游巴士去一处他向往已久的景点旅游。 旅游景点的地图共有 n n n 处地点,在这些地点之间连有 m m m 条道路。其中 1 1

Dockerfile 镜像创建

目录 一、创建镜像的三种方法&#xff1a; 二、基于已有镜像创建&#xff1a; 1.启动一个镜像&#xff1a; ​编辑 2.将修改后的容器提交为新的镜像&#xff1a; 三、基于本地模板创建&#xff1a; 1.下载模板&#xff1a; 2.导入为镜像&#xff1a; 四、基于Dockerfile 创…