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

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

一、实验目的与要求

目的:

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

内容:

编写一个程序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);}//输出顺序表Lvoid 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中查找元素eint 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++中如何实现的,使我对线性表的顺序存储结构更加了解。

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

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

相关文章

计组期末必考大题

一.寻址方式详解 1.直接寻址 指令地址码直接给到操作数所在的存储单元地址 2.间接寻址 A为操作数EA的地址 3.寄存寻址 4.寄存器间接寻址 5.变址寻址 6.基地址寻址 7.小结 二、指令周期详解 一、基本概念 指令周期:去除指令并执行指令所需要的时间指令周期:由若干个CPU周…

C++/ cuda kernel中的模版元编程识别 kernel 模版的数据类型

1&#xff0c;模版元编程 模板元编程是一种利用 C 模板系统在编译时进行计算和生成代码的技术。其原理基于模板特化、递归、模板参数推导等特性&#xff0c;通过模板实例化和展开&#xff0c;在编译时生成代码&#xff0c;以实现在编译期间进行复杂计算和代码生成的目的。 2&am…

前端笔记-day07

学成在线网站 文章目录 效果图代码展示index.htmlindex.cssbase.css 效果图 代码展示 index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-w…

键盘盲打是练出来的

键盘盲打是练出来的&#xff0c;那该如何练习呢&#xff1f;很简单&#xff0c;看着屏幕提示跟着练。屏幕上哪里有提示呢&#xff1f;请看我的截屏&#xff1a; 截屏下方有8个带字母的方块按钮&#xff0c;这个就是提示&#xff0c;也就是我们常说的8个基准键位&#xff0c;我…

spring boot多模块项目中父项目与子项目的连接

如题&#xff0c;spring boot多模块项目中&#xff0c;父项目在本级的pom.xml中&#xff0c;引入子项目&#xff0c;类似代码如下&#xff1a; ruoyi-modules/pom.xml&#xff1a; <modules><module>ruoyi-system</module><module>ruoyi-gen</modu…

【linux】详解vim编辑器

基本指令 【linux】详解linux基本指令-CSDN博客 【linux】详解linux基本指令-CSDN博客 vim的基本概念 vim有很多模式&#xff0c;小编只介绍三种就能让大家玩转vim了&#xff0c; 分别是&#xff1a; 正常/普通/命令模式 插入模式 末行/底行模式 命令模式 控制屏幕光标的…

【C++初阶】--- C++入门(上)

目录 一、C的背景及简要介绍1.1 什么是C1.2 C发展史1.3 C的重要性 二、C关键字三、命名空间2.1 命名空间定义2.2 命名空间使用 四、C输入 & 输出 一、C的背景及简要介绍 1.1 什么是C C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&…

Excel 下划线转驼峰

Excel 下划线转驼峰 LOWER(LEFT(SUBSTITUTE(PROER(A1),"_",""),1))&RIGHT(SUBSTITUTE(PROPER(A1),"_",""),LEN(SUBSTITUTE(PROPER(A1),"_",""))-1)

微博:一季度运营利润9.11亿元,经营效率持续提升

5月23日&#xff0c;微博发布2024年第一季度财报。一季度微博总营收3.955亿美元&#xff0c;约合28.44亿元人民币&#xff0c;超华尔街预期。其中&#xff0c;广告营收达到3.39亿美元&#xff0c;约合24.39亿元人民币。一季度调整后运营利润达到1.258亿美元&#xff0c;约合9.1…

【论文极速读】 LLava: 指令跟随的多模态大语言模型

【论文极速读】 LLava: 指令跟随的多模态大语言模型 FesianXu 20240331 at Tencent WeChat Search Team 前言 如何将已预训练好的大规模语言模型&#xff08;LLM&#xff09;和多模态模型&#xff08;如CLIP&#xff09;进行融合&#xff0c;形成一个多模态大语言模型&#xf…

