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

C++ 顺序线性表的功能

顺序线性表的功能

//头文件 
#pragma once#define LIST_INIT_SIZE   50
#define LIST_INCREMENT   20
#define OK 1
#define ERROR 0typedef int Status;typedef char ElemType;typedef struct list_ {ElemType* elem;int length;int listize;
}SqList;// 1 初始化 函数
Status InitList_Sq(SqList& L);//2 想第i个位置插入数据
Status ListInsert_Sq(SqList& L, int i, ElemType e);//3 显示所有元素
void PrintAll(SqList L, void print(ElemType));//4 获取第i个元素的值
Status GetElem(SqList L, int i, ElemType& e);//5 打印一个元素
void PrintOne(ElemType e);//删除 第i个位置的元素
Status ListDelete(SqList& L, int i, ElemType& e);// 用完释放
void DestroyList(SqList& L);//获取e所在下标size_t LocateElem(SqList L,ElemType e);
#include <stdio.h>
#include <stdlib.h>
#include "mylist.h"Status InitList_Sq(SqList& L) {L.elem = (ElemType*)malloc(sizeof(ElemType) * LIST_INIT_SIZE);if (!L.elem)return ERROR;L.length = 0;L.listize = LIST_INIT_SIZE;return OK;
}Status ListInsert_Sq(SqList& L, int i, ElemType e) {// i必须大于0 ,小于等于 L.length + 1if (i<1 || i> L.length + 1)return ERROR;// 位置合理,空间不够if (L.length >= L.listize) {//扩空间ElemType* newbase = (ElemType*)realloc(L.elem, sizeof(ElemType) * (L.listize + LIST_INCREMENT));if (!newbase)exit(-1);L.elem = newbase;L.listize += LIST_INCREMENT;}ElemType* p;p = L.elem + (i - 1);p = &(L.elem[i - 1]);for (ElemType* q = L.elem + (L.length - 1); q >= p; q--)*(q + 1) = *q;*p = e;L.length += 1;return OK;
}
void PrintAll(SqList L, void print(ElemType)) {for (size_t i = 0; i < L.length; i++) {print(L.elem[i]);}printf("\n");
}
Status GetElem(SqList L, int i, ElemType& e) {// i必须大于0 ,小于等于 L.length if (i<1 || i> L.length)return ERROR;e = L.elem[i - 1]; //e = *(L.elem + i - 1);	return OK;
}void PrintOne(ElemType e) {printf("%d ", e);
}Status ListDelete(SqList& L, int i, ElemType& e) {// i必须大于0 ,小于等于 L.length if (i<1 || i> L.length)return ERROR;e = L.elem[i - 1]; //e = *(L.elem + i - 1);	for (ElemType* p = L.elem + i - 1; p < L.elem + L.length; p++)*p = *(p + 1);L.length--;return OK;
}void DestroyList(SqList& L) {free(L.elem);L.length = 0;L.listize = 0;
}size_t LocateElem(SqList L, ElemType e){	for (size_t i = 0; i < L.length; i++) {if (L.elem[i] == e) {return i + 1;}}return 0;
}

#include <stdio.h>
#include <stdlib.h>
#include "mylist.h"// a = a U b
void unionSet(SqList& a, SqList b);void unionSet(SqList& a, SqList b) {//遍历bfor (size_t i = 1; i <= b.length; i++) {//i代表位置,并非下标(从1开始),length不代表下标ElemType e;GetElem(b, i,e);//询问 e 是否在 a集合if (!LocateElem(a, e)) {ListInsert_Sq(a, a.length+1, e);}}
}int main() {//2024-5-5SqList a, b;InitList_Sq(a);InitList_Sq(b);ListInsert_Sq(a, 1, 1);ListInsert_Sq(a, 2, 2);ListInsert_Sq(a, 3, 3);ListInsert_Sq(a, 4, 4);ListInsert_Sq(a, 5, 5);ListInsert_Sq(b, 1, 1);ListInsert_Sq(b, 2, 3);ListInsert_Sq(b, 3, 9);ListInsert_Sq(b, 4, 10);puts("A原来:");PrintAll(a,PrintOne);puts("B原来:");PrintAll(b, PrintOne);unionSet(a,b);puts("A现在:");PrintAll(a, PrintOne);return 0;
}int main1() { //2024-5-4SqList L;if (!InitList_Sq(L)) {printf("线性表建立失败,程序退出。");exit(-1);}ListInsert_Sq(L,1,100);ListInsert_Sq(L, 2, 101);ListInsert_Sq(L, 3, 102);ListInsert_Sq(L, 4, 103);ListInsert_Sq(L, 5, 104);ListInsert_Sq(L, 6, 105);ListInsert_Sq(L, 7, 106);PrintAll(L,PrintOne);char e;GetElem(L, 2,e);PrintOne(e);printf("\n");ListDelete(L,2,e);puts("现在的列表:");PrintAll(L,PrintOne);printf("刚才删除的元素是:\n");PrintOne(e);printf("\n");return 0;
}

