C++实现顺序表操作(实验2—作业)

C++实现顺序表的基本操作 C++实现顺序表的基本操作 为了对数据结构线性表中的顺序表进行练习,我写了一段可以实现顺序表创建、插入、删除、排序、打印等基本操作的代码。 #include<iostream> #include<algorithm> using namespace std; #define MAXSIZE 1000 #define OVERFLOW -2 #define ERROR 1 ... 阅读详情

在C++中,顺序表是一个线性表的一种实现方式。它是一种可以按照元素在内存中的物理顺序依次存储的数据结构。顺序表在内存中是连续的,可以通过下标来直接访问元素。

C++中的顺序表可以使用数组来实现。数组是一种固定大小的连续内存块,可以通过索引访问元素。在C++中,可以使用普通数组或者动态数组来实现顺序表。

普通数组是在编译时指定大小的数组,大小在运行时不能改变。可以使用下标来访问数组中的元素,通过将元素插入或删除来实现顺序表的操作。使用普通数组实现的顺序表的优点是访问速度快,缺点是大小固定,不能动态调整。

动态数组是使用关键字new在堆上分配内存的数组,大小可以在运行时动态调整。可以使用指针来访问动态数组中的元素,通过重新分配内存来实现顺序表的操作。使用动态数组实现的顺序表的优点是可以动态调整大小,缺点是访问速度相对较慢。

除了数组,还可以使用链表来实现顺序表。链表是一种非连续的数据结构,在C++中可以使用指针实现。链表中的每个节点都包含一个元素和指向下一个节点的指针。通过遍历链表来访问元素,通过插入或删除节点来实现顺序表的操作。链表实现的顺序表的优点是可以动态调整大小,缺点是访问速度相对较慢。

如下是一段用数组实现顺序表的过程

这段 C++代码实现了顺序表的初始化、插入、打印、置空、销毁、查找、删除、排序以及求并集、交集和差集等操作,并通过在主函数中对两个顺序表进行一系列操作来展示这些功能,最后还实现了在并集中查找特定元素的功能,并在结束时销毁了所有顺序表。

#include<bits/stdc++.h>//万能头文件
using namespace std;//命名空间

#define MAXSIZE 100 //最大长度
#define OVERFLOw -2
#define OK 1
#define ERROR 0

typedef int Status;
typedef char eleType;//数据类型

typedef struct{
	eleType *elements;
	int length;
}SqList;//定义顺序表

//顺序表的初始化
Status SqListInit(SqList &L){
	L.elements = new eleType[MAXSIZE];
	if(!L.elements) exit(OVERFLOw);
	L.length = 0;//长度为0
	return OK;//创建完毕
}
//顺序表的插入数据
Status SqListInsert(SqList &L,int i,eleType e){
	int j;
	if(i<1||i>L.length+1) return ERROR;//插入不合法
	if(i==MAXSIZE) return ERROR;//顺序表满了
	for ( j=L.length-1 ; j>=i-1; j--) {
		//逐个元素右移
		L.elements[j+1] = L.elements[j] ;
	}
	L.elements[i-1] = e ;   //插入e 
	L.length++;//L的长度加1
	return OK; //插入成功
}
//顺序表的打印
void SqListPrint(SqList &L){
	for(int i = 0;i<L.length;i++){
		cout<<L.elements[i]<<"\t";
	}
	cout<<endl;
}
//顺序表的置空
Status SqListEmpty(SqList &L){
	L.length = 0;
	L.elements = NULL;
	return OK;
}
//顺序表的销毁
void SqListDestroy(SqList &L){
	//判断是否为空
	if(L.elements){
		delete[]L.elements;//销毁空间
		L.length = 0;//长度为0
		L.elements=NULL;//置空
	}
}
//顺序表的查找
Status SqListFind(SqList &L,eleType e){
	for(int i  =0 ;i<L.length;i++){
		if(L.elements[i]==e){
			return i+1;//第几个出现,消除索引偏移
		}
	}
	return 0;
}
//顺序表元素删除
Status SqListDelete(SqList &L,int i){
	int j;
	if ((i <1) || (i > L.length)) return ERROR;   // 删除位置不合法
	for (j=i;j<=L.length-1; j++)
		L.elements[j-1]=L.elements[j]; // 被删除元素之后的元素前移
	L.length--;   //表长减 1
	return OK;
}

//顺序表排序
Status SqListSort(SqList &L){
	sort(L.elements,L.elements+L.length);
	return OK;
}

