线性表的顺序存储伪算法代码和讲解

2024-08-23 23:08

本文主要是介绍线性表的顺序存储伪算法代码和讲解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

#define LIST_INIT_SIZE 100//线性表存储空间的初始分配量
#define LISTINCREMENT 10//线性表存储空间的分配增量typedef struct 
{Elemtype *elem;//存储空间基址int length;//当前长度int listsize;//当前分配存储容量(以sizeof(elemtype))
}Sqlist;//1.初始化
Status initlist_sq(SqList &L)//构造一个空的线性表
{L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));//分配空间,如果分配空间,返回elem的基址//LIST_INIT_SIZE相当于元素的个数。而ElemType相当于每个元素的大小if(!L.elem)exit(OVERFLOW);//如果为空,那么申请分配内存空间失败L.length=0;//空表长度为零L.listsize=LIST_INIT_SIZE//初始存储容量reutn OK;
}
//2.清空表
L.length=0;
//3.销毁表
free(L.elem);
//4.求表长
return (L.length);
//5.判断空表
if(L.length==0)
return OK;
//6.取表中的第i个元素
Status GetElem(SqList L,int i,ElemType &e)
{if(i>L.length||i<1)return (ERROR);p.L.elem+(i-1);//p为第i个元素的位置e=*p;//取出的第i个元素的值赋给e
}//7.定位:查找某个元素是否存在,存在给出其位置,否则为0
int locate_sq(SqList L,ElemType e)
{p=L.elem;//因为elem指向线性表的基址,所以p也指向线性表的基址for(i=1;i<=L.length;i++){if(*p++==e)//如果p指向的数据元素和所找的元素相等,就返回ireturn i;}else//如果遍历整个线性表还没有找到,就返回0return 0;
}//8.插入:在顺序线性表L中第i个元素之前插入新元素eStatus Listinsert_Sq(SqList &L,int i,ElemType e)
{if(i<1||i>L.length+1)//如果插入位置不合适,返回errorreturn ERROR;if(L.length>=L.listsize)//如果插入位置合适{newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));//从虚拟开辟新的地址空间等于原有的然后加上追加的然后乘以每个元素的大小if(!newbase)//如果新的空间开辟错误,那么退出exit(OVERFLOW);L.elem=newbase;//把线性表的首地址指向newbaseL.listsize=L.listsize+LISTINCREMENT;//新的线性表长度等于原有的加上新开辟的}q=&(L.elem[i-1]);//确定元素E需要插入的位置,第i个元素下标是【i-1】for(p=&(L.elem[L.length-1]);p>=q;--p)*(p+1)=*p;//让线性表中的元素依次向后移动,直到移到元素e需要插入的位置的后一位*q=e;L.length++;//线性表的长度加1return OK;
}//9.删除操作。Status ListDelete_Sq(SqList &L,int i,ElemType &e)
{//在顺序线性表L中删除第i个元素,并用e返回其值//i的合法值为1<=i<=ListLength_Sq(L)if((i<1||(i>L.length))return ERROR;p=&(L.elem[i-1]);//p指向被删除的元素e=*p;//被删除的元素的值赋给eq=L.elem+L.length-1;//q指向表尾for(p++;p<=q;p++)//从待删除的下一个位置依次向上移动*(p-1)=*p;L.length--;return OK;}

这篇关于线性表的顺序存储伪算法代码和讲解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1100755

相关文章

RabbitMQ消费端单线程与多线程案例讲解

《RabbitMQ消费端单线程与多线程案例讲解》文章解析RabbitMQ消费端单线程与多线程处理机制,说明concurrency控制消费者数量,max-concurrency控制最大线程数,prefe... 目录 一、基础概念详细解释:举个例子:✅ 单消费者 + 单线程消费❌ 单消费者 + 多线程消费❌ 多

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

Java实现自定义table宽高的示例代码

《Java实现自定义table宽高的示例代码》在桌面应用、管理系统乃至报表工具中,表格(JTable)作为最常用的数据展示组件,不仅承载对数据的增删改查,还需要配合布局与视觉需求,而JavaSwing... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码