相关文章:

C++ 顺序线性表的功能

顺序线性表的功能 //头文件 #pragma once#define LIST_INIT_SIZE 50 #define LIST_INCREMENT 20 #define OK 1 #define ERROR 0typedef int Status;typedef char ElemType;typedef struct list_ {ElemType* elem;int length;int listize; }SqList;// 1 初始化 函数 Status…...

C++面经 每日一问(二)

将引用作为函数参数有什么影响&#xff1f; 传递引用给函数与传递指针的效果相同。这意味着被调函数中的形参变量将成为主调函数中实参的别名&#xff0c;从而直接对目标对象进行操作。相比于传递指针&#xff0c;这种方式消除了对指针的繁琐操作&#xff0c;提高了代码的清晰性…...

最新版Ceph( Reef版本)块存储简单对接k8s

当前ceph 你的ceph集群上执行 1.创建名为k8s-rbd 的存储池 ceph osd pool create k8s-rbd 64 642.初始化 rbd pool init k8s-rbd3 创建k8s访问块设备的认证用户 ceph auth get-or-create client.kubernetes mon profile rbd osd profile rbd poolk8s-rbd部署 ceph-rbd-csi c…...

Vue生命周期都有哪些?

定义 Vue的生命周期就是实例从创建到销毁的一个过程&#xff0c;即从创建、初始化数据、编译模板、挂载Dom($el)->渲染、更新->渲染&#xff0c;卸载等一系列的过程。el是挂载点如<div id"app"></div>。 Vue的生命周期分为八个阶段 1.beforeCreate…...

景源畅信:个人抖音小店怎么开通?

在数字时代的浪潮中&#xff0c;个体创业已不再是遥不可及的梦想。特别是随着短视频平台的崛起&#xff0c;抖音不仅成为人们娱乐消遣的新宠&#xff0c;更是众多创业者眼中的“新大陆”。你是否也曾憧憬过在抖音上开一家属于自己的小店?那么&#xff0c;如何开通个人抖音小店…...

python学习笔记B-16:序列结构之字典--字典的遍历与访问

下面是字典的访问和遍历方法&#xff1a; d {10:"hello",20:"python",30:"world"} print(d[10],"--",d[20],"--",d[30]) print(d.get(10)) print("以上两种访问方式的区别是&#xff0c;d[key]若键是空值&#xff0c…...

《QT实用小工具·四十八》趣味开关

1、概述 源码放在文章末尾 该项目实现了各种样式的趣味开关&#xff1a; 1、爱心形状的switch开关&#xff0c;支持手势拖动、按压效果 2、线条样式的3种开关 项目demo演示如下所示&#xff1a; 使用方式&#xff1a; 1、sapid_switch文件夹加入工程&#xff0c;.pro文件中…...

QML进阶(十四) Model-View-Delegate视图框架