//顺序表并集(有序)
SqList SqListMerge(SqList &L1,SqList &L2){
	int i=0,j=0,t=1;
	SqList L3;//用来接收L1 L2的合集
	SqListInit(L3);//⭐初始化L3用来接收
	int preValue = -1;//防止最后存入剩余元素那一步元素重复
	while(i<L1.length&&j<L2.length){
		if(L1.elements[i]==L2.elements[j]){
			if(preValue!=L1.elements[i]){
				preValue=L1.elements[i];
				SqListInsert(L3,t++,L1.elements[i]);
				
			}i++;j++;//存入相对较小元素后对应坐标加1 
		}else if(L1.elements[i]<L2.elements[j]){
			if(preValue!=L1.elements[i]){
				preValue=L1.elements[i];
				SqListInsert(L3,t++,L1.elements[i]);
			}	i++;
		}else {
			if(preValue!=L2.elements[j]){
				preValue=L2.elements[j];
				SqListInsert(L3,t++,L2.elements[j]);
				
			}j++;
		}
	}
	//L1还有剩余
	while(i<L1.length){
		if(preValue!=L1.elements[i]){
			preValue=L1.elements[i];
			SqListInsert(L3,t++,L1.elements[i]);
			
		}i++;
	}
	//L2还有剩余
	while(j<L2.length){
		if(preValue!=L2.elements[j]){
			preValue=L2.elements[j];
			SqListInsert(L3,t++,L2.elements[j]);
		}
		j++;	
	}
	return L3;
}
//顺序表的交集(有序)
SqList SqListInserSection(SqList &L1,SqList &L2){
	SqList L4;
	SqListInit(L4);
	int i = 0,j = 0, t = 1;
	int preValue = -1;//防止最后存入剩余元素那一步元素重复
	while(i<L1.length&&j<L2.length){
		if(L1.elements[i]==L2.elements[j]){
			if(preValue!=L1.elements[i]){
				preValue=L1.elements[i];
				SqListInsert(L4,t++,L1.elements[i]);
			}i++;j++;//存入相对较小元素后对应坐标加1 
		}else if(L1.elements[i]<L2.elements[j]){
			i++;
		}else {
			j++;
		}
	}
	return L4;
}
//顺序表的差
SqList SqListDiff(SqList &L1,SqList &L2){
	SqList L5;
	SqListInit(L5);
	int i = 0,j = 0, t = 1;
	while(i<L1.length&&j<L2.length){
		if(L1.elements[i]==L2.elements[j]){
			i++;j++;
		}else if(L1.elements[i]<L2.elements[j]){
			SqListInsert(L5,t++,L1.elements[i++]);
		}else {
			j++;
		}
	}
	while(i<L1.length){
		SqListInsert(L5,t++,L1.elements[i++]);
	}
	return L5;
}
int main(){
	//L
	SqList L1;
	SqListInit(L1);
	for(int i =1;i<=10;i++){
		int x = 0-i+10+97;
		SqListInsert(L1,i,x);
	}
	cout<<"L1:  "<<endl;
	SqListPrint(L1);
	//L2
	SqList L2;
	SqListInit(L2);
	for(int i =1;i<=10;i++){
		int x = 0-i+15+97;
		SqListInsert(L2,i,x);
	}
	cout<<"L2:  "<<endl;
	SqListPrint(L2);
	
	cout<<"L1排序后:"<<endl;
	SqListSort(L1);
	SqListPrint(L1);
	
	cout<<"L2排序后:"<<endl;
	SqListSort(L2);
	SqListPrint(L2);
	
	
	cout<<"L2排序后与L1排序后合集 L3"<<endl;
	SqList L3 = SqListMerge(L1,L2);
	SqListPrint(L3);
	
	cout<<"L2排序后与L1排序后交集 L4"<<endl;
	SqList L4 = SqListInserSection(L1,L2);
	SqListPrint(L4);
	
	cout<<"L1 - L2 = L5"<<endl;
	SqList L5 = SqListDiff(L1,L2);
	SqListPrint(L5);
	
	cout<<"L2 - L1 = L6"<<endl;
	SqList L6 = SqListDiff(L2,L1);
	SqListPrint(L6);
	
	int goal;
	cout<<"请输入要在合集L3中查找的数字:"<<endl;
	cin>>goal;
	if(SqListFind(L3,goal)!=0){
		cout<<goal<<"在第"<<SqListFind(L3,goal)<<"个出现"<<endl;
	}else{
		cout<<goal<<"未在L3中出现"<<endl;
	}

	
	SqListDestroy(L1);
	SqListDestroy(L2);
	SqListDestroy(L3);
	SqListDestroy(L4);
	SqListDestroy(L5);
	SqListDestroy(L6);
	return 0;
}

