实现顺序表各种基本运算的算法

实验一:实现顺序表各种基本运算的算法

一、实验目的与要求

目的:

领会顺序表存储结构和掌握顺序表中各种基本运算算法设计。

内容:

编写一个程序sqlist.cpp,实现顺序表的各种基本运算和整体建表算法(假设顺序表的元素类型ElemType为char),并在此基础上设计一个主程序,完成如下功能:

(1)初始化顺序表L。

(2)依次插入a、b、c、d、e元素。

(3)输出顺序表L。

(4)输出顺序表L长度

(5)判断顺序表工是否为空。

(6)输出顺序表工的第3个元素

(7)输出元素a的位置。

(8)在第4个元素位置上插入f元素

(9)输出顺序表工。

(10)删除顺序表L的第3个元素。

(11)输出顺序表工。

(12)释放顺序表工。

二、实验类型

C++算法编程

三、实验原理及说明

线性表的顺序存储结构是把线性表中的所有元素按照其逻辑顺序依次存储到从计算机存储器中指定存储位置开始的一块连续的存储空间中,线性表的顺序存储结构简称为顺序表(sequentiallist)。

在C++语言中,数组可以满足顺序表的存储结构,所以我们使用C++语言进行编程,实现线性表的顺序存储结构

四、实验主要仪器设备和材料

序 号

名 称

主要用途

1

电脑

打开软件

2

Dev c++

编写代码,运行代码

五、实验内容和步骤

根据《教程》中2.2节的算法得到sqlist.cpp程序,其中包含如下函数。

InitList(SqList *&L):初始化顺序表L。

DestroyList(SqList *L):释放顺序表。

ListEmpty(SqList *L):判断顺序表L是否为空表

ListLength(SqList *L):返回顺序表的元素个数。

DispList(SqList *L):输出顺序表L。

。GetElem(SqList *L,inti,ElemType&e):获取顺序表L中第i个元素LocateElem(SqList *L,ElemTypee):在顺序表L中查找元素e。

ListInsert(SqList *&L,inti,ElemTypee):在顺序表L中第i个位置上插入元素e。

ListDelete(SqList *&L,inti,ElemType &e):从顺序表L中删除第i个元素。

对应的程序代码如下(设计思路详见代码中的注释):

步骤:

创建一个sqList.cpp文件,将函数写入文件中

创建一个main.cpp文件,编写主函数,对函数进行验证

实验内容:

1.编写sqList.cpp

#include <iostream>

using namespace std;



#define MaxSize 50                                          //线性表最大长度

typedef char ElemType;                                  //定义类型

typedef struct {                                         //定义数据结构

        ElemType data[MaxSize];                       //存元素

        int length;                                                  //长度

} SqList;





//整体建立顺序表

void CreateListR(SqList *&L, ElemType a[],int n) {

        L = new SqList;                                        //为L分配空间

        for (int i = 0; i < n; i ++) {

                 L->data[i] = a[i];

        }

        L->length = n;

}



//初始化顺序表

void InitList(SqList *&L) {

        L = new SqList;

        L->length = 0;

}

//释放顺序表

void DestroyList(SqList *&L) {

        delete L;

}

//判断顺序表是否为空

bool ListEmpty(SqList *L) {

        return (L->length == 0);

}

//返回顺序表L的元素个数

int ListLength(SqList *L) {

        return (L->length);

}

//输出顺序表L

void DispList(SqList *L) {

        for (int i= 0; i < L->length; i++) {

                 cout << L->data[i] << " ";

        }

        cout << endl;

}

//求线性表中的第i个元素值

bool GetElem(SqList *L, int i , ElemType &e) {

        if (i < 1 || i > L->length)

                 return false;

        e = L->data[i - 1];

        return true;

}

//在顺序表L中查找元素e

int LocateElem(SqList *L, ElemType e) {

        int i = 0;

        while (i < L->length && L->data[i] != e) {

                 i++;

        }

        if (i >= L->length) {

                 return 0;

        }

        else return i + 1;

}

//在顺序表L中第i个位置上插入元素e.

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--) {

                 L->data[j] = L->data[j - 1];

        }

        L->data[i] = e;

        L->length++;

        return true;

}

//从顺序表L中删除第i个元素

bool ListDelete(SqList *&L, int i, ElemType &e) {

        int j;

        if (i < 1 || i > L->length) {

                 return false;

        }

        for (int j = i - 1; j < L->length; j++) {

                 L->data[j] = L->data[j + 1];

        }

        L->length--;

        return true;

}

2.编写main.cpp

#include "sqList.cpp"



