数据结构——顺序表基本操作的实现(初始化、取值、查找、插入)

一、线性表与顺序表的概述

线性表的数据元素的逻辑特征是线性的,是一种典型的线性结构。这样的结构可以借鉴数组,如数组a[10]中,a[1]前一定是a[0],a[1]后一定是a[2],首结点(a[0])前面无元素,尾结点(a[9])后面无节点。

顺序表表示数据元素不仅在逻辑上线性,并且存储位置也是线性的。逻辑线性如上述例子所示,而数据元素的存储位置线性可解释为:当数组a[10]的数据类型为int(int型占4个字节),此时假设a[0]的初始地址为0x0000 0000,则可以直接推出a[1]的地址为0x0000 0004……a[4]的地址为0x0000 0010。

二、顺序表基本操作的实现

1、头文件

#include <stdlib.h>
#include <stdio.h>
#include <iostream>using namespace std;		//显示cout未定义,需要加上这句

2、宏定义

#define MaxSize		100
#define OK			1
#define ERROR		0
#define TRUE		1
#define FALSE		0
#define INFEASIBLE	-1
#define OverFlow	-2
typedef int ElemType;
typedef int status;

3、结构体定义

typedef struct
{//ElemType elem[MaxSize];		//数组表示(静态分配)ElemType *elem;			        //指针表示(动态分配)int length;
}SqList;

4、相关操作函数

(1)初始化顺序表

/* 初始化顺序表 */
status InitList(SqList &L)
{L.elem = (ElemType*)malloc(sizeof(ElemType) * MaxSize);		//为顺序表分配存储空间if (!L.elem) exit(OVERFLOW);								//存储分配失败退出L.length = 0;												//空表长度为0return OK;
}

(2)取值

/* 取值:将顺序表中第i个元素的值赋给e */
status GetElem(SqList &L, int i, ElemType &e)
{if (i < 1 || i>100) return ERROR;e = L.elem[i - 1];return OK;
}

(3)查找顺序表中元素

/* 查找e位于顺序表L中的位置 */
status LocateElem(SqList L, ElemType e)
{int i = 0;for (int i = 0; i < L.length; i++){if (L.elem[i] == e){return i + 1;}}return ERROR;
}

(4)删除元素

/* 删除元素,若要将删除的元素保存起来,则添加形参ElemType e */
status ListDelete(SqList &L, int i)
{if (i<1 || i>L.length) return ERROR;for (int j = i; j <= L.length - 1; j++){L.elem[j - 1] = L.elem[j];}L.elem[L.length - 1] = 0;				//将最后一个元素清零L.length--;								//表长-1return OK;
}

(5)打印顺序表中所有元素

/* 打印顺序表中所有元素 */
status ShowListElem(SqList L)
{for (int i = 0; i < L.length; i++){cout << L.elem[i] << " ";}cout << " " << endl;return OK;
}

(6)插入元素

/* 插入元素 */
status ListInsert(SqList &L, int i, ElemType e)
{if (i<1 || i>L.length+1) return ERROR;		if (L.length == MaxSize) return ERROR;for (int j = L.length-1; j >= i - 1; j--){L.elem[j + 1] = L.elem[j];}L.elem[i - 1] = e;L.length++;return OK;
}

 (7)其他函数

/* 销毁已存在的顺序表若分配存储时用new,则对应用delete;若采用malloc,则用free。
*/
status ListDestroy(SqList &L)
{free(L.elem);return OK;
}
/* 清空顺序表 */
status ListClear(SqList &L)
{L.length = 0;return OK;
}
/* 顺序表是否为空 */
status IsEmpty(SqList &L)
{if (!L.length) return TRUE;else return FALSE;
}
/* 顺序表的长度 */
status ListLength(SqList &L)
{return L.length;
}

(8)main 