数据结构实验1:C++实现静态顺序表类 写了3个多小时,还是太慢了、太菜了! 图1 程序运行演示截图1 实验1 1.1 实验目的 熟练掌握线性表的顺序存储结构。 熟练掌握顺序表的有关算法设计。 根据具体问题的需要,设计出合... 阅读详情

相关推荐

C++ 顺序表的类实现

1、顺序表的定义 将表中元素一个接一个的存入一组连续的存储单元中,这种存储结构是顺序结构,采用顺序存储结构的线性表简称为“ 顺序表”。 顺序表的存储特点是:只要确定了起始位置,表中任一元素的地址都通过下列公式得到: Loc(ai)=Loc(a1)+(i−1)∗L,1≤i≤n 其中,L是元素占用存储单元的长度。 2、顺序表的基本操作 (1)初始化:建立一个空的顺序表; (2)新建:新建一个顺序表; ...

qq_38236355的博客 2778

C++实现顺序表的14种操作

C++顺序表的操作 2017/12/27 // 顺序表.cpp: 定义控制台应用程序的入口点。 //Author:kgvito YinZongYao //Date: 2017.12.27 #include<iostream> using namespace std; #define MAXSIZE 3 #define Node ElemType #define ERRO...

Kirk.Vito的博客 1万+

用c++实现 c++顺序表的实现(采用模板)

函数实现数据的插入(头插&&尾插)、删除(头删&&尾删)、查找、按位置插入、按位置删除、顺序表求长、顺序表清除、顺序表摧毁、数据的逆置以及数据排序   main函数 #include"SeqList.h"//顺序表 void main() { SeqList mylist; int select = 1; int Item; int pos; while(sele

S0Soul的专栏 5323

顺序表的初始化、插入、删除、获得长度、判空、清空、打印等操作具体实现。

/**************************** * 文件名:[main.c] * 作者:〈漆黑〉 * 描述:〈顺序表〉 * 创建时间:2019.4.22 ****************************/ #include <stdio.h> #include <stdlib.h> #include "DataElement.h" ElementTyp...

漆黑梦工厂 4889

别再折腾框架了!用华为应用市场官方渠道搞定GBOX,安全安装谷歌全家桶(鸿蒙HarmonyOS 3/4实测)

本文详细介绍了如何在鸿蒙系统上通过华为应用市场官方渠道安全安装GBOX,实现谷歌全家桶的无损使用。该方法避免了传统破解方式的安全风险,利用沙箱技术隔离运行环境,确保系统稳定性和数据安全。特别适合鸿蒙HarmonyOS 3/4用户安全使用谷歌生态应用。

weixin_29305313的博客 4754

一生一芯预学习:从零搭建Verilator仿真环境与NVBoard实战

本文详细介绍了如何从零搭建Verilator仿真环境,并完成NVBoard实战项目,为'一生一芯'预学习提供完整指导。内容包括环境配置、工具安装、波形生成、自动化构建及可视化调试技巧,帮助初学者快速掌握数字逻辑设计与仿真验证的核心技能。

keras9composer的博客 700

实验一 顺序表的操作(数据结构实验)

以下为实验内容: 1.实验性质:设计性实验 2.要求: 编程实现顺序表的以下基本操作:建立顺序表,修改顺序表,插入顺序表,删除顺序表。 采用顺序表结构编程实现:两个集合的运算:交集/并集/差集。 3.实验目的 通过该实验,深入理解顺序表的逻辑结构、物理结构等概念,掌握顺序表基本操作的编程实现,注意顺序表插入、删除等操作过程中数据元素的移动现象,学生编写程序时,要考虑程序的健壮性,熟练掌握...

qq_41998273的博客 1万+

高通平台Android稳定性调试笔记:手把手教你用T32、Crash Utility分析Kernel Panic与RAM Dump

本文详细介绍了高通平台Android内核崩溃的分析方法,包括使用T32 Simulator和Crash Utility工具链解析Kernel Panic与RAM Dump。从环境配置、dump文件预处理到高级调试技巧,手把手教你如何定位和解决Android系统崩溃问题,特别适用于MSM/SA8155平台的开发者。

weixin_42543046的博客 525

数据结构教程实验一顺序表基本操作的实现

