数据结构——对顺序线性表的操作

大家好啊,今天给大家分享一下对于顺序线性表的相关操作,跟随我的步伐来开始这一篇的学习吧!

如果有知识性错误,欢迎各位指正!!一起加油!!

创作不易,希望大家多多支持哦!

#include <stdio.h>#include <stdlib.h>/*此处是顺序线性表数据结构定义*/typedef int DataType;struct seqList{//有3个数据成员int MAXNUM;//用于记录顺序线性表中能存放的最大元素个数的 整型 MAXNUM  int curNum;//用于存放顺序线性表中数据元素的个数  整型  curNumDataType *element;//用于存放顺序线性表数据元素的连续空间的起始地址  };typedef struct seqList *PseqList;PseqList createNullList_seq(int m) {//创建一个空的顺序线性表,能存放的最大元素个数为 m//若m=0,则返回NULLif (m <= 0) return NULL;PseqList L = (PseqList)malloc(sizeof(struct seqList));if (L == NULL) return NULL;L->MAXNUM = m;L->curNum = 0;L->element = (DataType*)malloc(sizeof(DataType) * m);if (L->element == NULL) {free(L);return NULL;}return L;}int isFullList_seq(PseqList L){//判断顺序线性表是否已满,若已满,返回值为1,否则返回值为0if (L == NULL) return 0;return L->curNum == L->MAXNUM;}int insertP_seq(PseqList L, int p, int x){// 在线性表L中下标为p的位置插入数据元素x,若下标p非法或线性表已满无法插入数据,返回0;插入成功返回值为1//如果线性表满了, 还需输"list is full"的提示//如果插入位置非法,需输出提示"position is illegel"if (L == NULL || p < 0 || p > L->curNum || isFullList_seq(L)) {if (isFullList_seq(L)) printf("list is full");if (p < 0 || p > L->curNum) printf("position is illegel");return 0;}for (int i = L->curNum; i > p; --i) {L->element[i] = L->element[i - 1];}L->element[p] = x;L->curNum++;return 1;}int insertPre_seq(PseqList L, int p, int x){/*在线性表L中下标为p的位置的前面插入数据元素x,若下标p非法或线性表已满无法插入数据,返回0;插入成功返回值为1*/return insertP_seq(L, p - 1, x);}int insertPost_seq(PseqList L, int p, int x){/*在线性表L中下标为p的位置的后面插入数据元素x,若下标p非法或线性表已满无法插入数据,返回0;插入成功返回值为1*/return insertP_seq(L, p + 1, x);}void printList_seq(PseqList L) {//逐个输出线性表的元素,相邻的两个数据元素之间以一个空格为分隔符隔开if (L == NULL) return;for (int i = 0; i < L->curNum; ++i) {printf("%d ", L->element[i]);}}int destroyList_seq(PseqList L){//返回值为销毁的线性表中现有数据元素的个数,若待销毁的线性表不存在,则返回0if (L == NULL) return 0;int count = L->curNum;free(L->element);free(L);return count;}int locate_seq(PseqList L,int x){//在顺序表L中查找给定值x首次出现的位置,若不存在给定值,则返回-1if (L == NULL) return -1;for (int i = 0; i < L->curNum; ++i) {if (L->element[i] == x) return i;}return -1;}DataType locatePos_seq(PseqList L,int pos){// 在顺序表L中查找指定位置pos处的数据元素,若位置非法,则返回第0个数据元素if (L == NULL || pos < 0 || pos >= L->curNum) return L->element[0];return L->element[pos];}int deletePos_seq(PseqList L,int pos){//在顺序表L中删除与下标pos处的数据元素,若pos非法,则返回-1;否则返回1if (L == NULL || pos < 0 || pos >= L->curNum) return -1;for (int i = pos; i < L->curNum - 1; ++i) {L->element[i] = L->element[i + 1];}L->curNum--;return 1;}int delete_seq(PseqList L,int x){//在顺序表L中删除与参数x值相同的数据元素,返回删除数据元素的个数//可以使用之前已完成的操作int count = 0;if (L == NULL) return 0;for (int i = 0; i < L->curNum; ++i) {if (L->element[i] == x) {deletePos_seq(L, i);count++;i--;/*由于调用deletePos_seq函数后数据均向前移动一位,所以判断删除掉数据元素的下一位时,该原来的下一位元素已经移动到了删除元素的位置了,所以要将i--,来使下一次仍然判断原删除元素的下标处的新元素。*/}}return count;}void replace_seq(PseqList L,int x,int y){//将顺序表L中值为x的数据元素替换为yfor (int i = 0; i < L->curNum; i++) {  if (L->element[i] == x) {  L->element[i] = y;  }  }}void delDuplicate_seq(PseqList L){//移除线性表中的所有重复元素;不使用额外的数组空间,在原地修改输入数组/*实现思路
双重循环:
外层循环遍历线性表中的每一个元素,索引为 i。
内层循环从当前元素的下一个元素开始遍历,索引为 j。查找重复元素:
在内层循环中,检查当前元素 L->element[i] 是否与后续元素 L->element[j] 相等。
如果找到重复元素(即 L->element[i] == L->element[j]),则调用 deletePos_seq(L, j) 删除索引为 j 的元素。
删除元素后,将 k 标记为 1,表示找到了重复元素。
由于删除元素后,后续元素会向前移动,因此需要将 j 减 1,以确保继续检查当前位置的元素。删除当前元素:
如果 k 为 1(即找到了重复元素),则在外层循环中调用 deletePos_seq(L, i) 删除当前元素 L->element[i]。
删除当前元素后,将 i 减 1,以确保继续检查当前位置的元素。
将 k 重置为 0,以便继续检查下一个元素。*/int i, j;int k=0;    for (i = 0; i < L->curNum - 1; i++) {    for (j = i + 1; j < L->curNum;j++) {  if (L->element[i] == L->element[j]) {    deletePos_seq(L,j);k=1;j--;}}    if(k==1){deletePos_seq(L,i);i--;k=0;}    }}

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

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