int main(void)
{int a[5] = { 1,2,4,5,6 };SqList L;InitList(L);cout << "顺序表的初始长度为:" << L.length << endl;L.elem = a;L.length = 5;ShowListElem(L);cout << "存入数据后,顺序表的长度为:" << L.length << endl;int b = 0;				//GetElem中将顺序表中的第i个元素赋给bint Location = 0;		//表示c位于顺序表的位置int c = 5;				//LocateElem在顺序表中定位cGetElem(L, 3, b);cout << "未操作时,取出值为:" << b << endl;ListInsert(L, 3, 3); GetElem(L, 3, b);cout << "插入3之后,取出值为:" << b << endl;ShowListElem(L);cout << "插入3之后,顺序表长度为:" << L.length << endl;Location = LocateElem(L, c);cout << "6位于顺序表的位置:" << Location << endl;ListDelete(L, 3);GetElem(L, 3, b);cout << "删除3之后,取出值为:" << b << endl;cout << "删除3之后,顺序表长度为:" << L.length << endl;Location = LocateElem(L, c);cout << "6位于顺序表的位置:" << Location << endl;ListClear(L);cout << "清空链表后,顺序表长度为:" << L.length << endl;return 0;
}

三、现象及问题

1、现象

2、问题

(1)为什么有时候用引用&,有时候却不用呢?

答:引用是C++的语法,运用引用时,表示在该函数中形参变化,实参也会随之变化,同指针效果一致。简单说就是,当你认为在函数中需要改变传入函数中参数的值时,就可以利用引用。 

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

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

相关文章

java医院管理系统源码(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的医院管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 医院管理系统的主要使用者分…

VR法治教育展厅互动体验突破了地域限制

VR全景互动展厅搭建编辑器以其卓越的特点、强大的功能及实际应用中的显著优势&#xff0c;成为企业级VR应用的得力助手。这款软件不仅能够制作逼真的虚拟场景&#xff0c;更能让用户沉浸其中&#xff0c;体验前所未有的真实感。 它拥有高度逼真的视觉效果&#xff0c;采用先进的…

智能单款计划助力品牌利润增长

零售品牌若要在激烈的市场竞争中胜出&#xff0c;季中单款的管理无疑是商品生命周期管理的核心环节之一。而单款计划的制定&#xff0c;首先依赖于对爆款、平销及滞销产品的敏锐洞察。一个利润现象不得不引起我们的关注&#xff1a;爆款产品的销售&#xff0c;往往成为拉动品牌…

svix - webhooks

文章目录 一、关于 SvixClient Library Overview与 Svix 托管服务的区别 二、运行服务器1、部署1.1 Docker1) 使用 Docker Compose2) 独立容器 1.2 预编译的二进制文件1.3 从源代码构建 2、运行时依赖项3、Redis/Valkey 注意事项持久性 Eviction 政策4、服务器配置4.1 配置文件…

express.js--生成token(二)

主要作用是访问路由接口时&#xff0c;生成身份权限信息 下载依赖 npm i express-jwt npm i jsonwebtoken 配置管理 config/index.js module.exports {app: {port: process.PORT || 3000,//jwt密钥jwtSecret: jwtSecret,//token过期时间expiresIn: 60 * 60 * 24,} } con…

从零开始:如何集成美颜SDK和优化美颜接口

今天&#xff0c;小编将从零开始&#xff0c;详细讲解如何集成SDK并优化美颜接口。 一、选择合适的美颜SDK 评估SDK的功能 在评估过程中&#xff0c;可以通过阅读官方文档、查看示例代码以及实际测试来确定SDK是否符合需求。 兼容性和性能 确保其支持你开发的应用平台&…

【代码随想录算法训练营第37期 第二十一天 | LeetCode530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先】

代码随想录算法训练营第37期 第二十一天 | LeetCode530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先 一、530.二叉搜索树的最小绝对差 解题代码C&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* …

【网络】高级IO(select||poll||epoll)

基础引入 应用层read&&write的时候&#xff0c;把数据从用户层写到操作系统&#xff0c;本质是拷贝函数。read时候如果缓冲区没有数据&#xff0c;那么就要等待数据才能读取&#xff0c;因此IO等待拷贝&#xff0c;要进行拷贝&#xff0c;必须等待读写事件就绪。高效I…

成长之路Flutter中的TextField组件

TextField组件本身具备多种属性&#xff0c;支持很多参数设置来实现不同样式效果。 TextField组件可直接上手使用&#xff0c;但默认样式和输入规则并不一定是需求开发中想要的&#xff08;实话说默认样式并不好看&#xff09;。下面就通过Flutter TextField组件属性介绍来自定…

Android15 Beta更新速览

Android15 Beta更新速览 前台服务变更 前台服务使应用保持活动状态&#xff0c;以便它们可以执行关键且对用户可见的操作&#xff0c;通常以牺牲电池寿命为代价。在 Android 15 Beta 2 中&#xff0c;dataSync 和 mediaProcessing 前台服务类型现在具有约 6 小时的超时时间&a…