int main() {

        SqList *L;

        ElemType e;

        cout << "顺序表的基本运算如下:" << endl;

        cout << " (1)初始化顺序表L" << endl;

        InitList(L);

        cout << " (2)依次插入a,b,c,d,e元素" << endl;

        ListInsert(L, 1, 'a');

        ListInsert(L, 2, 'b');

        ListInsert(L, 3, 'c');

        ListInsert(L, 4, 'd');

        ListInsert(L, 5, 'e');

        cout << " (3)输出顺序表L:";

        DispList(L);

        cout << " (4)顺序表L长度:" << ListLength(L) << endl;

        cout << " (5)顺序表L为" << (ListEmpty(L) ? "空":"非空")<< endl;

        GetElem(L, 3, e);

        cout << " (6)顺序表L的第三个元素:" << e <<endl;

        cout << " (7)元素a的位置:" << LocateElem(L,'a') << endl;

        cout << " (8)在第四个元素位置上插入f元素" << endl;

        ListInsert(L, 4, 'f');

        cout << " (9)输出顺序表L:";

        DispList(L);

        cout << " (10)删除L的第三个元素" << endl;

        ListDelete(L, 3, e);

        cout << " (11)输出顺序表L:" ;

        DispList(L);

        cout << " (12)释放顺序表L" << endl;

        DestroyList(L);

        return 1;

}

运行结果:

六、实验小结与分析

此次实验通过实践的方法,实现了使用编程语言对顺序表的实现,顺序表直接将线性表的逻辑结构映射到存储结构上,既便于理解,又容易实现。使我了解了线性表的顺序存储结构在C++中如何实现的,使我对线性表的顺序存储结构更加了解。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RocketMq源码解析四:生产者Producer启动

一、主要接口和类 生产者服务核心接口和类的关系如下图所示&#xff1a; MQProducer是生产者解耦&#xff0c;这里找几个有代表性的方法 // 同步发送消息 SendResult send(final Message msg) throws MQClientException, RemotingException, MQBrokerException,InterruptedExce…

qt 布局学习笔记

目录 qt下载地址&#xff1a; widget 宽高 管理信息列表源码 c版&#xff1a; pro文件&#xff1a; qt 设置水平布局&#xff0c;里面有两个按钮&#xff0c;每个按钮就变的很宽&#xff0c;怎么设置按钮的精确位置 设置固定大小&#xff1a; 使用弹性空间&#xff08;…

【网络安全】勒索软件ShrinkLocker使用 windows系统安全工具BitLocker实施攻击

文章目录 威胁无不不在BitLocker 概述如何利用BitLocker进行攻击如何降低影响Win11 24H2 装机默认开启 BitLocker推荐阅读 威胁无不不在 网络攻击的形式不断发展&#xff0c;即便是合法的 Windows 安全功能也会成为黑客的攻击工具。 卡巴斯基实验室专家 发现 使用BitLocker的…

C++质数的那些事(判断指数、区间筛质数、互质等等)

质数的定义&#xff1a;若一个正整数除了1和它自身之外不能被任何自然数整除&#xff0c;则该数称为质数&#xff0c;也叫素数。否则为合数。 质数的性质&#xff1a;质数的分布较为稀疏&#xff0c;对于一个足够大的数S&#xff0c;不超过S的质数大约有个&#xff0c;也就是说…

渗透测试的测试流程与注意事项

软件测试流程 渗透测试是一种重要的软件测试技术&#xff0c;通过对系统进行模拟攻击和漏洞评估&#xff0c;帮助组织发现和修复潜在的安全风险&#xff0c;提高系统的安全性和稳定性。在进行渗透测试时&#xff0c;需要注意合法授权、技术能力、安全意识和报告质量等方面的问…

简单多状态 dp 问题

11. 按摩师&#xff08;easy&#xff09; 解法&#xff08;动态规划&#xff09;&#xff1a; 图解&#xff1a; C 算法代码&#xff1a; class Solution { public:int massage(vector<int>& nums) {// 1. 创建⼀个 dp 表// 2. 初始化// 3. 填表// 4. 返回值int n n…

用C#调用SAP 的WebServices接口

文章目录 用C#调用SAP 的WebServices接口创建C#的项目添加窗体添加引用在表单的装载事件里编写代码运行结果SAP的RFC函数 用C#调用SAP 的WebServices接口 创建C#的项目 添加窗体 添加引用 在表单的装载事件里编写代码 using System; using System.Collections.Generic; using …

在Nano上部署yolov5

确认镜像版本为JetPack4.4.1&#xff08;L4T 32.4.4&#xff09;以上版本 下载链接下载pytorchnvidia docker镜像&#xff08;pytorch1.6torchvision0.7.0&#xff09;yolov5opencv4.4.0 1. 在已经部署了镜像的机器上获取镜像   1.1 获取镜像名     docker images   …

