博客
关于我
数据结构(5)顺序表简单实战
阅读量:724 次
发布时间:2019-03-21

本文共 2101 字,大约阅读时间需要 7 分钟。

1、从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值,若顺序表为空则显示出错信息并退出运行

分析:
我们先选择使用数组来表示顺序存储。
结点的数据结构如下:
template<typename ElemType>
struct SqNode
{
ElemType data[MaxSize];
int length;
};
实现逻辑:
按序找出最小的元素,然后后面的每一个元素向前挪一位
完整代码如下:

#include 
using namespace std;#define MaxSize 50template
struct SqNode{ ElemType data[MaxSize]; int length;};//从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删元素的值,若顺序表为空则显示出错信息并退出运行template
bool DeleteMinElemNode(SqNode
&L,ElemType &DelData){ if(L.length <= 0) { cout<<"顺序表为空"<
L.data[i]) { DelData = L.data[i]; pos = i; } } //后面的元素依次向前移动一位 for(int i = pos; i< L.length-1;++i) { L.data[i] = L.data[i+1]; } L.length--; return true;}int main(){ SqNode
sqnode; sqnode.length = 0; for(int i = 0; i

运行结果:

在这里插入图片描述
第一个例子写了完整代码。后续不再写完整代码,只写算法的主要实现过程

2、设计一个高效算法。将顺序表L的所有元素逆置。要求算法的空间复杂度为O(1)。

设计思路:
比如顺序表里元素为a1、a2、a3、a4、a5。我们可以直接从顺序表中间一份为2,进行首尾两两互换,a1与a5换,a2与a4换。这样不再需要额外的空间开销()。
实现过程:

int reverse(SqNode &L){   	for (int i = 0; i < L.length/2; ++i) 	{   		L.data[i] = L.data[L.length - i - 1] + L.data[i];				L.data[L.length - i - 1] = L.data[i] - L.data[L.length - i - 1];		L.data[i] = L.data[i] - L.data[L.length - i - 1];	}}

3、对长度为n的顺序表L,编写一个时间复杂度为O(n)、空间复杂度为O(1)的算法,该算法删除顺序表上所有值为x的数据元素。

设计思路:
顺次遍历顺序表,将值不等于x的数据元素的个数用k表示,然后第k位放第k个不等于x的元素。
实现过程:

int DeleteX(SqNode &L,const ElemType x){   	int k = 0;	for (int i = 0; i < L.length; ++i) 	{   		if (L.data[i] != x)		{   			L.data[k] = L.data[i];			++k;		}		L.length = k;	}	return 0;}

4、从有序顺序表中删除其值在给定值s与t之间的所有元素(s<t),如果s和t不合理或顺序表为空,则显示出错信息并退出运行。

设计思路:
找出第一个大于等于s的元素下标和最后一个小于等于t的元素的下标,然后计算出距离,后面元素依次向前移动n位
算法实现

int DeleteStoT(SqNode &L, const ElemType s, const ElemType t){   	int sk = 0,tk = 0;	if (s >= t || L.length <= 0)	{   		std::cout << "error" << endl;		return -1;	}	for (int i = 1; i < L.length; ++i)	{   		if (L.data[i-1] < s && L.data[i] >= s)		{   			sk = i;		}		else if (L.data[i-1] <= t && L.data[i] > t)		{   			st = i-1;		}		if (!st)			L.data[i - (st - sk)] = L.data[i];	}	return 0;}

人,总是要有一点精神的,不是吗

转载地址:http://nkngz.baihongyu.com/

你可能感兴趣的文章
ngModelController
查看>>
ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名
查看>>
ngrok内网穿透可以实现资源共享吗?快解析更加简洁
查看>>
NHibernate学习[1]
查看>>
NHibernate异常:No persister for的解决办法
查看>>
NIFI1.21.0_java.net.SocketException:_Too many open files 打开的文件太多_实际操作---大数据之Nifi工作笔记0051
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_补充_更新时如果目标表中不存在记录就改为插入数据_Postgresql_Hbase也适用---大数据之Nifi工作笔记0059
查看>>
NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
查看>>
NIFI1.21.0最新版本安装_连接phoenix_单机版_Https登录_什么都没改换了最新版本的NIFI可以连接了_气人_实现插入数据到Hbase_实际操作---大数据之Nifi工作笔记0050
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_插入修改删除增量数据实时同步_通过分页解决变更记录过大问题_01----大数据之Nifi工作笔记0053
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表或全表增量同步_实现指定整库同步_或指定数据表同步配置_04---大数据之Nifi工作笔记0056
查看>>
NIFI1.23.2_最新版_性能优化通用_技巧积累_使用NIFI表达式过滤表_随时更新---大数据之Nifi工作笔记0063
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_生成插入Sql语句_实际操作02---大数据之Nifi工作笔记0041
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_不带分页处理_01_QueryDatabaseTable获取数据_原0036---大数据之Nifi工作笔记0064
查看>>