青春旅行家:大学生旅游创业的新星

在青春的岁月里&#xff0c;我们怀揣着梦想&#xff0c;渴望探索世界的每一个角落。对于普通高校的大学生而言&#xff0c;毕业季不仅是人生中的一次重要转折&#xff0c;更是实现梦想、放飞自我的绝佳时机。在这个特殊的时刻&#xff0c;一群年轻的大学生创业者凭借他们的智慧…

内网安全--隧道技术-CS上线本地

免责声明:本文仅做技术交流与学习...请勿非法搞破坏... ---隧道技术:硬刚网络协议,(你不让我走我偏走!) 解决不出网协议上线的问题&#xff08;利用出网协议进行封装出网&#xff09; 代理协议&#xff1a; SOCKS4/5 代理软件&#xff1a; SocksCap Proxifier ProxyChains(…

YOLOv8改进 | 融合模块 | 用Resblock+CBAM卷积替换Conv【轻量化网络】

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 在目标检测领域内,尽管YOLO系列的算法傲视群雄,但在某些方面仍然存在改进的空间。在YOLOv8提取特征的时候,由于卷积的缘故,会导致很多信息的丢失。而凯明大神的神作resnet可以减少信息的丢失。本文给大家带…

磁盘管理以及文件系统08

1、为什么要对磁盘进行分区&#xff1f; 业务层面&#xff1a;为满足一定的需求所是做的特定操作。 2、硬盘是什么&#xff0c;以及硬盘的作用 硬盘&#xff1a;计算机的存储设备&#xff0c;一个或者多个带磁性的盘组成的&#xff0c;可以在盘片上进行数据的读写。硬盘的最…

LVGL圆弧、线条、图片、色环、按钮矩阵、文本区域、键盘部件

目录 LVGL圆弧部件 LVGL线条部件 LVGL图片部件 LVGL色环部件 LVGL按钮矩阵部件 LVGL文本区域部件 LVGL键盘部件 LVGL圆弧部件 圆弧部件以弧形滑动的形式来调节、显示某个参数的值。 圆弧部件组成部分&#xff1a; 背景弧&#xff08;LV_PART_MAIN&#xff09; 前景弧&am…

Spring AOP 切面按照一定规则切片并行查询Mapper并返回

需求&#xff1a; 有时候我们在查询mapper层时&#xff0c;有时候可能由于入参数据过大或者查询的范围较大&#xff0c;导致查询性能较慢&#xff0c;此时 我们需要将原本的查询按照一定规则将查询范围进行切面&#xff0c;然后分片查询&#xff0c;最后将查询结果进行组装合并…

MySQL入门学习-查询进阶.CASE

CASE 表达式是一种在 SQL 中用于进行条件判断和分支执行的功能。它可以根据不同的条件返回不同的结果&#xff0c;类似于编程语言中的 if-else 语句。 一、CASE 表达式有两种主要形式&#xff1a;简单 CASE 表达式和搜索 CASE 表达式。 1、简单 CASE 表达式&#xff1a; CAS…

浏览器提示网站不安全怎么办?有什么解决办法吗?

当你在浏览器中访问一个网站时&#xff0c;如果看到提示说该网站不安全&#xff0c;这通常是由于网站没有使用SSL证书或者SSL证书存在问题。SSL证书在这里扮演着非常关键的角色&#xff0c;下面我会详细解释它的作用以及如何解决这类不安全提示。 SSL证书的作用&#xff1a; 1…

tkinter实现窗口嵌入桌面

在桌面插件例如日历&#xff0c;便签或桌面宠物等等应用&#xff0c;通常希望能够将软件的窗口钉在桌面上&#xff0c;同时又不影响打开的其他窗口&#xff08;即不是置顶&#xff0c;而是常驻与桌面&#xff0c;即使用wind也不会将其窗口关闭&#xff09;。许多桌面美化类软件…

【CTF Web】CTFShow web11 Writeup(RCE+PHP+代码审计)

web11 1 阿呆听完自己菜死了&#xff0c;自己呆了。决定修好漏洞&#xff0c;绝对不能让自己再菜死了。 解法 可知 flag 在 config.php。 <?php # flag in config.php include("config.php"); if(isset($_GET[c])){$c $_GET[c];if(!preg_match("/system…