相关文章

中级软件设计师:一文搞懂下午第一题——数据流图技术

中级软件设计师&#xff1a;一文搞懂下午第一题——数据流图技术 0. 答题技巧-【11-12分】分必拿方法0. 本章的考点1. 数据流图的基本元素1.1 数据流1.2 加工1.3 数据存储(文件)1.4 外部实体1.5 分层数据流图&#xff08;DFD&#xff09;1.6 自顶至下&#xff0c;逐步精化1.6.1…

8645 归并排序(非递归算法)

### 思路 非递归归并排序通过逐步合并相邻的子数组来实现排序。每次合并后输出当前排序结果。 ### 伪代码 1. 读取输入的待排序关键字个数n。 2. 读取n个待排序关键字并存储在数组中。 3. 对数组进行非递归归并排序&#xff1a; - 初始化子数组的大小curr_size为1。 - 逐…

GO网络编程(二):客户端与服务端通信【重要】

本节是新知识&#xff0c;偏应用&#xff0c;需要反复练习才能掌握。 目录 1.C/S通信示意图2.服务端通信3.客户端通信4.通信测试5.进阶练习&#xff1a;客户端之间通信 1.C/S通信示意图 客户端与服务端通信的模式也称作C/S模式&#xff0c;流程图如下 其中P是协程调度器。可…

使用VBA快速生成Excel工作表非连续列图片快照

Excel中示例数据如下图所示。 现在需要拷贝A2:A15,D2:D15,J2:J15,L2:L15,R2:R15为图片&#xff0c;然后粘贴到A18单元格&#xff0c;如下图所示。 大家都知道VBA中Range对象有CopyPicture方法可以拷贝为图片&#xff0c;但是如果Range对象为非连续区域&#xff0c;那么将产生10…

Web安全 - 安全防御工具和体系构建

文章目录 安全标准和框架1. 国内安全标准&#xff1a;等级保护制度&#xff08;等保&#xff09;2. 国际安全标准&#xff1a;ISO27000系列3. NIST安全框架&#xff1a;IDPRR方法4. COBIT与ITIL框架 防火墙防火墙的基本作用防火墙的三种主要类型防火墙的防护能力防火墙的盲区 W…

【MATLAB2024b】安装离线帮助文档(windows)

文章目录 一、在 MATLAB 设置中安装二、从math works 网站下载ISO&#xff1a;给无法联网的电脑安装三、重要说明 版本&#xff1a;matlab 2024b&#xff08;或者大于等于2023a&#xff09; 所需空间&#xff1a;10~15 GB 平台&#xff1a;Windows 需要注册math works账号。 一…

【计算机网络】详解UDP协议格式特点缓冲区

一、UDP 协议端格式 16 位 UDP 长度, 表示整个数据报(UDP 首部UDP 数据)的最大长度&#xff1b;如果16位UDP检验和出错&#xff0c;报文会被直接丢弃。 1.1、检验和出错的几种常见情况 数据传输过程中的比特翻转&#xff1a;在数据传输过程中&#xff0c;由于物理介质或网络设…

UE5.4.3 录屏回放系统ReplaySystem蓝图版

