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;
}

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

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

相关文章

基于单片机的太阳能无线手机充电器的设计

摘 要:为了解决手机户外无法充电而不能正常使用的问题,设计一款基于单片机的便携式太阳能无线智能手机充电器,利用太阳能电池板将光能转换为电能,由降压稳压电路将电能存储于蓄电池中,通过无线电力传输模块将电能传输至手机终端,由降压稳压处理后给手机充电,并结合单片机…

在Ubuntu上搭建幻兽帕鲁服务器

简介 幻兽帕鲁是一款多人在线角色扮演游戏&#xff0c;玩家可以捕捉和训练各种各样的幻兽&#xff0c;并与其他玩家进行战斗和交易。如果您想拥有自己的幻兽帕鲁服务器&#xff0c;可以按照以下步骤在 Ubuntu 上进行搭建。 准备工作 在开始之前&#xff0c;您需要准备以下几…

代码随想录第52天|300.最长递增子序列 718. 最长重复子数组

300.最长递增子序列 300. 最长递增子序列 - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 动态规划之子序列问题&#xff0c;元素不连续&#xff01;| LeetCode&#xff1a;300.最长递增子序列_哔哩哔哩_bilibili 给你一个整数数组 nums &#xff0…

OPENAI中Semantic Kernel的优点和缺点

OPENAI中Semantic Kernel的优点和缺点 1. 引言 Semantic Kernel是OPENAI中的一项重要技术&#xff0c;它在自然语言处理和语义理解方面具有广泛的应用。本文将探讨Semantic Kernel的优点和缺点&#xff0c;并提出在项目中如何避免这些缺点的方法。 2. Semantic Kernel的优点…

multipass和multipassd命令的区别

multipassd通常是multipass服务的后台守护进程&#xff0c;它负责管理和控制虚拟机实例。 命令区别 例&#xff1a; multipass restart my-vm 这个命令用于重启Multipass中的虚拟机实例。例如有一个名为my-vm的虚拟机实例。 multipassd restart 这会重新启动Multipass后台…

Scroll生态项目Penpad,再获Presto Labs的投资

Penpad是Scroll生态的LaunchPad平台&#xff0c;其整计划像收益聚合器以及RWA等功能于一体的综合性Web3平台拓展&#xff0c;该平台在近期频获资本市场关注&#xff0c;并获得了多个知名投资者/投资机构的支持。 截止到本文发布前&#xff0c;Penpad已经获得了包括Scroll联合创…

了解 Postman:这个 API 工具的功能和用途是什么?

在软件开发中&#xff0c;经常听到 Postman 这个软件名。但其实很多新手开发者只知道这是软件开发常用的软件&#xff0c;并不知道实际是一个什么样工具&#xff0c;不知道具体的作用是什么。那今天就跟大家好好唠唠 Postman 这个软件。想要学习更多关于 Postman 的知识&#x…

Codigger:Web应用赋能的分布式操作系统让用户卓越体验

Codigger&#xff0c;作为一个分布式操作系统&#xff0c;其独特之处在于其采用的浏览器/服务器&#xff08;Browser/Server&#xff0c;简称B/S&#xff09;架构。这种架构的核心思想是&#xff0c;通过浏览器来进入工作界面&#xff0c;页面交互部分事务逻辑在前端&#xff0…

最小化蒙德城的旅行者队伍(巴士)

描述 在阳光明媚的一天&#xff0c;凯亚在蒙德城的风车塔下等待着前往狼的领域的旅行者。他于12:00抵达&#xff0c;并计划在此地逗留一整小时&#xff0c;直至12:59。 蒙德城有许多旅行者的车队&#xff0c;每个车队都有自己的出发时间表。 凯亚观察了这些车队的出发时间&a…

【Linux网络】PXE批量网络装机