【MATLAB】基于EMD-PCA-LSTM的回归预测模型

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 1 基本定义 基于EMD-PCA-LSTM的回归预测模型是一种结合了经验模态分解&#xff08;Empirical Mode Decomposition, EMD&#xff09;、主成分分析&#xff08;Principal Component Analysis, PCA&#xff09;和长短期记忆…

redis集群不允许操作多个key解决方案、redis key负载均衡方案

前提 在cluster redis 中进行同一个命令处理不同的key会报错:CROSSSLOT Keys in request dont hash to the same slot,例如: 此示例使用sdiff 命令对pool_1与pool_2进行diff操作。 那么我们在业务场景中就需要将集群redis中的不同key进行操作,我们该如何处理呢? 本次的…

CSS单行、同行文本左右对齐

再项目需求中&#xff0c;UI小姐姐常常要考虑项目的排版样式更简洁高级&#xff0c;常常会在项目设置内容或者字体两端对齐的效果&#xff0c;比如&#xff0c;在做表单时我们经常遇到让上下两个字段对齐的情况&#xff0c;比如姓名&#xff0c; 手机号码&#xff0c; 出生地等…

0406 组合放大电路

组合放大电路 共射-共基放大电路共集-共集放大电路 4.6.1 共射—共基放大电路 4.6.2 共集—共集放大电路 共射-共基放大电路 共集-共集放大电路 (a) 原理图 (b)交流通路 T1、T2构成复合管&#xff0c;可等效为一个NPN管

Docker搭建mysql性能测试环境

OpenEuler使用Docker搭建mysql性能测试环境 一、安装Docker二、docker安装mysql三、测试mysql连接 一、安装Docker 建立源文件vim /etc/yum.repos.d/docker-ce.repo增加内容[docker-ce-stable] nameDocker CE Stable - $basearch baseurlhttps://repo.huaweicloud.com/docker…

OpenAI、微软、智谱AI 等全球 16 家公司共同签署前沿人工智能安全承诺

人工智能&#xff08;AI&#xff09;的安全问题&#xff0c;正以前所未有的关注度在全球范围内被讨论。 日前&#xff0c;OpenAI 联合创始人、首席科学家 Ilya Sutskever 与 OpenAI 超级对齐团队共同领导人 Jan Leike 相继离开 OpenAI&#xff0c;Leike 甚至在 X 发布了一系列…

webpack5零基础入门-15样式兼容性问题处理

1.下载相关依赖 npm i postcss-loader postcss postcss-preset-env -D 2.在webpack.config.js中配置 注意&#xff1a;postcss-loader要在css-loader后面配置 3.写一个flex布局&#xff0c;flex是存在一定的兼容性问题的 4.打包 可以看到打包后未被处理 1.下载相关依赖 np…

YOLOv8绘制map曲线图

yolov8源码绘制的map曲线图不够清晰&#xff0c;python代码绘制的曲线图导入word之后清晰度也不够高&#xff0c;所以选择使用matlab来绘制曲线图&#xff0c;matlab可以直接复制图窗到word中&#xff0c;在转换成pdf也不会失真。点击编辑&#xff0c;复制图窗即可复制到word中…

C - Sigma Problem(AtCoder Beginner Contest 353)

题目的链接: C - Sigma Problem (atcoder.jp) 题目&#xff1a; 样例&#xff1a; 题目大致含意: 给你n个数&#xff0c;让你对这n个数进行操作&#xff0c;比如当前是第i个&#xff0c;那么让a[i] 和 后面的每个数进行相加, 例如a[i] a[i 1] 注意的是a[i] a[i 1]的结果…

linux的用户管理

新建用户&#xff1a;1.useradd 2.passwd 完成的操作&#xff1a; (1)/etc/passwd添加一行 (2)/etc/shadow添加一行 (3)/etc/group添加一行 (4)创建用户家目录 (5)创建用户邮件文件 例&#xff1a;创建用户jerry&#xff0c;要求: uid:777&am…