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

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

线性表的数据元素的逻辑特征是线性的,是一种典型的线性结构。这样的结构可以借鉴数组,如数组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是否符合需求。 兼容性和性能 确保其支持你开发的应用平台&…

Android15 Beta更新速览

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

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

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

磁盘管理以及文件系统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…

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

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

【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…

WorldSpace下的合批策略与ScreenSpace有什么区别

1&#xff09;WorldSpace下的合批策略与ScreenSpace有什么区别 2&#xff09;在iOS上用Metal取代OpenGL的多么 3&#xff09;在动画蓝图中将两个或多个动画同时融合到同一个网格 4&#xff09;Mipmap如何限定层级 这是第387篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的…

java面对对象编程-多态

介绍 方法的多态 多态是在继承&#xff0c;重载&#xff0c;重写的基础上实现的 我们可以看看这个代码 package b;public class main_ {public static void main(String[] args) { // graduate granew graduate(); // gra.cry();//这个时候&#xff0c;子类的cry方法就重写…

结合Django和Vue.js构建现代Web应用

文章目录 1. 创建Django项目2. 配置Django后端3. 创建Vue.js前端4. 连接Django和Vue.js5. 构建和部署 在现代Web开发中&#xff0c;结合后端框架和前端框架是非常常见的&#xff0c;其中Django作为一种流行的Python后端框架&#xff0c;而Vue.js则是一种灵活强大的前端框架。本…

仿冒、钓鱼、入侵……警惕邮件安全这些“坑”

为了保证用户对电子邮箱系统的安全使用&#xff0c;保证个人的隐私和财产的安全&#xff0c;我们呼吁每个人都要加强自己的网络安全意识&#xff0c;在对电子邮件进行处理的时候&#xff0c;要对钓鱼邮件进行认真的识别&#xff0c;同时还需要设定一个客户的密码来保证你的邮箱…

新旅程:类与对象的魔法课堂

&#x1f389;&#x1f389;&#x1f389;欢迎莅临我的博客空间&#xff0c;我是池央&#xff0c;一个对C和数据结构怀有无限热忱的探索者。&#x1f64c; &#x1f338;&#x1f338;&#x1f338;这里是我分享C/C编程、数据结构应用的乐园✨ &#x1f388;&#x1f388;&…

html+CSS部分基础运用7

项目1 设计简易灯箱画廊 1.实验所需素材 在trees文件夹中提供一个MP3文件和18个JPG文件&#xff0c;设计页面时可以使用。 2.编程实现简易灯箱画廊&#xff0c;鼠标单击任一个图像超链接&#xff0c;在底部浮动框架中显示大图像&#xff0c;效果如图4-1所示的页面。 图4-1 简…

Echarts图表库推荐以及使用Echarts实现饼图端头弧形效果

推荐Echarts图表库官方链接http://www.ppchart.com/#/ 下面是一段实现饼图端头弧形效果的Echarts代码 虽然有了上面的图表库&#xff0c;里面案例也挺多&#xff0c;但是就是没找到我想要的这种效果&#xff0c;索性就手写了一个 下面代码可以直接去我上面的图标库运行看效果…

书籍学习|基于SprinBoot+vue的书籍学习平台(源码+数据库+文档)

书籍学习平台 目录 基于SprinBootvue的书籍学习平台 一、前言 二、系统设计 三、系统功能设计 1平台功能模块 2后台功能模块 5.2.1管理员功能模块 5.2.2用户功能模块 5.2.3作者功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 …