这是ReplaySystem的蓝图使用方法版&#xff0c;以第三人称模版为例&#xff0c;需要几个必须步骤 项目config内DefaultEngine.ini的最后添加&#xff1a; [/Script/Engine.GameEngine] NetDriverDefinitions(DefName"DemoNetDriver",DriverClassName"/Script/…

二、Spring Boot集成Spring Security之实现原理

Spring Boot集成Spring Security之实现原理 一、Spring Security实现原理概要介绍二、使用WebSecurityConfiguration向Spring容器中注册FilterChainProxy类型的对象springSecurityFilterChain1、未配置securityFilterChain过滤器链时使用默认配置用于生成默认securityFilterCha…

JDBC 快速入门

JDBC 快速入门 搭建步骤代码实现数据库java 代码 搭建步骤 准备数据库官网下载数据库连接驱动jar 包。https://downloads.mysql.com/archives/c-j/创建 java 项目&#xff0c;在项目下创建 lib 文件夹&#xff0c;将下载的驱动 jar 包复制到文件夹里选中 lib 文件夹右键 ->…

第二十一章 (动态内存管理)

1. 为什么要有动态内存分配 2. malloc和free 3. calloc和realloc 4. 常⻅的动态内存的错误 5. 动态内存经典笔试题分析 6. 总结C/C中程序内存区域划分 1.为什么要有动态内存管理 我们目前已经掌握的内存开辟方式有 int main() {int num 0; //开辟4个字节int arr[10] …

【EXCEL数据处理】000009 案列 EXCEL单元格数字格式。文本型数字格式和常规型数字格式的区别

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【EXCEL数据处理】000009 案列 EXCEL单元格数字格式。文本型数字格式和…

CTK框架(十一):使用的常见问题

目录 1.MF文件路径 2.服务必须要接口类 3.插件名命名要求 4.生命周期问题 5.一个接口对多个实现注意 6.中文输出注意 7.同一插件安装注意 8.添加元数据 9.关于升级插件时遇到的问题 10.不同插件定义资源文件注意路径问题 11.安装插件 12.插件依赖 1.MF文件路径 在…

K8S:开源容器编排平台,助力高效稳定的容器化应用管理

云计算de小白 Kubernetes&#xff08;简称K8s&#xff09;是一个开源容器编排平台&#xff0c;用于自动化部署、扩展和管理容器化应用程序。 K8S诞生于Google&#xff0c;基于其多年在生产环境运行容器的经验&#xff0c;目前已成为现代微服务架构和云原生应用的核心技术。 图…

【C++算法】10.滑动窗口_长度最小的子数组

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;图解 题目链接&#xff1a; 209. 长度最小的子数组 题目描述&#xff1a; 解法 解法一&#xff1a;暴力求解&#xff08;会超时&#xff09; 暴力枚举出所有子数组的和。 查找子数组n2&#xff0…

云计算 Cloud Computing

文章目录 1、云计算2、背景3、云计算的特点4、云计算的类型&#xff1a;按提供的服务划分5、云计算的类型&#xff1a;按部署的形式划分 1、云计算 定义&#xff1a; 云计算是一种按使用量付费的模式&#xff0c;这种模式提供可用的、便捷的、按需的网络访问&#xff0c;进入可…

idea插件开发的第六天-开发一个笔记插件

介绍 Demo说明 本文基于maven项目开发,idea版本为2022.3以上,jdk为1.8本文在JTools插件之上进行开发本插件目标是做一款笔记插件,用于开发者在开发过程中随时记录信息仓库地址: jtools-notes JTools插件说明 Tools插件是一个Idea插件,此插件提供统一Spi规范,极大的降低了id…

微型导轨在IC制造设备的应用与优势

微型导轨的精度和稳定性对于机器的准确执行任务至关重要&#xff0c;其精确度通常用微米或毫米来衡量。其尺寸可以做到非常小&#xff0c;常运用在小型设备上&#xff0c;尤其是在IC制造设备中&#xff0c;其应用非常广泛。 在IC制造设备中主要用于半导体芯片的切割、封装和测试…

V2M2引擎源码BlueCodePXL源码完整版

V2M2引擎源码BlueCodePXL源码完整版 链接: https://pan.baidu.com/s/1ifcTHAxcbD2CyY7gDWRVzQ?pwdmt4g 提取码: mt4g 参考资料&#xff1a;BlueCodePXL源码完整版_1234FCOM专注游戏工具及源码例子分享

网站可疑问题

目标站点 Google hack 页面访问 抓包 POST /admin.php?actionlogin HTTP/2 Host: www.xjy.edu.cn Cookie: xkm_sidA6x4Cgw2zx User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:130.0) Gecko/20100101 Firefox/130.0 Accept: text/html,application/xhtmlxml,appl…