文章目录 数据模型(Model)C++数据模型XmlListModelRepeater模型视图框架(View)ListViewTableViewGridViewPathViewMVC(Model-View-Controller)模式将视图系统拆分为模型、视图、控制器三部分,每个部分都相对独立职责单一。模型(model)负责管理视图的数据并对外提供服务。视图(…...

word:三线表的绘制【攻略】

word&#xff1a;三线表的绘制【攻略】 前言版权推荐word&#xff1a;三线表的绘制效果简单方法另外的方法 最后 前言 2024-5-7 18:25:08 以下内容源自《【攻略】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作者是CSDN日星月云 博客…...

嵌入式物联网系统软硬件基础知识大全(2)

接口技术 1. Flash存储器 (1)Flash存储器是一种非易失性存储器,根据结构的不同可以将其分为NOR Flash和NAND Flash两种。 (2)Flash存储器的特点: A、区块结构:在物理上分成若干个区块,区块之间相互独立。 B、先擦后写:Flash的写操作只能将数据位从1写成0,不能从…...

Origin拟合EIS(电化学阻抗谱),怎么出来圆圈

1.先导入数据&#xff0c;以点图的形式画出来 2.重要的一步Fitting&#xff0c;按照我这个一步一步来就行 3.将其中的Function选择为Elipse&#xff0c;然后点拟合至最佳条件 4.第三步做完就会发现圆圈已经出来了&#xff0c;然后点OK就行 5.搞定...

Android APP转成launcher

一、背景 使用场景&#xff0c;需要开机的时候&#xff0c;自动启动app&#xff0c;解决方案为将Android app转成 launcher app&#xff0c;可实现效果。 二、实现 在app入口activity 的配置文件&#xff08;AndroidManifest.xml&#xff09;对应位置&#xff0c;添加 <cat…...

【副本向】Lua副本逻辑

副本生命周期 OnCopySceneTick() 子线程每次心跳调用 --副本心跳 function x3323_OnCopySceneTick(elapse)if x3323_g_IsPlayerEnter 0 thenreturn; -- 如果没人进入&#xff0c;则函数直接返回endif x3323_g_GameOver 1 thenif x3323_g_EndTick > 0 thenx3323_CountDown…...

ROS机器人实用技术与常见问题解决

问题速查手册&#xff08;时实更新&#xff09;更加全面丰富的问题手册记录 1.机器人使用GPARTED挂载未分配空间 需要在图型界面下操作&#xff0c;建议使用no machine连接 安装gparted磁盘分区工具, sudo apt-get install gparted -y 启动软件 sudo gparted 点击磁盘/内存…...

Linux学习之IP协议

前言&#xff1a; 在学习IP协议i前&#xff0c;我们其实知道网络协议栈是一层层的&#xff0c;上层封装好之后就传给下层&#xff0c;对于我们正要学习到的TCP协议&#xff0c;在对数据进行封装之后&#xff0c;并不是直接就将数据进行传输&#xff0c;而是交给下一层网络层进…...

Python Dash库:一个Web应用只需几行代码

大家好&#xff0c;在数据科学领域&#xff0c;数据可视化是将数据以图形化形式展示出来&#xff0c;帮助我们更直观地理解数据。Python中有一个非常流行的数据可视化库叫做Dash&#xff0c;Dash以其简洁、高效和强大的功能而闻名&#xff0c;它允许开发者快速构建交互式Web应用…...

用Docker 创建并运行一个MySQL容器

可以在DockerHub官网上荡:mysql - Official Image | Docker Hub 指令是:docker pull mysql; 因为文件比较大可能时间比较长&#xff0c;我是跟着黑马的课走的 课程提供的有文件&#xff0c;我就用已有的资源了。 在tmp目录里放入mysql.tar包 然后cd进去 输入指令:docker lo…...

在Java中如何有效地处理内存泄露

在Java中&#xff0c;处理内存泄露有多种方法&#xff0c;以下是其中三种常见的方法及其原理和适用场景&#xff1a; ## 1. 合理使用垃圾回收机制 Java中的垃圾回收机制&#xff08;Garbage Collection&#xff0c;GC&#xff09;是一种自动化的内存管理技术&#xff0c;它可以…...

值得收藏!修复Windows 10/11中找不到输出或输入设备的五种方法

序言 这篇文章主要关注处理声音输出/输入设备未发现的问题。它提供了许多可行的方法,帮助了许多Windows用户。阅读以下内容以找到你的解决方案。 最近,我将Windows 10更新到21H2,发现我的音频无法工作。当我把鼠标放在任务栏上的声音图标(上面有一个十字图标)上时,它会…...

Slurm运行pytorch深度学习模型(小白版)

Slurm背景&#xff1a; Slurm 是一种开源的作业调度系统&#xff0c;它用于管理大型计算集群中的计算资源和作业。你可以把它想象成一个“交通管制员”&#xff0c;负责管理计算集群中的各种任务&#xff0c;确保它们按照用户设定的规则有序地执行。 Slurm 的主要功能包括&…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

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

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

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践

在 Kubernetes 集群中&#xff0c;如何在保障应用高可用的同时有效地管理资源&#xff0c;一直是运维人员和开发者关注的重点。随着微服务架构的普及&#xff0c;集群内各个服务的负载波动日趋明显&#xff0c;传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...