顺序表的操作及实现(C++)

2023-11-09

顺序表的操作是大家在学习数据结构的第一个模块,也是最简单的一个。下列是顺序表的六种基本操作详解,希望能对您有所帮助~

1.建立一个顺序表,输入n个元素并输出

#define MAXSIZE 100//确定最大值
#define OK 1
#define ERROR 0
typedef struct//自定义顺序表类型
{
	int *elem;
	int length;
}sqlist;
int InitList(sqlist &l)
{
	l.elem = new int[MAXSIZE];//在堆区开辟MAXSIZE大小的空间
	if (!l.elem)
		exit (OVERFLOW);
	l.length = 0;//初始化l.length为0
	return OK;
}
void printfff(sqlist &l)//把顺序表的输出作为一个独立的函数,在输出时会多次用到
{
	int i=0;
	for (i = 0; i < l.length; i++)
	{
		cout << l.elem[i] << " ";
	}
	cout << endl;
}

2.查找线性表中的最大元素并输出

void findmax(sqlist &l)//查找最大值的函数名为findmax
{
	int i;
	int q = l.elem[0];
	for (i = 0; i < l.length; i++)
	{
		if (q < l.elem[i])
			q = l.elem[i];
	}//q等于顺序表中最大的元素
	cout << q << endl;//输出q
}

3.在线性表的第i个元素前插入一个正整数x

int ListInsert(sqlist &l, int i, int e)
{
	int j;
	if ((i < 1) || (i > l.length + 1))//i值表示在顺序表中的第几个位置上插入元素,不可能在i<1或i>l.lengh+1时成立。i若小于等于0,显然不可能,当i等于l.length+1时,代表直接在最后一个元素的后一位插入,则l.length+1成立。
		return ERROR;
	if (l.length == MAXSIZE)//元素的个数已经达到最大值
		return ERROR;
	for (j = l.length;j>=i;j--)
		l.elem[j] = l.elem[j - 1];//i位置后的元素都向后“挪”一位
	l.elem[i - 1] = e;//位置i的元素等于e
	++l.length;//千万不要忘了顺序表的长度加一
	return OK;
}

4.删除线性表中的第j个元素

int ListDelete(sqlist &l, int i)
{
	if ((i < 1) || (i > l.length))
		return ERROR;
	for (int j=i-1;j<l.length-1;j++)//i位置以后的元素都向前“挪”一位,i位置上的元素被覆盖
		l.elem[j] = l.elem[j+1];
	--l.length;//千万不要忘了顺序表的长度减一
	return OK;
}

5.将线性表中的元素按升序排列

按升序排列可以用排序算法,下面的代码实现用到的是冒泡排序

void sort(sqlist &l)
{
	int i,j;
	for (i = 0; i < l.length-1; i++)
	{
		for (j = 0; j < l.length-i - 1; j++)
		{
			if (l.elem[j] > l.elem[j + 1])
			{
				int temp = l.elem[j];
				l.elem[j] = l.elem[j+1];
				l.elem[j + 1] = temp;
			}
		}
	}
}

6.将线性表中的元素就地逆序(只允许用一个暂存单元)

void turn(sqlist &l)
{
	int a;//定义暂存空间
	for (int i = 0; i < l.length / 2; i++)//注意一定要将l.length除以二,不然得到的结果没有什么变化。读者可用i<l.length带入for循环中用几个数来举例。
	{
		a = l.elem[l.length - i - 1];
		l.elem[l.length - i - 1]=l.elem[i];
		l.elem[i] = a;
	}
}

如果大家还想知道顺序表的操作详解,欢迎评论告诉我~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

顺序表的操作及实现(C++) 的相关文章