目录 一、系统装机 1.1 三种引导方式 1.2 系统安装过程 1.3 四大重要文件 二、PXE 2.1 PXE实现原理 2.2 PXE手动搭建过程 2.3 kickstart配合pxe完成批量自动安装 一、系统装机 1.1 三种引导方式 硬盘光驱(U盘)网络启动 1.2 系统安装过程 加载boot loader加载启动安…

Autosar PNC网络管理配置-UserData的使用

文章目录 前言ComComSignalComIPdu CanNmSignal Mapping总结 前言 之前配置的网络管理报文中的data都由ComM管理&#xff0c;后面客户新增了需求&#xff0c;最后两个byte需要发送Wakeup Reason&#xff0c;本文记录一下相关配置的修改 Com ComSignal 之前配置的PN_TX&…

(第12天)【leetcode题解】151、反转字符串中的单词

目录 151、反转字符串中的单词题目描述思路代码本题反思 151、反转字符串中的单词 题目描述 给你一个字符串 s &#xff0c;请你反转字符串中单词的顺序。 单词是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的单词分隔开。 返回单词顺序颠倒且单词之间用单个…

Spring MVC:深入剖析与应用实践

Spring MVC&#xff1a;深入剖析与应用实践 文章目录 Spring MVC&#xff1a;深入剖析与应用实践一、引言二、Spring MVC概述三、Spring MVC核心组件四、Spring MVC工作流程五、Spring MVC的设计优势六、Spring MVC面临的挑战七、Spring MVC的应用实践八、Spring MVC的高级特性…

Actions和Mutations

在Vuex中&#xff0c;actions和mutations都是用来改变store中的状态的方法&#xff0c;它们之间的区别如下&#xff1a; Mutations&#xff1a;用于同步地修改state的方法。它们接收state作为第一个参数&#xff0c;并且可以接收额外的参数作为payload。Mutations应该是纯函数&…

Java 线程池 ( Thread Pool )的简单介绍

想象一下&#xff0c;你正指挥着一支超级英雄团队&#xff0c;面对蜂拥而至的敌人&#xff08;任务&#xff09;&#xff0c;不是每次都召唤新英雄&#xff08;创建线程&#xff09;&#xff0c;而是精心调配现有成员&#xff0c;高效应对。这就是Java线程池的魔力&#xff0c;…

Codeforces Round 942 (Div. 2) A-D1

题目&#xff1a; Codeforces Round 942 (Div. 2) D2有缘再补吧… A. Contest Proposal 题意 两个升序&#xff08;不降&#xff09;的序列a和b&#xff0c;可以在a的任意位置插入任意数&#xff08;要保持升序&#xff09;&#xff0c;使对任意i&#xff0c;有a[i] < b[…

28.leetcode---前K个高频单词(Java版)

题目链接: https://leetcode.cn/problems/top-k-frequent-words/description/ 题解: 代码: 测试:

LY/T 3131-2019 木质拼花地板检测

木质拼花地板是指通过单元设计&#xff0c;组拼成具有特定图案的木质地板&#xff0c;按照材料组分分为实木拼花地板&#xff0c;实木复合拼花地板和浸渍纸层压拼花地板。 LY/T 3131-2019 实木拼花地板测试项目 测试项目 测试标准 含水率 GB/T 15036.2 漆膜附着力 GB/T 1…

纯血鸿蒙APP实战开发——底部面板嵌套列表滑动案例

介绍 本示例主要介绍了利用panel实现底部面板内嵌套列表&#xff0c;分阶段滑动效果场景。 效果图预览 使用说明 点击底部“展开”&#xff0c;弹出panel面板。在panel半展开时&#xff0c;手指向上滑动panel高度充满页面&#xff0c;手指向下滑动panel隐藏。在panel完全展开…

自动引流获客软件的魅力

在数字化时代&#xff0c;企业之间的竞争愈发激烈。对于任何一家企业来说&#xff0c;如何有效地吸引潜在客户、提升品牌知名度和销售业绩成为了至关重要的课题。传统的营销手段虽然依旧有效&#xff0c;但随着互联网技术的发展&#xff0c;自动引流获客软件以其独特的魅力&…