当前位置: 首页 > news >正文

线性顺序表算法库

list.cpp 具体函数实现

#include <stdio.h>
#include "list.h"
#include <malloc.h>/**************************************************
①函数名: CreateList
功  能: 用数组构建顺序表
参  数: ①SqList *&L:传入的线性表 ②ElemType a[]:使用的数组③int n: 线性表的长度(n < Maxsize)
返回值: 无
**************************************************/
void CreateList(SqList *&L, ElemType a[],int n)
{int i;//分配空间L = (SqList*)malloc(sizeof(SqList));for(i = 0; i<n; i++){L->data[i] = a[i];}L->length = n;
}/**************************************************
②函数名: InitList
功  能: 初始化线性表,重新分配空间,长度清成零
参  数: ①SqList *&L:要进行初始化的线性表
返回值:  无
**************************************************/void InitList(SqList *&L)
{L = (SqList*)malloc(sizeof(SqList)); //既然初始化了,直接重新分配空间L->length = 0;}/**************************************************
③函数名: 		DispalyList
功  能: 	输出数组线性表到控制台
使用场景: 	调试输出专用
参  数: 	①SqList *L:所需展示的顺序表
返回值:		void
**************************************************/
void DispalyList(SqList *L)
{if(L->length == 0) return;for(int i = 0; i< L->length; i++){printf("%d ",L->data[i]);}printf("\n");
}/**************************************************
④函数名: 	ListEmpty
功  能: 判断顺序表是否为空
参  数: ① SqList *L: 需要判断的顺序表
返回值: (bool类型)  是空表 ? 返回1  : 不是返回0
**************************************************/
bool ListEmpty(SqList *L)
{return(L->length == 0);
}/**************************************************
⑤函数名 : DestroyList
功  能: 释放顺序表空间
参  数: ① SqList *&L: 所需释放的线性表的指针地址
注  意: (1)
返回值:  无
**************************************************/
void DestroyList(SqList *&L) //(1)注意是指针地址
{//c语言, 直接freefree(L);}/**************************************************
⑥函数名:ListLength
功  能: 返回顺序表长度
参  数: ① SqList *L:传入顺序表的名字
返回值:  int: 线性表长度值
**************************************************/
int ListLength(SqList *L)
{return (L->length);
}/**************************************************
⑦函数名:GetElem
功  能: 取线性表数组内,某个序号的元素值,并返回
参  数: ①SqList *L: 要取的线性表 ②int i:要取的序号(逻辑需要 1-n)③ElemType &e:返回到特定位置
注意:①合法性判断 ②   需要把逻辑(1~n)变成物理序号(0~n-1)
返回值:	bool:是否获取成功
**************************************************/
bool GetElem(SqList *L,int i, ElemType &e)
{if(i<1 || i>L->length)//①{return false;}e = L->data[i-1];  //②return true;
}/**************************************************
⑧函数名: LocateElement
功  能: 查找特定元素值,在线性表中的位置(1~n)
参  数: ①ElemType element: 特定元素值 ② SqList *L:被查的线性表
返回值: int: 位置信息 (0没找到, 1~n, 即为位置)
**************************************************/
int LocateElement(ElemType element, SqList *L)
{int i = 0;while(i < L->length && L->data[i] != element) i++;//如果 i跳出后, i范围超过 L->length,则 没找到if(i >= L->length) return 0;else   return i+1;}
/**************************************************
函数名: ListInsert
功  能: 把 e 插到到线性表 L 的第 i(逻辑序号) 个位置
参  数: (1)SqList *&L: 线性表L (2)int i: 插入到的逻辑位置(3) ElemType e:要插入的元素值
注意:① 可插入的位置逻辑序号为1~L->length+1②得出 j最后是等于 i+1, 所以j的范围是 j>i③从 j=L->length得出 , data[j] = data[j-1],从而确定整体范围
返回值: bool:是否插入完成
**************************************************/
bool ListInsert(SqList *&L,int i, ElemType e)
{int j;if(i<1 || i>L->length+1)    //①return false;i--;        //将顺序表的逻辑序号转化为物理序号for(j = L->length; j > i; j--)  //② data[i+1] = data[i] => j = i+1{//③ data[i]~data[L->length-1]整体后移到data[i+1]~data[L->length]L->data[j] = L->data[j-1];}L->data[i] = e;     //插入元素eL->length++;        //顺序表插入增1return true;       //成功插入返回true}/**************************************************
函数名: ListDelete
功  能: 删除顺序表特定位置的元素
参  数: (1)SqList *&L:被删的顺序表 (2)int i:位置(3)ElemType &e:删掉的值
注 意:  ① 思路是整体前移,所以确定初始值i,然后定公式,看临界定 范围② 最后一个是 data[L->length-2] = data[L->length-1],得出 j = L->length-2
返回值: bool:是否删除成功? true : false
**************************************************/
bool ListDelete(SqList *&L, int i, ElemType &e)
{int j;if(i < 1 || i > L->length) return false;i--;    //把逻辑序号转为物理序号e = L->data[i]; //将要删除的元素存储for(j = i;j < L->length-1; j++)//①将data[i...n-1]整体前移{//② data[i+1]~data[L->length-1] => data[i] ~ data[L->length-2]L->data[j] = L->data[j+1];}L->length--;    //顺序表长度减去1return true;
}

list.h 算法库头文件

#ifndef LIST_H_INCLUDE
#define LIST_H_INCLUDE#define MaxSize   100typedef int ElemType;	//自定义类型typedef struct			//自定义结构体
{ElemType data[MaxSize];int length;
}SqList;//①用数组创建线性表
void CreateList(SqList *&L, ElemType a[],int n);
//②初始化线性表
void InitList(SqList *&L);
//③输出线性表
void DispalyList(SqList *L);
//④判断是否为空表
bool ListEmpty(SqList *L);
//⑤销毁线性表
void DestroyList(SqList *&L);//⑥ 求线性表的长度
int ListLength(SqList *L);//⑦求某个位置的数据元素值GetElem(L,i,e)
bool GetElem(SqList *L,int i, ElemType &e);//⑧ 元素 e 在 L中的序号(逻辑序号 1~n)
int LocateElement(ElemType element, SqList *L);//⑨ L中 第 i 位, 插入 e, ListInsert(L,i,e)
bool ListInsert(SqList *&L,int i, ElemType e);//⑩ 删除 L 中特定位置 i 的元素 e,  ListDelete(L,i,e)
bool ListDelete(SqList *&L, int i, ElemType &e);#endif

main.cpp  测试函数

#include "list.h"
#include "stdio.h"
int main()
{SqList *sq;//②初始化线性表InitList(sq);//判断是否初始化后是空表if(ListEmpty(sq)){printf("初始化过后是空表\n");}ElemType elem;ElemType x[8] = {1,2,3,4,5,6,7,8};ElemType y[8] = {9,8,7,6,5,4,3,2};//①用数组创建线性表CreateList(sq, x,8);if(ListEmpty(sq) != 1){printf("新建后不是空表\n");}//③输出线性表DispalyList(sq);
④判断是否为空表
//bool ListEmpty(SqList *L);
//⑤销毁线性表DestroyList(sq);printf("空间释放后,输出看看啥情况\n");DispalyList(sq);CreateList(sq,y,8);//⑥ 求线性表的长度printf("新建一个y表,求一下长度是%d\n",ListLength(sq));//⑦求某个位置的数据元素值GetElem(L,i,e)if(GetElem(sq,1, elem)){printf("新y表第一个元素是%d\n",elem);}//⑧ 元素 e 在 L中的序号(逻辑序号 1~n)elem = LocateElement(6, sq);printf("6在y的第%d个位置\n",elem);if(ListDelete(sq, 3, elem)){printf("删除y的第三个元素%d,然后再输出一下y:\n",elem);DispalyList(sq);}//⑨ L中 第 i 位, 插入 e, ListInsert(L,i,e)if(ListInsert(sq,3,elem)){printf("再插入,就是玩,展示:\n");DispalyList(sq);}return 0;
}

演示结果:

相关文章:

线性顺序表算法库

list.cpp 具体函数实现 #include <stdio.h> #include "list.h" #include <malloc.h>/************************************************** ①函数名: CreateList 功 能: 用数组构建顺序表 参 数: ①SqList *&L:传入的线性表 ②ElemType a[]:使用…...

java分割等和子集(力扣Leetcode416)

分割等和子集 力扣原题链接 给你一个只包含正整数的非空数组nums。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 示例 1&#xff1a; 输入&#xff1a;nums [1,5,11,5] 输出&#xff1a;true 解释&#xff1a;数组可以分割成 [1, 5, 5] …...

383. 赎金信

给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以&#xff0c;返回 true &#xff1b;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 func canConstruct(ransomNote …...

【二】【单片机】有关独立按键的实验

自定义延时函数Delay 分别用Delay.c文件存储Delay函数。用Delay.h声明Delay函数。每次将这两个文件复制到工程中&#xff0c;直接使用。 //Delay.c void Delay(unsigned int xms) //11.0592MHz {while(xms--){unsigned char i, j;i 2;j 199;do{while (--j);}…...

AJAX踩坑指南(知识点补充)

JWT JSON Web Token是目前最为流行的跨域认证解决方案 如何获取&#xff1a;在使用JWT身份验证中&#xff0c;当用户使用其凭据成功登录时&#xff0c;将返回JSON Web Token(令牌&#xff09; Token本质就是一个包含了信息的字符串 如何获取Token:登录成功之后&#xff0c;服务…...

备战蓝桥杯Day29 - 拼接最大数字问题

问题描述 有n个非负整数&#xff0c;将其按照字符串拼接的方式拼接为一个整数如何拼接可以使得得到的整数最大? 例: 32,94,128,1286,6,71可以拼接除的最大整数为 94716321286128。 问题思路 1.比较两个字符串的第一个数字&#xff0c;数值大的在前面&#xff0c;数值小的在…...

基于springboot的mysql实现读写分离

前言: 首先思考一个问题:在高并发的场景中,关于数据库都有哪些优化的手段&#xff1f;常用的有以下的实现方法:读写分离、加缓存、主从架构集群、分库分表等&#xff0c;在互联网应用中,大部分都是读多写少的场景,设置两个库,主库和读库,主库的职能是负责写,从库主要是负责读…...

Python爬虫之Scrapy框架系列(24)——分布式爬虫scrapy_redis完整实战【XXTop250完整爬取】

目录&#xff1a; 每篇前言&#xff1a;1.使用分布式爬取豆瓣电影信息&#xff08;1&#xff09;settings.py文件中的配置&#xff1a;&#xff08;2&#xff09;spider文件的更改&#xff1a;&#xff08;3&#xff09;items.py文件&#xff08;两个项目一致&#xff01;&…...

提升效率,稳定可靠:亚信安慧AntDB的企业价值

亚信安慧AntDB分布式数据库凭借平滑扩展、高可用性和低成本三大核心优势&#xff0c;在业界获得了极高的评价和认可。这些优点不仅为AntDB提供了巨大的市场发展潜力&#xff0c;也使其成为众多企业在数据管理上的首选解决方案。 AntDB的平滑扩展特性极大地提升了企业的灵活性和…...

洛谷入门——P1567 统计天数

统计天数 题目描述 炎热的夏日&#xff0c;KC 非常的不爽。他宁可忍受北极的寒冷&#xff0c;也不愿忍受厦门的夏天。最近&#xff0c;他开始研究天气的变化。他希望用研究的结果预测未来的天气。 经历千辛万苦&#xff0c;他收集了连续 N ( 1 ≤ N ≤ 1 0 6 ) N(1 \leq N …...

C++概述

目录 一、C关键字&#xff08;63个&#xff09; 二、C几个关键点&#xff1a; 三、C语言缺陷一&#xff1a;命名冲突 四、C新概念&#xff1a;命名空间&#xff08;namespace&#xff09; 五、命名空间的嵌套&#xff1a; 六、展开命名空间&#xff1a;&#xff08;using …...

Linux学习笔记16 - 系统命令

1. Linux 常见系统管理命令 命令含义格式su切换用户su [选项] [用户名]ps显示系统由该用户运行的进程列表ps [选项]top动态显示系统中运行的程序&#xff08;一般为每隔 5s&#xff09;topkill输出特定的信号给指定 PID&#xff08;进程号&#xff09;的进程&#xff0c;并根据…...

读书笔记--阅读华为数据治理之旅有感

通过阅读华为的数据治理之旅,了解到华为公司作为高科技企业的引领者,在数据治理工作、数字化智能化转型方面的确有许许多多值得大家学习的地方,华为公司的业务范围广泛,市场竞争压力大,迫切需要用一些高效的手段来减轻员工的工作量,让员工各司其职,在各自承担的主营业务…...

网络安全协议基本问题

Http和Https协议的端口号&#xff1a; Http&#xff1a;80 Https&#xff1a;443 网络监听&#xff1a; 网络监听是一种监视网络状态、数据流程以及网络上信息传输的工具&#xff0c;它可以将网络界面设定成监听模式&#xff0c;并且可以截获网络上所传输的信息。但是网络监…...

面试(一)

一. 说一下进程和线程的区别&#xff1f; (1)进程是资源分配的最小单位&#xff0c;线程是CPU调度的最小单位。 (2)线程是进程的一部分&#xff0c;一个线程只能属于一个进程&#xff0c;一个进程可以有多个线程&#xff0c;但至少有一个线程。 (3)进程有自己独立地址空间&a…...

libVLC windows开发环境搭建

1.简介 LibVLC是一个强大的开源库&#xff0c;它构成了VLC媒体播放器的核心部分。 LibVLC提供了一系列的功能接口&#xff0c;使得VLC能够处理流媒体的接入、音频和视频输出、插件管理以及线程系统等核心任务。 跨平台性&#xff1a;VLC作为一个跨平台的多媒体播放器&#x…...

【Netty】Netty的使用和常用组件详解

目录 一、简述 1.1 什么是Netty 1.2 Netty 的优势 1.3 为什么不用 Netty5&#xff1f; 1.4 为什么 Netty 使用 NIO 而不是 AIO&#xff1f; 1.5 为什么不用 Mina&#xff1f; 二、第一个 Netty 程序 2.1 Bootstrap、EventLoop(Group) 、Channel 2.1.1 Bootstrap 2.1.…...

Legacy|电脑Windows系统如何迁移到新安装的硬盘?系统迁移详细教程!

前言 前面讲了很多很多关于安装系统、重装系统的教程。但唯独没有讲到电脑换了新的硬盘之后&#xff0c;怎么把旧系统迁移到新的硬盘上。 今天小白就来跟各位小伙伴详细唠唠&#xff1a; 开始之前需要把系统迁移的条件准备好&#xff0c;意思就是在WinPE系统下&#xff0c;可…...

Windows 11 安装 Scoop

[Windows 11 安装 Scoop](Windows 11 安装 Scoop) 0. 引言 Scoop 从命令行安装您熟悉和喜爱的程序&#xff0c;差异最小。 它的主要功能如下&#xff1a; 消除权限弹出窗口 隐藏 GUI 向导样式的安装程序 防止PATH污染安装大量程序 避免安装和卸载程序的意外副作用 自动查…...

新能源汽车小三电系统

小三电系统 新能源电动汽车的"小三电"系统&#xff0c;一般指车载充电机(OBC)、车载 DC/DC 变换器&#xff0c;和高压直流配电盒(PDU)。一辆纯电动汽车一般配备一台OBC 和一台车载 DC/DC 变换器。OBC将外部输入的交流电转化为直流电输出给电池&#xff0c;DC/DC衔接…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...