随机推荐

  • 高级API(UDP连接&Map集合&Collection集合)

    UDP协议 DatagramSocket 该对象可以代表接收端也可以代表发送端 DatagramPacket 数据打包对象 数据报对象 将发送的内容通过该对象进行打包 在通过指定的方法将该对象进行传输 1 通过DatagramSocket建
  • STM32学习笔记—I2C通信

    1 I2C介绍 2 I2C通讯过程介绍 3 函数配置 4 代码 1 I2C介绍 i2c总线是nxp公司 philp公司 开发的两线式串行总线 用于连接微控制器及外围设备 它是由数据线SDA和时钟线SCL构成 我们平常使用还会加上一个供电即v
  • Centos下安装gitolite+git

    一直以来我都是用SVN的 但最近做迭代开发 多分支时 发现SVN使用起来极不方便 因此打算换成git做源码管理 git的理论以及特性本文就不做讲解了 本主主要讲解怎么安装 配置git 以及git权限管理服务gitolite 组网结构 git
  • 计算机视觉基础(八)—— LBP特征描述算子之人脸检测

    1 简介 LBP指局部二值模式 Local Binary Pattern 是一种用来描述图像局部特征的算子 具有灰度不变性和旋转不变性等显著优点 LBP常应用于人脸识别和目标检测中 在OpenCV中有使用LBP特征进行人脸识别的接口 也有用
  • python opencv imread()中文路径返回为空None的解决办法 (imdecode函数的使用)

    本质原因并非网上某些地方说的是中文编码UNICODE UTF 8之类的问题 其实是python版opencv不接受NON ASCII的中文路径 为了使用中文路径 可以借助一些其他的库 本文首先介绍一种通过numpy库 毕竟这个是python
  • 编程问题(持续记录)

    问题记录 一 vue问题记录 1 vue elementui项目 build后在ie下报 Promise 未定义错误 2 elementui ie下icon不显示 3 npm run dev 时 报babel runtime core js
  • 两种方法将oracle数据库中的一张表的数据导入到另外一个oracle数据库中

    oracle数据库实现一张表的数据导入到另外一个数据库的表中的方法有很多 在这介绍两个 第一种 把oracle查询的数据导出为sql文件 执行sql文件里的insert语句 如下 第一步 导出sql文件 第二步 用PL Sql Develo
  • 快速幂理解

    2 9 gt gt 2 2 8 2 2 8 gt gt 2 4 4 2 4 4 gt gt 2 16 2 2 16 2 gt gt 2 256 1 思想 通过降阶的方式每次将幂除 2 将底数每次乘方 因为幂不能为奇数 所以如果幂为奇数必须处
  • 数据筛选特征方法-方差法

    在数理统计中 方差是测算随机变量离散趋势最重要 最常用的指标 方差是各变量值与其均值离差平方的平均数 它是测算数值型数据离散程度的最重要的方法 当数据分布比较集中时 各个数据与平均数的差的平方和较小 当数据分布比较分散 即数据在平均数附近波
  • 正确理解层次方框图

    正确的层次方框图示例 图片来源 https blog csdn net qq 15037231 article details 60467793 注意 在网上搜索层次方框图会出现很多类似的图 但很多都是错的 层次方框图用树形结构的一系列多层
  • 重定向与请求转发

    分享一下在华清远见学习的知识点 重定向与请求转发也是面试中容易问到的问题 目录 一 重定向 二 请求转发 三 请求转发与重定向数据传递 四 请求转发与重定向的区别 总结 一 重定向 重定向是指由原请求地址重新定位到某个新地址 原有的 req
  • Java培训班学费一般多少?Java自学成功率是多少?

    Java培训班学费一般多少呢 Java自学成功率是多少 很多想学Java的新手对培训学费很是好奇 同时也想知道自学成功率 毕竟能不花钱就能学好的话 没必要花巨款学习 关于Java培训费用与自学成功率的答案请往下看 Java培训班学费一般多少
  • 鼠标移入背景图片放大(还原)

  • maven 配置 Tomcat7 插件和启动

    如果想使用 在 maven中使用 Tomcat7 来启动的话 可以这样配置
  • ORBSLAM2计算描述子距离——C++ 位操作得到二进制32位int值中有多少个1

    看ORBSLAM2时算描述子之间的距离时看到的神奇的位操作 特此记录一哈 unsigned int v pa pb v v v gt gt 1 0x55555555 v v 0x33333333 v gt gt 2 0x33333333 d
  • 如何解析EML(邮件)格式的文件以及一款小巧的EML邮件阅读工具

    在理解EML格式的时候 先回顾一下历史 这样有助于理解邮件的格式 比如邮件传输时为何会有多种编码方式 此外 理解EML格式也有助于理解HTTP协议 历史溯源 由于历史原因 我们目前看到的大部分的网络协议都是基于ASCII码这种纯文本方式 也
  • 用java写一个权限系统的框架

    Java是一种强大的编程语言 可以用来构建复杂的软件系统 包括权限系统 下面是一个简单的Java权限系统的框架 定义用户和角色 首先需要定义用户和角色 比如管理员 普通用户等 分配权限 为每个角色分配不同的权限 比如管理员有所有权限 普通用
  • 58,滴滴,京东等大厂都在用的抓包工具:Fiddler。软件测试工程师必会技能

    前言 Fiddler是一个http协议调试代理工具 它能够记录并检查所有你的电脑和互联网之间的http通讯 设置断点 查看所有的 进出 Fiddler的数据 例如cookie html js css等文件 换句话说就是Fiddler可以拦截
  • java jdbc 时间段和日期段查询

    首先先创建1000条随机日期数据 package jdbc import java sql Connection import java sql Date import java sql DriverManager import java
  • 顺序表的操作及实现(C++)

    顺序表的操作是大家在学习数据结构的第一个模块 也是最简单的一个 下列是顺序表的六种基本操作详解 希望能对您有所帮助 1 建立一个顺序表 输入n个元素并输出 define MAXSIZE 100 确定最大值 define OK 1 defin