ssm招聘信息管理系统-计算机毕业设计源码78049

摘 要 由于数据库和数据仓库技术的快速发展&#xff0c;招聘客户管理系统建设越来越向模块化、智能化、自我服务和管理科学化的方向发展。招聘客户系统对处理对象和服务对象&#xff0c;自身的系统结构&#xff0c;处理能力&#xff0c;都将适应技术发展的要求发生重大的变化。…

265 基于matlab的粒子群优化分数阶灰色预测模型

基于matlab的粒子群优化分数阶灰色预测模型&#xff0c;以误差结果为目标进行预测&#xff0c;输出多个预测结果。并输出迭代曲线。程序已调通&#xff0c;可直接运行。 265 分数阶灰色预测 粒子群优化算法 - 小红书 (xiaohongshu.com)

Mac | macOs系统安装Monuty解决外接u盘ntfs读写问题

问题 mac电脑的macOs系统无法将文件读写入外接u盘或硬盘中&#xff1b; 解决方案 安装Monuty 官网&#xff1a;mounty官网 下载软件 安装其他配置 macbook:~ uwe$ brew install --cask macfuse macbook:~ uwe$ brew install gromgit/fuse/ntfs-3g-mac macbook:~ uwe$ brew…

移动云主机ECS搭建Kubernetes集群:详细步骤与指南

目录 云主机 ECS&#xff1a;云计算的强大引擎什么是云主机ECS&#xff1f;为何选择云主机ECS&#xff1f; 使用移动云ECS进行Kubernetes集群搭建1. 环境准备2. 安装步骤2.1 在每一个节点上执行的操作2.1.1 系统准备2.1.2 安装Docker2.1.3 安装Kubernetes的安装组件 2.2 在Mast…

MyBatis中的Where标签:提升你的SQL查询效率

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 理解MyBatis的Where标签 MyBatis是一款优秀的持久层框架&#xff0c;它提供了许多强大的标签来帮助编写更优雅、高效的SQL语句。其中&#xff0c;<where>标签是使用频率极高的一个&#xff0c;它能够自动处理…

自反馈 Transformer:一种针对真实世界胰腺神经内分泌肿瘤数据的多标签诊断模型

文章目录 Self-feedback Transformer: A Multi-label Diagnostic Model for Real-World Pancreatic Neuroendocrine Neoplasms Data摘要方法实验结果 Self-feedback Transformer: A Multi-label Diagnostic Model for Real-World Pancreatic Neuroendocrine Neoplasms Data 摘…

录屏软件免费版有哪些?3款软件实现一站式录制

录屏软件免费版有哪些&#xff1f;在数字化时代的浪潮中&#xff0c;录屏软件已然成为现代生活与工作的得力助手。它们不仅帮助我们轻松捕捉屏幕上的精彩瞬间&#xff0c;还提供了丰富的编辑和分享功能。无论是教学演示、游戏直播还是日常记录&#xff0c;这些软件都能满足用户…

【方法】ZIP压缩文件的密码如何设置和取消?

ZIP是一种常见的压缩文件格式&#xff0c;今天来分享一下&#xff0c;ZIP压缩文件如何设置密码保护&#xff0c;以及如何取消密码&#xff0c;不清楚的小伙伴一起来看看吧&#xff01; 设置ZIP文件密码&#xff1a; 想要给ZIP压缩包设置密码&#xff0c;需要用到支持ZIP格式的…

前端开发工程师——webpack

一.环境准备 npm init -y npm i webpack webpack-cli -D 打包命令 npx webpack ./src/main.js --modedevelopment //development开发模式 //production生产模式 npx webpack 直接运行就行 二.加载器loader 在less/stylus/css/sass/images中添加适当的样式 例如&#xff1…

使用MyBatis进行批量新增更新操作 ON CONFLICT

1.数据库增加uniques 2.mybatis <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace"co…

社交网络安全:保护用户数据的Facebook实践

在数字化时代&#xff0c;社交网络安全成为了人们关注的焦点之一。作为全球最大的社交平台之一&#xff0c;Facebook一直在致力于保护用户数据安全和隐私。本文将探讨Facebook在社交网络安全方面的实践&#xff0c;以及它所采取的措施来保护用户数据的安全性。 1. 数据加密与隐…

Mysql搭建主从同步,docker方式(一主一从)

服务器&#xff1a;两台Centos9 用Docker搭建主从 使用Docker拉取MySQL镜像 确保两台服务器都安装好了docker 安装docker请查看&#xff1a;Centos安装docker 1.两台服务器都先拉取mysql镜像 docker pull mysql 2.我这里是在 /opt/docker/mysql 下创建mysql的文件夹用来存…