当前位置: 首页 > 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衔接…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...