实现顺序表各种基本运算的基础上,设计主程序,完成如下功能:(1)初始化顺序表L。(2)依次插入2,5,7,9,10共5个元素。(3)输出顺序表L。4)输出顺序表L的长度。(5)判断顺序表L是否为空。6)输出顺序表L第4个元素。(7)输出元素5的位置。(8)在第4个元素的位置上插入元素100。(9)输出顺序表L。(10)删除顺序表L的第3个元素。(11)输出顺序表L。(12)释放顺序表L。

Annzz123的博客 1万+

DrissionPage实战:5分钟搞定京东滑块验证码自动登录(附完整轨迹生成代码)

本文详细介绍了如何使用DrissionPage工具实现京东滑块验证码的自动化登录,包括环境配置、滑块缺口识别、拟人化轨迹生成算法及完整登录流程。通过物理运动学模型和智能识别技术,有效提升验证码破解成功率,适用于电商自动化场景。

weixin_29229055的博客 243

高速设计注意事项总结——MDI篇

在以太网高速通信系统中,MDI(Medium Dependent Interface,介质相关接口)是连接物理层芯片(PHY)与传输介质(如网线)的关键接口,其设计直接影响信号完整性、传输速率和抗干扰能力。本文围绕 MDI 及 RJ45 接口电路、关键参数、设计与布线要点展开,为高速以太网设计提供参考。本文包含MDI 及 RJ45 接口电路组成、电路设计注意事项、布局布线要求等内容

qq_16237389的博客 1445

数据结构实验报告—顺序表的基本操作—学生管理系统

数据结构实验报告,顺序表的基本操作,学生管理系统

VLOKL的博客 8776

【YOLO26保姆级零踩坑教程】环境搭建+五大任务快速入门,一行代码实现检测/分割/姿态/OBB/分类(Win+Linux全适配)

YOLO26环境搭建与实战指南:零踩坑全适配 本文是YOLO26全栈技术专栏的入门篇,提供Windows/Linux双系统的纯实战环境搭建指南,主打零踩坑、全适配。YOLO26基于Ultralytics框架优化,无需编译源码或手动下载权重,原生支持多任务推理。 环境配置关键点: 必须安装Ultralytics 8.4.0及以上版本 支持CPU/GPU环境,推荐Python 3.8-3.11 提供清华源配置解决下载慢问题 安装步骤: CPU版:一键安装Ultralytics和OpenCV GPU版:匹配CUD

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 774

实验一:顺序表实验报告

一、实验目的 1、熟练掌握线性表的结构特点,掌握顺序表的基本操作。 2、巩固 C++相关的程序设计方法与技术。 3、学会使用顺序表解决实际问题。 二、实验内容 代码如下: const int MaxSize=10; class SeqList {public: SeqList(){length=0;} SeqList(int a[],int n);

Ida_adI的博客 1万+

UNet 改进(3):CBAM模块的融合创新

CBAM模块可以灵活地添加到网络的不同位置,本实现选择在初始卷积后添加,既提升了性能又不过度增加计算负担。UNet_CBAM通过集成注意力机制,使网络能够自动聚焦于图像中最相关的区域和特征通道,从而提升了分割性能。然而,传统的UNet在处理复杂场景时,对所有空间位置和通道特征一视同仁,这可能导致对重要特征的关注不足。在实际应用中,特别是在医学图像分析等需要精确分割的场景中,UNet_CBAM展现出了优异的性能。:CBAM添加的计算量很小,却能带来显著的性能提升,具有很好的性价比。

2401_82355416的博客 1642

Qt垂直滚动条QVerticalScrollBar详解:从基础到实战的控件开发指南

本文系统解析Qt中QVerticalScrollBar的用法,从基础概念到进阶技巧。主要内容包括:1)基础认知:介绍其继承关系、作用及典型应用场景;2)核心用法:创建方法、关键属性配置和信号槽连接;3)进阶技巧:自定义样式表美化外观,以及与自定义内容区域的联动实现;4)实战注意事项,如避免循环触发和高DPI适配等。文章强调掌握QVerticalScrollBar对提升Qt滚动类功能开发效率的重要性,并建议通过自定义文本编辑器实践巩固知识点。

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 757

C++顺序表实验

C++顺序表实验 实验目的: 1. 熟练掌握顺序表的存储特点; 2. 熟练掌握顺序表的基本算法:例如插入、删除、按值或按序号查找、输出等; 3. 熟练掌握面向对象程序设计方法; 4. 能灵活使用顺序表解决具体的问题; 实验内容: 1.定义顺序表类,例如SeqList,封装顺序表的基本操作算法; 2.在主函数中定义对象,并调用成员函数,验证顺序表的基本操作 代码: #include #include #include #include #include #include #define MaxSize 100

weixin_45863084的博客 1391

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

c++实现顺序表的基本操作(类模板)

c++实现顺序表基本操作(类模板) 第二期 上次写的是单链表的基本操作,下面写一个比单链表简单的——顺序表,顺序表跟数组的关系非常密切 运用数组所学的知识可实现顺序表的功能 功能实现如下: ①:元素的插入 ②:元素的删除 ③:根据元素的位置输出元素值 ④:根据元素值定位查找元素位置 ⑤:实现顺序表元素的翻转 话不多说,上代码! #include<iostream> using name...

终成大师的博客 5634

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

实验一 顺序表的操作(数据结构实验c++编写)

1. 实验要求 编程实现顺序表的以下基本操作:建立顺序表,修改顺序表,插入顺序表,删除顺序表。 采用顺序表结构编程实现:两个集合的运算:交集/并集/差集。 2. 实验目的 通过该实验,深入理解顺序表的逻辑结构、物理结构等概念,掌握顺序表基本操作的编程实现,注意顺序表插入、删除等操作过程中数据元素的移动现象,学生编写程序时,要考虑程序的健壮性,熟练掌握通过函数参数返回函数结果的办法。 3. 实验...

abtgu的博客 2593

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C++实现顺序表

c++实现顺序表中的基本操作: 1、顺序表的初始化 2、顺序表的创建 3、顺序表的插入 4、顺序表的删除 5、顺序表的查找 6、顺序表的取值 7、顺序表的清空 8、顺序表的长度 9、顺序表的判空 10、顺序表的打印 /* Project: sequence_list(数据结构-顺序表) Date: 2021/11/15 InitList(SqList &L) 参数:顺序表L 功能:初始化 时间复杂度:O(1) CreateList(SqList &L,int n) 参数:顺序表L,顺

qq_45139003的博客 1万+

顺序表的基本操作C++

讲一讲顺序表吧 首先定义结构体老套路了 顺序表比较特别首先要分配好内存空间,给够空间,不够以后再来说要么扩容,扩容是倍增的扩容一会开小灶来讲就不放到主运行里了 **typedef int Elemtype;**讲一下这个,可能比较多人不太理解这什么意思,其实也是单纯的定义一个类型变量罢了(typedef的用法),只是这个名字改了一下,对于以后对程序的维护方便点而已,就是把int这个整型变量改名为Elemtype,以后要改类型就直接在int那里改成float,double,bool之类,比较方便; #incl

alanmian的博客 3063

实验1.顺序表操作和单链表操作

1.插入元素操作:将新元素x从尾部插入顺序表a中、将新元素x插入到顺序表a中第i个位置、将新元素x插入到递增有序的顺序表a中适当的位置。2.删除元素运算:删除顺序表a中第i个元素、删除顺序表a中值相同的多余元素。1和2的运行结果如下图:由图知,1和2的要求均已完成且通过测试。3.创建一个带头结点的单链表4.插入元素操作:将新元素x插入到单链表head的头部、将新元素x插入到单链表head的尾部、将新元素x插入到单链表head中第i个元素之后。5。

weixin_63113396的博客 1679

顺序表(C++类模板实现)

文章目录1. 用C++实现顺序表2. 代码 1. 用C++实现顺序表     本文用到C++中的类模板,用类模板的好处就是方便建立任何类型的顺序表。但类模板这里有个坑就是无法分离编译,具体原因可以百度搜索类模板无法分离编译。最后废话不多说,直接上代码。 2. 代码     sqlist.h文件实现顺序表的声明和定义 #ifndef SQLIST_H #define SQLIST_H #define INIT_SIZE 100 #

zws的博客 4751

C++实现顺序表基本操作

此代码按照上篇博客线线性表基础概念,顺序表实现将概念用代码实现 #include<stdio.h> #include<iostream> using namespace std; //函数结果状态代码 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBL...

diviner_s的博客 3579

【C++】数据结构 顺序表的实现(详解)

本篇博客给大家带来的是用C++语言来实现数据结构的顺序表

就业知识博客 2223
上一篇: trie树(字典树) 洛谷 P3879 [TJOI2010] 阅读理解
下一篇: C++实现单向链表操作(实验3--作业)
ByteMaster_
博客等级 码龄3年 328粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值